I2C

Флаг TXIS

Описание

Флаг TXIS формируется в конце передачи байта, а не в его начале. Из-за этого, если байт был предварительно загружен, то после подтверждения адреса первый TXIS не выставляется. Первая установка TXIS будет после отправки первого байта. Если в режиме без растягивания (NOSTRETCH = 1) за время от установки TXIS до отправки следующего байта не были загружены данные, то возникает недозагрузка.

Ведомый передача без растягивания
Рисунок 1. Ожидаемая диаграмма состояния шины I2C и события при передаче данных в режиме ведомый без растягивания (NOSTRETCH = 1)
Ведомый передача без растягивания ошибка
Рисунок 2. Диаграмма работы флага TXIS с ошибкой в режиме ведомый без растягивания (NOSTRETCH = 1)

Обход

Варианты:

  1. Передача по флагу TXE без прерываний;

  2. Передача по флагу TXIS с прерываниями. Потребует значительно снизить частоту передачи (приблизительно до 50 кГц) и использовать очень короткий обработчик прерываний;

  3. Использование DMA. Этот блок тоже работает по флагу TXIS, но передает байт значительно быстрее, чем это возможно по прерыванию, что позволит работать на частоте 400 кГц и выше.