Цитата(Arlleex @ May 12 2018, 15:33)

В режиме передачи Master не управляет битом подтверждения ACK, а вот Вы, как Slave, его выдаете. Почему Вы NACK выдаете - это Вам надо разобраться. Master тут не при чем, он делает все правильно. Более того, Master в конце чтения последнего байта должен выставить Вам NACK перед выставлением STOP-сигнала.
Зачем Вам SB, если у Вас есть замечательное прерывание ADDR? Оно придет после того, как Вы Slave-ом примете свой (или альтернативный, в STM32 их несколько) физический адрес устройства.
С подтверждением там все в порядке.
Мастер передал последний байт.
Слейв ему сказал ACK.
Затем мастер делает следующее
SCL = 0
SDA = 1
SCL = 1
SDA = 0 - это новый старт без стопа.
С чтением как раз все ОК есть и NAK и СТОП.
Прерывание ADDR использую, но оно приходит после передачи адреса (запроса чтения).
В программе есть обработка данных их нужно успеть приготовить для мастера.
Поэтому ищу как понять что мастер окончил передавать.
Но получается что аппаратно никак.