присутствует несколько мастеров. Буду говорить в контексте реализации I2C (TWI) в AVR (ATmega328).
Всем известно состояние Arbitration Lost, когда два или более мастера начали работу с шиной одновременно, и в итоге только одному удаётся ею завладеть. Тут все детали работы просты и понятны.
Мне не совсем понятно состояние Bus Error. Если я правильно понимаю, то оно возникает, если мой мастер осуществлял передачу или приём, а другой мастер в середине посылки решил сделать условие START или STOP.
Вот тут у меня возникает несколько вопросов:
1. Должен ли каждый мастер мониторить состояние шины, чтобы не приводить в принципе к такой ситуации?
2. Если да, то поступает ли таким образом AVR? То есть если я попытаюсь отправить START в тот момент, когда другой мастер осуществляет передачу, то AVR аппаратно дождётся, пока на шине возникнет STOP, и только тогда попытается отправить свой START?
3. Кроме того Bus Error возникает и при неожиданном условии STOP. Но как оно в принципе может возникнуть, если не было конфликтного условия старт?
4. Может я некорректно понимаю принцип Bus Error и он работает с точностью наоборот? То есть если мой мастер пытается отправить START в тот момент, когда на шине уже идёт передача другим мастером, то мне вывалится Bus Error? Опять же непонятно при каких условиях Bus Error может мне вывалиться при отправке STOP.
Почему бас еррор не может просто обозначать какую-то аномалию, когда какое-то мудило держит линию и провоцирует тем стоп?
Обсуждают сегодня