В любом случае только ведущий может прекратить обмен, выставляя на линии SDA ВЫСОКИЙ уровень при ВЫСОКОМ уровне на линии SCL; такое состояние называется состоянием СТОП. При необходимости ведущий может начать обмен с другим ведомым, повторно сформировав на шине состояние СТАРТ. Кроме того, ведущий может формировать состояние СТАРТ, не генерируя перед этим состояние СТОП; в таком случае это состояние называется повторный СТАРТ или просто ПОВСТАРТ. К примеру, ведущий собирается передать (ведущий-передатчик) внутренний адрес ячейки в I2С-совместимую микросхему памяти (см. Пример 12.3), а затем прочитать (ведущий-приемник) данные из этой ячейки. Для выполнения этой операции потребуется сменить направление передачи данных, что осуществляется повторным формированием состояния СТАРТ и посылкой нового адресного пакета с требуемым значением бита направления (см. Рис. 12.27). Различие между использованием состояния ПОВСТАРТ и СТОП заключается в том, что последнее сигнализирует другим устройствам на шине, что ведущий освободил шину и что другое устройство может стать ведущим.
При программной реализации интерфейса I2С в микроконтроллерах PIC возникает проблема, заключающаяся в том, что выходы портов не являются выходами с открытым стоком, т. е. состояние лог. 1 не формируется разомкнутой цепью, как того требует спецификация (см. Рис. 12.14,
bcf PORTA,2; При конфигурировании RA2
... ...
STATUS,RP0; Переключаемся в 1-й банк
bcf TRISA,2; На выходе RA2 — лог. 0
nор; Короткая задержка
bsf TRISA,2; Переводим RA2 в третье состояние, делая его входом
bcf STATUS,RP0; Возвращаемся в 0-й банк
При этом ВЫСОКИЙ уровень на линии формируется совместным влиянием внешнего подтягивающего резистора и высокого входного сопротивления, как показано на Рис. 12.14,
Рис. 12.14.
Собственно процесс обмена между ведущим и ведомым устройствами состоит из передачи различных пакетов (один пакет — 8 бит данных плюс бит квитирования), передаваемых между состояниями СТАРТ и СТОП. Содержимое этих пакетов может слегка изменяться в зависимости от требований ведомого устройства, однако последовательность передачи пакетов всегда остается неизменной (см. Рис. 12.15): сначала передается адрес ведомого, затем — управляющий байт или команда, а потом передается один или несколько байтов данных.
Рис. 12.15.
В соответствии со спецификацией I2С каждое ведомое устройство должно иметь уникальный
Не все 7-битные адреса являются допустимыми. В частности, все адреса формата Ь’0000ХХХ’ или b’1111ХХХ’ зарезервированы для специальных применений; таким образом, в распоряжении пользователей остается 224 возможных адреса.
Например, адрес Ь’0000000’ обозначает широковещательный пакет, посылаемый всем ведомым на шине, а не какому-то конкретному устройству. Одновременно с введением режима Fast в протоколе I2С появилась возможность использования 10-битных адресов. На использование расширенной адресации указывает передача зарезервированного адреса Ь’111110ХХХ’, три младших бита которого будут объединены с содержимым последующего 7-битного пакета адреса.