Синхронизация и арбитраж в I2C.
3.1. Синхронизация.
Все ведущие устройства, передавая данные по шине I2C, генерируют собственные синхроимпульсы на выводе SCL. Данные истинны и воспринимаются только течение полупериода синхросигнала, имеющего высокий уровень (HIGH). Поэтому для выполнения побитовой процедуры арбитража необходим определенный синхросигнал.
Синхронизация синхроимпульсов выполняется благодаря схеме подключения “монтажное И”, используемой для вывода SCL интерфейсов I2C. Это означает, что состояния HIGH и LOW на линии SCL вызываются соответствующими устройствами, запускающими отсчет своих полупериодов LOW, как только устройство переводит свой синхросигнал в состояние LOW, оно захватывает линию SCL и удерживает ее в этом состоянии, пока его синхросигнал не переходит в состояние HIGH (см. рис. 5.6). Однако синхросигнал не может изменить состояние линии SCL LOW на HIGH, если другие синхросигналы все еще находятся в полупериоде LOW своего выходного сигнала. Поэтому линия SCL будет находится в состоянии LOW до тех пор, пока его удерживает в этом состоянии устройством с самым длинным полупериодом LOW. Устройства с более короткими полупериодами LOW за это перейдут в состояние HIGH и будут ожидать завершения этого полупериода.
Когда все ведущие устройства завершают свои полупериоды LOW, линия синхронизации освобождается и переходит в состояние HIGH. Теперь состояние всех выходных сигналов синхроимпульсов совпадает с состоянием линии SCL, все устройства запускают отсчет длительности полупериода HIGH. Первое устройство, завершая свой полупериод синхронизации HIGH, снова переводит линию SCL в состояние LOW.
Рис. 5.6. Синхронизация синхроимпульсов
в процессе выполнения арбитража
Таким образом синхронизированный синхросигнал SCL генерируется с длительностью полупериода LOW, определяемой устройством с самым длинным полупериодом LOW своего синхросигнала, и длительностью полупериода HIGH, определяемой устройством с самым коротким полупериодом HIGH своего синхросигнала.
3.2. Арбитраж.
Ведущее устройство может начать передачу только в случае, если шина свободна. При этом два или более ведущих устройств могут сгенерировать условие START в пределах минимального времени захвата (tHD;STA) условия START, что приводит к возникновению условия START в шине.
Арбитраж выполняется по состоянию линии SDA в то время, когда линия SCL находится в состоянии HIGH, следующим образом: если первое ведущее устройство передает данные уровня HIGH, а второе - данные уровня LOW, сигнал данных (DATA) первого устройства будет потерян, так как уровень в шине будет иметь другое значение. Устройство должно уступить шину.
Арбитраж может продолжать выполняться для нескольких битов. Его первая стадия – сравнение адресных битов. Если все ведущие устройства пытаются адресовать одно и то же устройство, арбитраж продолжается путем сравнения данных. Поскольку и адресная информация, и данные используются для арбитража шины I2C, никакая информация в течение этого процесса потеряна не будет.
Ведущее устройство, которое теряет арбитраж, может генерировать синхроимпульсы до конца байта, в котором оно теряет арбитраж.
Если ведущее устройство также поддерживает и функции ведомого устройства и оно теряет арбитраж на стадии адресации, возможно, что получившее арбитраж ведущее устройство пытается адресовать это устройство как ведомое. Поэтому потерявшее арбитраж ведущее устройство должно немедленно перейти в режим ведомого устройства.
Рис. 5.7 показывает процедуру арбитража между двумя ведущими устройствами. Конечно, в действительности их может быть больше (в зависимости от того, сколько ведущих устройств подключено к шине). В момент, когда обнаруживается различие между внутренним уровнем данных, передаваемых ведущим устройством, генерирующим данные DATA 1, и фактическим уровнем в линии SDA, вывод данных, для которого обнаружено данное различие, немедленно отключается, переходя в состояние HIGH. Это состояние не будет влиять на передачу данных, инициализированную ведущим устройством, получившим арбитраж.
Рис. 5.7. Процедура арбитража двух ведущих устройств
Так как управление шиной I2C реализуется исключительно по адресу и данным, посылаемых конкурирующими ведущими устройствами, не существует ни какого-либо центрального ведущего устройства, ни какого-нибудь порядка очередности доступа к шине.
Особое внимание необходимо обратить на ситуацию, когда в процессе последовательной передачи, процедура арбитража еще не была завершена, а какое-либо из устройств повторно генерирует в шину I2C условие START или генерирует условие STOP. Если это происходит, остальные выполняющие обмен данными в данный момент ведущие устройства должны повторить обнаруженное условие - условие START или условие STOP в той же позиции передаваемого кадра данных. Другими словами, арбитраж недопустим между следующими сигналами:
· повтор условия START и бит данных;
· условие STOP и бит данных;
· повтор условия START и условие STOP.
3.3. Согласование скоростей приема и передачи (рукопожатие).
В дополнение к использованию в течение процедуры арбитража, механизм синхронизации синхроимпульсов может использоваться, чтобы помочь приемнику справиться с быстро передаваемыми данными, выполняя согласование скорости передачи на уровне байтов или на уровне битов.
На байтовом уровне устройство может корректно принимать байты данных на высокой скорости, но нуждается в большем количестве времени для сохранения полученного байта или подготовки другого байта для передачи. Ведомое устройство может приостановить обмен данными, выдав после приема и подтверждения байта уровень LOW на линию SCL и переведя тем самым ведущее устройство в состояние ожидания до тех пор, пока ведомое устройство не будет готово к передаче следующего байта.
На битовом уровне, устройство - не микроконтроллер или устройство, включающее только ограниченный встроенный аппаратный интерфейс I2C, может замедлять частоту импульсов синхронизации шины, расширяя каждый полупериод уровня LOW синхроимпульса. Таким образом быстродействие любого ведущего устройства адаптируется к внутренней скорости работы этого устройства.
Адресация.
4.1. 7-ми битовая адресация.
Процедура адресации шины I2C такова, что первый после условия START байт обычно определяет, какое из ведомых устройств будет выбрано ведущим устройством. Исключение – адрес “циркулярного (общего) запроса”, который может адресовать все устройства. Если используется этот адрес, теоретически все устройства должны реагировать с подтверждениями. Однако реальные устройства могут игнорировать этот адрес. Тогда второй байт адреса циркулярного вызова определяет действие, которое будет принято.
Первые семь битов первого байта содержат адрес ведомого устройства (рис. 5.8). Восьмой бит - LSB (младший значащий бит). Он определяет направление передачи данных. “0” в младшем значащем бите первого байта означает, что ведущее устройство передает данные в ведомое устройство. "1" в этом бите означает, что ведущее устройство будет считывать данные из ведомого устройства.
Рис. 5.8. Первый байт после выполнения условия START.
Когда адрес передан, каждое устройство в системе сравнивает первые семь битов после условия START со своим адресом. Если они совпадают, устройство рассматривает себя как инициализированное для обмена данными ведомое устройство-приемник или ведомое устройство - передатчик в зависимости от состояния бита R/W.
Адрес ведомого устройства может состоять из фиксированной и программируемой частей. Так как существует вероятность наличия в системе несколько идентичных устройств, программируемая часть адреса ведомого устройства обеспечивает доступ к максимально возможному числу таких устройств, которые будут связаны с шиной I2C. Число программируемых адресных битов устройства зависит от числа выводов этого устройства. Например, если устройство имеет 4 фиксированных и 3 программируемых адресных бита, к одной и той же шине можно подключать до 8 идентичных устройств.
Распределение адресов шины I2C координирует комитет по шине I2C (см. табл. 5.2). Две группы по восемь адресов (0000XXX и 1111XXX) зарезервированы для целей, перечисленных в Таблице 2. Комбинация битов 11110XX в адресе ведомого устройства зарезервирована для 10-битной адресации.
Таблица 5.2. Распределение адресов в I2C.
4.1. 10-ти битовая адресация.
10-битовая адресация не изменяет формат в спецификации шины I2C. Использование 10 битов для адресации достигается благодаря зарезервированной комбинации 1111XXX первых семи битов первого байта, следующего после условия START (S). 10-битная адресация не изменяет существующую 7-битную адресацию, а дополняет её. Устройства с 7-битными и 10-битными адресами могут быть подключены к одной шине I2C, и 7-битная, и 10-битная адресация может использоваться как в стандартном режиме (до 100 Кбит/с), так и в быстром режиме (до 400 Кбит/с).
Хотя имеются восемь возможных комбинаций зарезервированных адресных битов 1111XXX, для 10-битной адресации используются только четыре комбинации 11110XX. Оставшиеся четыре комбинации 11111XX зарезервированы для будущего расширения шины I2C.
Адрес ведомого устройства в случае 10-битной адресации формируется из двух первых байтов, следующих после условия START (S).
Первые семь битов первого байта - комбинация 11110XX, в которой последние два бита (XX) являются двумя старшими значащими битами (MSBs) 10-битного адреса, восьмой бит первого байта - бит R/W, который определяет направление передачи данных. Значение ‘0’ в младшем бите первого байта означает, что ведущее устройство записывает данные в выбранное ведомое устройство. Значение `1` в этом бите означает, что ведущее устройство будет считывать данные из ведомого устройства.
Если бит R/W содержит значение ‘0’, второй байт содержит оставшиеся 8 битов (XXXXXXXX) 10- битного адреса. Если бит R/W содержит значение ‘1’, следующий байт содержит данные, передаваемые от ведомого устройства к ведущему устройству.
Технология CAN.
Дата добавления: 2016-04-19; просмотров: 1494;