0000 001 | X | Адрес устройства шины CBUS (для совместимости) |
0000 010 | X | Адрес для устройств иных шин |
0000 011 | X | Зарезервировано |
0000 1XX | X | Код ведущего устройства режима Hs |
1111 1XX | X | Зарезервировано |
1111 0XX | X | Признак 10-битной адресации |
При S
(Sr
) ведущее устройство передает 7 бит адреса (А[6:0] в битах [7:1]) и признак операции RW
(в бите 0 RW
=1 — чтение, RW
=0 — запись). Адреса ведомых устройств не должны попадать в области, указанные в таблице. Диапазоны адресов устройств различных типов централизованно выдаются изготовителям микросхем фирмой Philips. Для микросхем памяти, например, 7-битный адрес содержит две части: старшие 4 бита А[6:3] несут информацию о типе устройства (EEPROM — 1010), а младшие 3 бита А[0:2] определяют номер устройства данного типа на шине. Микросхемы с интерфейсом I²C имеют три адресных входа, коммутацией которых на логические уровни 1 и 0 задается номер устройства, на который оно «отзовется», а тип устройства «зашит» в нем самом его изготовителем.
Когда RW
=0. Выбранное ведомое устройство отзывается подтверждением (ACK
=0), после чего ведущее устройство посылает один или несколько байт данных, на каждый из которых ведомое устройство должно отвечать подтверждением.
Когда RW
=1. Выбранное ведомое устройство также отзывается подтверждением (ACK
=0), после чего происходит смена направления передачи и данные уже передает ведомое устройство. Ведущее устройство подтверждает каждый принятый байт, кроме последнего.
Эти передачи могут завершаться условием P
, вводимым ведущим устройством, после которого шину может захватить любое ведущее устройство. Возможны и комбинированные передачи, когда ведущее устройство после окончания очередного обмена не отдает шину, а формирует повторный старт (Sr
), после чего обращается к тому же или иному устройству.
Отметим, что спецификация I²C не оговаривает правил модификации внутреннего (для микросхемы) адреса данных при последовательных обращениях — их определяет разработчик устройства в соответствии с его функциями. Для памяти естественен автоинкремент адреса, упрощающий последовательные обращения. Для регистроориентированных устройств автоинкремент обычно не нужен.
Специальные коды, приведенные в табл. 11.1, трактуются следующим образом.
♦ Общий вызов является широковещательным, на него должны отвечать лишь устройства, поддерживающие соответствующие функции (см. ниже).
♦ Байт Start
предназначен для облегчения программной реализации протокола I²C (для функций ведомых устройств, не имеющих полной аппаратной реализации протокола). На байт Start
не должно отвечать ни одно устройство. Формируемый сигнал SDA
(рис. 11.2) может быть использован как запрос аппаратного прерывания, по которому процессор «вплотную» займется обработкой сигналов I²C. До получения этого байта процессор (микроконтроллер) может не отвлекаться на слежение за сигналами интерфейса.
♦ На адреса шины CBUS (трехпроводный «родственник» шины I²C) и иных шин устройства I²C отвечать не должны.
♦ При использовании 10-битной адресации биты [2:1] содержат старшую часть адреса, форматы 10-адресных посылок рассмотрены ниже.
Рис. 11.2. Временна́я диаграмма байта Start
В
. При В
=0 устройства, принявшие общий вызов, должны считать программируемую часть своего аппаратного адреса, выполнив (второй байт 00000110b) или не выполнив (000000100b) внутреннюю процедуру сброса. Другие значения байта устройства должны игнорировать. Каким образом программируется адрес, зависит от устройства (указывается в его описании). При В
=1 общий вызов используется для
Широковещательная передача может использоваться, например, аппаратным контроллером клавиатуры, не знающим, на какой адрес посылать свои асинхронно возникающие сообщения. Вместо этого возможна и иная схема: по включении (и сбросу) это устройство становится ведомым приемником, которому ведущее устройство (системный контроллер) сообщит адрес потребителя информации для дальнейших «узконаправленных» передач, в которых это устройство будет уже ведущим.
Введение S
(Sr
) биты 2:1 несут старшие биты адреса, бит 0 — признак RW
=0; второй байт несет младшие 8 бит адреса, а последующие байты — передаваемые данные. Приемник дает подтверждения обычным способом.