На вышеописанной физической основе строится протокол обмена данными по I²C. Каждое ведомое устройство имеет свой адрес, уникальный на шине. В начале любой передачи ведущее устройство после условия S
или Sr
посылает адрес ведомого устройства или специальный адрес (табл. 11.1). Ведомое устройство, опознавшее свой адрес после условия Start , становится выбранным ; оно обязано ответить подтверждением на адрес и последующие сигналы со стороны ведущего устройства, до получения условия P
или Sr
. В первоначальном варианте интерфейса разрядность адреса устройства составляла 7 бит, впоследствии был введен и режим 10-битной адресации, совместимый с 7-битной. На одной шине могут присутствовать устройства и с 7-битной, и 10-битной адресацией.
Таблица 11.1. Специальные адреса I²C
Биты[7:1] |
Бит 0 (RW) |
Назначение |
0000000 |
0 |
General call address — адрес общего вызова |
0000 000 |
1 |
Start — начало активного обмена |
0000 001 |
X |
Адрес устройства шины CBUS (для совместимости) |
0000 010 |
X |
Адрес для устройств иных шин |
0000 011 |
X |
Зарезервировано |
0000 1XX |
X |
Код ведущего устройства режима Hs |
1111 1XX |
X |
Зарезервировано |
1111 0XX |
X |
Признак 10-битной адресации |
При 7-битной адресации в первом байте после 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-адресных посылок рассмотрены ниже.
Читать дальше