Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИПУ ответы.docx
Скачиваний:
98
Добавлен:
20.04.2019
Размер:
5.23 Mб
Скачать

3.10.3.6 Синхронизация

При передаче посылок по шине I²C каждый ведущий генерирует свой синхросигнал на линии SCL. Данные действительны только во время ВЫСОКОГО состояния синхроимпульса [13, 81].

Синхронизация выполняется с использованием подключения к линии SCL по правилу монтажного И. Это означает, что ведущий не имеет монопольного права на управление переходом линии SCL из НИЗКОГО состояния в ВЫСОКОЕ. В том случае, когда ведомому необходимо дополнительное время на обработку принятого бита, он имеет возможность удерживать линию SCL в НИЗКОМ состоянии до момента готовности к приему следующего бита. Таким образом, линия SCL будет находиться в НИЗКОМ состоянии на протяжении самого длинного НИЗКОГО периода синхросигналов.

Устройства с более коротким НИЗКИМ периодом будут входить в состояние ожидания на время, пока не кончится длинный период. Когда у всех задействованных устройств кончится НИЗКИЙ период синхросигнала, линия SCL перейдет в ВЫСОКОЕ состояние. Все устройства начнут проходить ВЫСОКИЙ период своих синхросигналов. Первое устройство, у которого кончится этот период, снова установит линию SCL в НИЗКОЕ состояние. Таким образом, НИЗКИЙ период синхролинии SCL определяется наидлиннейшим периодом синхронизации из всех задействованных устройств, а ВЫСОКИЙ период определяется самым коротким периодом синхронизации устройств.

Механизм синхронизации может быть использован приемниками как средство управления пересылкой данных на байтовом и битовом уровнях.

На уровне байта, если устройство может принимать байты данных с большой скоростью, но требует определенного времени для сохранения принятого байта или подготовки к приему следующего, то оно может удерживать линию SCL в НИЗКОМ состоянии после приема и подтверждения байта, переводя таким образом передатчик в состояние ожидания.

На уровне битов устройство, такое как микроконтроллер без встроенных аппаратных цепей I²C или с ограниченными цепями, может замедлить частоту синхроимпульсов путем продления их НИЗКОГО периода. Таким образом скорость передачи любого ведущего адаптируется к скорости медленного устройства.

189

3.10.3.7 Форматы обмена данными по шине i2c (7-битный адрес)

После сигнала СТАРТ посылается адрес ведомого. После 7 бит адреса следует бит направления данных (R/W), «0» означает передачу (запись), а «1» – прием (чтение). Пересылка данных всегда заканчивается сигналом СТОП, генерируемым ведущим [13, 46, 81]. Однако, если ведущий желает оставаться на шине дальше, он должен выдать повторный сигнал СТАРТ и затем адрес следующего устройства. При таком формате посылки возможны различные комбинации чтения/записи.

Рис. 111. Первый байт после СТАРТ-состояния дресный байт).

Возможные форматы:

1. Ведущий-передатчик передает данные ведомому-приѐмнику.

Направление пересылки данных не изменяется (запись W = 0) [1346].

Рис. 112. Запись данных.

2. Ведущий читает ведомого немедленно после пересылки первого байта.

В момент первого подтверждения ведущий-передатчик становится ведущим-приѐмником, и ведомый-приѐмник становится ведомым- передатчиком. Подтверждение тем не менее генерируется ведущим. Сигнал СТОП генерируется ведущим. В таком формате посылки есть тонкость: при приеме последнего байта надо дать ведомому понять, что больше ведущий читать не будет и отослать NACK на последнем байте. Если же отослать ACK, то после СТОП-сигнала ведущий не отпустит линию (объясняется работой автомата в контроллере I2C). Так что прием двух байтов будет выглядеть так (чтение R = 1):

190

Рис. 113. Чтение данных.

3. Комбинированный формат. При изменении направления пересылки данных повторяется сигнал СТАРТ и адрес ведомого, но бит направления данных инвертируется. Если ведущий-приѐмник посылает повторный сигнал СТАРТ, он обязан предварительно послать сигнал неподтверждения [13, 46, 81].

Рис. 114. Чтение данных с указанного адреса.

Такой формат пересылки используется, например, когда необходимо прочитать данные из памяти (EEPROM), часов реального времени и др. по определенному адресу. Таким образом, сначала в ведомое устройство записывается адрес чтения данных (на рисунке выше это адрес ячейки 0x05), т.е. выполняется инициализация счетчика адреса ведомого устройства; затем

191

делается повторный старт (RS), после чего читаются данные по заданному ранее адресу.