скрытое меню
I2C

Лог анализатор в помощь

HAL_I2C_IsDeviceReady

while(HAL_I2C_IsDeviceReady(&hi2c1, I2C_SLAVE_ADDR_24c256 , 1, HAL_MAX_DELAY)!= HAL_OK)
{
	vTaskDelay(1);
}
фотка 1

HAL_I2C_Mem_Write_IT

txAddr=0;
txBuf[0]=0x31;
res=HAL_I2C_Mem_Write_IT(&hi2c1, I2C_SLAVE_ADDR_24c256, txAddr, I2C_MEMADD_SIZE_16BIT,(uint8_t *)txBuf, 1);
фотка 1

Тут тоже все начинается как обычно сначала с передачи адреса.

Для приема ACK/NACK передатчик отпускает линию SDA и переходит на прием.

Далее если приемник не подтверждает ничего ACK-ом или просто тупо молчит (допустим его нет на шине вообще) она подтягивается резисторами к 3.3В (это NACK), но это только в том случае произойдет , если приемник не держит SDA в нуле (это ACK).

Значком вопрос отмечено как именно происходит переход к передаче следующего байта :
Чтобы не терять ритм синхроимпульса SCL , передатчик быстро поднимает SDA и затем сразу роняет и это у нас START