Подтверждение приема (квитирование)

Передача данных с подтверждением обязательна. Тактовый импульс, связанный с подтверждением, генерируется ведущим. Передатчик освобождает SDA-линию (переводит в состояние «1») во время тактового импульса подтверждения.

Приемник должен понизить потенциал SDA-линии на время тактового импульса подтверждения, так что она остается постоянно в положении «0» в течение периода высокого уровня тактового импульса подтверждения (рис.3.6).

Подтверждение приема (квитирование) - student2.ru

Рисунок 3.6 - Подтверждение приема на I2C шине

Обычно приемник, который был адресован, обязан генерировать подтверждение приема после каждого полученного байта. Отсутствие подтверждения может приводить к разным ситуациям. Рассмотрим два случая: ведомый приемник и ведущий приемник.

Если ведомый приемник не подтверждает прием на свой адрес, (например, он не может принимать, т.к. выполняет некоторые функции реального времени), то выходной каскад приемника выдает высокий уровень. В результате вся линия данных переводится в состояние «1». Ведущий передатчик теперь может выдать STOP-условие для обрыва передачи. Если ведомый приемник подтверждает прием на свой адрес, но через некоторое время при передаче не может больше получать байты данных, ведущий опять прекращает передачу. Это выражается тем, что приемник не генерирует подтверждения приема в первом следующем байте. Ведомый оставляет линию данных в состоянии «1» и ведущий генерирует STOP-условие.

Если ведущий приемник включен в передачу, он должен сообщать об окончании данных ведомому передатчику посредством невыдачи подтверждения в последнем байте, которым отмечается окончание работы ведомого. Ведомый передатчик должен освободить линию данных, чтобы позволить ведущему выдать STOP-условие.

Все эти процедуры призваны защитить шину от возможной потери данных. При таком порядке передатчик всегда точно знает, сколько байтов уже передано и может в любой момент продолжить передачу с нужного байта.

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

Все ведущие генерируют свои собственные тактовые сигналы для SCL-линии при пересылке информации по I2C-шине. Данные являются достоверными только в течение высокого уровня периода тактовой частоты. Для процедуры побитного арбитража необходим устойчивый тактовый сигнал.

Для тактовой синхронизации используется «монтажное И» - соединение I2C интерфейсов с SCL-линией. Оно необходимо для того, чтобы переход «1 → 0» на линии SCL заставил рассматриваемые приборы начать отсчет отключения своих нулевых состояний. Переход в «0» одного из выходов тактовой частоты удержит SCL линию в этом состоянии, пока не будет достигнуто состояние «1» (рис.3.7).

Подтверждение приема (квитирование) - student2.ru

Рисунок 3.7 - Тактовая синхронизация в процедуре арбитража

Однако переход «0→1» у одного прибора не изменит состояния SCL-линии, если выходы других приборов все еще находятся в состоянии «0». Поэтому SCL-линия будет удерживаться в нулевом состоянии устройством с наиболее продолжительным нулем. Устройства с более короткими нулями войдут в состояние ожидания («1») в течение этого времени.

Когда все упомянутые устройства выйдут из своего нулевого состояния, линия синхронизации освободится и перейдет в состояние «1». С этого момента все устройства начнут отсчет длительности своего единичного уровня. Первое устройство, которое завершит свой единичный уровень, снова приведет SCL-линию в состояние «0». Таким образом, на линии тактовой синхронизации длительность генерируемого низкого уровня определяется устройством с наиболее длинным «нулем», а длительность высокого уровня - устройством с наиболее короткой «единицей».

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

На байтовом уровне устройство может получать байты данных в быстром темпе, но требовать больше времени для запоминания полученного байта или подготовки другого байта для передачи. Приемник в этом случае удерживает SCL-линию в состоянии «0» после приема байта и подтверждения его приема, чтобы заставить передатчик войти в состояние ожидания до тех пор, пока приемник не будет готов к приему следующего байта по типу процедуры подтверждения связи.

На битовом уровне прибор может замедлить тактовую частоту шины удлинением каждой нулевой части периода. Таким образом, скорость любого передатчика адаптируется к рабочему темпу приемного устройства.

Арбитраж

Ведущий может начать передачу, только если шина свободна. Несмотря на то, что два или более ведущих могут генерировать START-условие на протяжении минимального периода времени, такое совпадение вполне возможно. В такой ситуации используется процедура арбитража, призванная разрешить возникший конфликт без потери информации.

Арбитраж осуществляется на SDA-линии, пока SCL линия находится в состоянии «1». Ведущий, который передает высокий уровень на линии данных, в то время как другие ведущие передают низкий уровень, будет выключать свой выходной каскад данных (DATA), т.к. уровень на шине не соответствует его собственному уровню.

Арбитраж может продолжаться для многих бит. Его первая стадия - это сравнение адресных бит. Если ведущие пытаются адресовать одно и то же устройство, арбитраж продолжается сравнением данных. Поскольку для арбитража используются и адрес, и данные, то никакая информация не теряется при этой процедуре.

Ведущий, который выбыл в результате арбитража, может генерировать тактовые импульсы до конца байта, в котором он выбыл. Если ведущий, также принимающий на себя и некоторую подчиненную функцию, выбывает из арбитража, то, возможно, что победивший ведущий попытается адресовать его. Следовательно, выбывший ведущий должен немедленно переключиться в режим ведомого приемника.

Рисунок 3.8 представляет процедуру арбитража для двух ведущих. Конечно, можно рассмотреть и больше (в зависимости от того, сколько ведущих подсоединено к шине). В момент высокого уровня на линии SCL, когда фиксируется разница между внутренним уровнем данных ведущего прибора 1, генерирующего данные DATA, и действительным уровнем на SDA-линии, выключается вывод данных этого устройства. Это не влияет на передачу данных, осуществляемую победившим ведущим.

Поскольку управление I2C-шиной определяется однозначно для адресов и данных, посылаемых соревнующимися ведущими, то не существует ни центрального ведущего, ни какого-либо порядка приоритета на шине. Этим также гарантируется сохранность данных на шине при арбитраже.

Подтверждение приема (квитирование) - student2.ru

Рисунок 3.8 - Процедура арбитража между двумя ведущими

Особое внимание нужно обратить на случай, когда по шине передается повторное START- или STOP-условие в процессе последовательной передачи, в момент, когда процедура арбитража все еще осуществляется. Если все же такая ситуация произошла, то рассматриваемые ведущие должны послать это повторное START- или STOP-условие в той же позиции в рамках формата. Таким образом, арбитраж не допускается между битом данных и START или STOP-условиями и между самими START и/или STOP-условиями.

Формат 7-и битной адресации

Передача данных осуществляется по формату, показанному на рис. 3.9.

Подтверждение приема (квитирование) - student2.ru

Рисунок 3.9 - Завершенная передача данных

После START-условия (S) посылается адрес ведомого. Этот адрес имеет длину 7 бит, за ним следует восьмой бит, который является битом направления данных (R/W - чтение/запись). «Нуль» означает передачу (WRITE), «единица» - это запрос данных (READ). Передача данных всегда обрывается STOP-условием (Р), генерируемым ведущим. Однако, если ведущий еще желает продолжать обмен информацией на шине, он может выдать повторное START-условие (Sr) и адресовать другого ведомого без предварительного генерирования STOP-условия. При такой передаче возможны различные комбинации форматов чтения и записи.

Перечислим возможные форматы передачи данных.

1. Ведущий передатчик передает ведомому приемнику. После передачи адреса направление передачи данных не меняется (рис. 3.10). Завершение передачи может инициировать ведомый приемник невыдачей подтверждения или ведущий передатчик выдачей STOP-условия.

Подтверждение приема (квитирование) - student2.ru

Рисунок 3.10 - Ведущий передатчик передает на ведомый приемник

2. Ведущий приемник принимает данные от ведомого передатчика сразу после байта адреса (рис. 3.11). После передачи адреса изменяется направление передачи данных. В момент первого подтверждения приема ведущий передатчик становится ведущим приемником, а ведомый приемник становится ведомым передатчиком. Подтверждение этого приема все еще генерируется ведомым. В завершении цикла ведущий приемник не выдает подтверждения ведомому передатчику. После этого ведущий генерирует STOP условие.

Подтверждение приема (квитирование) - student2.ru

Рисунок 3.11 - Ведущий приемник принимает от ведомого передатчика

3. Комбинированный формат (рис. 3.12). Для примера рассмотрен случай приема данных и последующей передачи. Для изменения направления в передаче повторяются и START-условие, и адрес ведомого, но R/W бит заменяется на противоположный. Аналогично, с выдачей повторного START-условия, можно действовать для изменения адреса ведомого.

Подтверждение приема (квитирование) - student2.ru

Рисунок 3.12 - Комбинированный формат

Наши рекомендации