Начало любой передачи — условие
SCL
и SDA
). Условие S
) — перевод сигнала SDA
из высокого в низкий при высоком уровне SCL
. Завершается операция переводом сигнала SDA
из низкого уровня в высокий при высоком уровне SCL
— условие P
), также вводящееся ведущим устройством. При передаче данных состояние линии SDA
может изменяться только при низком уровне SCL
, биты данных считаются действительными во время высокого уровня SCL Ведущее устройство может начать очередную передачу вслед за текущей, не вводя условие Sr
). В протоколе условия S
и Sr
почти равнозначны. Каждая посылка данных состоит из 8 бит данных, формируемых передатчиком (старший бит — MSB — передается первым), после чего передатчик на один такт освобождает линию данных для получения подтверждения. Приемник во время девятого такта формирует бит подтверждения Ack
, по которому передатчик убеждается, что его «услышали». После передачи бита подтверждения ведомое устройство может задержать следующую посылку, удерживая линию SCL
на низком уровне. Ведомое устройство в режимах SCL
на низком уровне после его спада, сформированного передатчиком. Поэтому ведущее устройство должно генерировать сигнал SCL
не «вслепую», а анализируя состояние линии SCL
: сняв этот сигнал, новый импульс (открытие ключа передатчика) оно имеет право вводить, лишь убедившись, что сигнал SCL
вернулся в пассивное состояние (высокий уровень). В противном случае синхронизация будет потеряна. Сигнал SCL
может быть растянут и другим устройством, пытающимся захватить шину в это же время. Тактовый сигнал SCL
не обязательно будет равномерным: время его нахождения на низком уровне будет определяться максимальным временем, в котором его захочет удержать самое медленное из устройств, участвующих в данном обмене (даже и конфликтующих); время нахождение на высоком уровне будет определяться самым быстрым из конфликтующих ведущих устройств.SCL
и SDA
и наблюдают за ними. Если устройство, передающее единицу (высокий уровень), в данном такте на линии SDA
видит ноль (низкий уровень), оно должно признать свой проигрыш в конфликте и освободить линии SCL
и SDA
(при этом ему позволительно управлять линией SCL
до конца передачи текущего байта). Выигравшее устройство даже и не заметит проигравших конкурентов и продолжит работу. Арбитраж может закончиться в любом месте посылки, формируемой ведущим устройством. Искажения информации, передаваемой выигравшим устройством, не происходит (приятное отличие от коллизий в сетях Ethernet). Если ведущее устройство, проигравшее в конфликте, имеет и функции ведомого устройства, по признанию проигрыша оно должно перейти в режим ведомого, поскольку конфликт мог быть вызван и попыткой обращения к нему победившего ведущего устройства.ACK
, вводящийся в конце каждого байта устройством- приемником, выполняет несколько функций. Когда ACK
, свидетельствующий о нормальном получении очередного байта. Единичный бит ACK
(нет подтверждения) в ответ на посылку адреса свидетельствует об отсутствии адресованного ведомого устройства на шине или его занятости внутренними процессами. Отсутствие подтверждения байта данных свидетельствует о занятости устройства. Не получив бита подтверждения, ведущее устройство должно сформировать условие ACK
после каждого принятого байта, кроме последнего. Единичный бит ACK
в этом случае является указанием ведомому устройству на окончание передачи — оно теперь должно освободить линии SDA
и SCL
, чтобы ведущее устройство смогло сформировать условие P
или Sr
.