Ваш slave работает в режиме "Ведомый передатчик" и может передавать данные сколько ему угодно. При передачи последнего байта , не забудьте сбросить бит TWEA , после чего передачик "впадёт" в состояние $C0 "думая" , что сейчас он получит NA , но получит естественно ACK , после чего уже и перейдёт в состояние С8 и будет гнать на шину SDA FFаки. Т.е сам то он остановится. Мастер в регистре TWSR будет иметь скорее всего код 50 , т.е будет продолжать приём байтов. Можно попробывать отловить "неожиданный" пакет FF и сбросить мастер . Cам slave правильно остановить обмен не сможет , но он может "засадить" ,программно , шину SCL в 0 , после чего уже мастер не получив нормальный код ответа прекратит передачу. Не правильно это, но попробывать можно.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|