Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

346 Часть 111. Практическое программирование микроконтроллеров АVR логическую 1 при высоком уровне на линии SCL). Между этими сигналами линия считается занятой, и только «ведущий» (тот, который выдал сигнал START) может управлять ею1 • Сама информация передается уровнями на линии SDA (в обычной положительной логике, старший разряд первым), причем смена состояний может происходить только при низком уровне на SCL, а при высоком уровне на ней про­ исходит считывание значения бита. Любая смена уровней SDA при высоком уровне SCL будет воспринята либо как START, либо как STOP. MSB s� : Г-V-V " "' )Д · � - J 1--- адресведомоrо ---I RIW SCL START АСК Рис. 1 3.2. Обмен информацией по интерфейсу 1 2 С . - , Процесс обмена всегда начинается с передачи ведущим байта, содержащего адрес устройства (также начиная со старшего разряда), который содержится в семи стар­ ших битах. Последний (младший ! ) бит этого байта называется R/W и несет инфор­ мацию о направлении обмена: если он равен О, то далее ведущий будет передавать информацию, т. е . писать (w), если равен 1 - читать (R), т. е. ожидать данные от ведомого. Все посылки (и адресные, и содержащие данные) сопровождаются девя­ тым битом, который передается последним и называется битом квитирования ( дек). Во время действия этого девятого импульса адресуемое устройство (т. е. ве­ домый, который имеет нужный адрес после посьmки адреса ведущим, или веду­ щий, если данные направлены к нему) обязано сформировать ответ ( дек) низким уровнем на линии SDA. Если такого ответа нет (NACK ) , то можно считать, что дан­ ные не приняты, и фиксировать сбой на линии. Иногда устройства не требуют от­ сылки бита дек (или игнорируют его), и это учтено в процедурах, которые рассмот­ рены далее. Заметим, что сигналы SCL необязательно должны представлять собой равномер­ ный меандр со скважностью 2 - период их следования в общем случае ничем не ограничен, кроме «терпения» приемника, который, естественно, ждет сигнала какое-то ограниченное время (иначе при нарушении протокола программа может зависнуть) . Более подробно мы рассматривать протокол I 2 c не станем, т. к. вы лег­ ко можете найти его описание в документации на любое устройство, которое этот 1 Хотя это и не совсем так, но здесь мы не будем углубляться в подробности - за ними я отсылаю читателя к [6,7] .

RkJQdWJsaXNoZXIy MTExODQxMg==