Аппаратная реализация I2C. Часть 4 Протокол I2C – арбитраж

Теперь поговорим об арбитраже. Согласно спецификации режи­ма multi-master, передатчик может начинать передачу данных только после того, как убедится, что шина свободна (линии SDA и SCL име­ют высокий уровень). Но несколько передатчиков могут сгенериро­вать состояние Start практически одновременно, поэтому нужно оп­ределить, какое устройство первым выставило Start-условие. Как это возможно выполнить с помощью достаточно скудных (с точки зре­ния возможностей серьезных шин, конечно!) средств I2C? Дело в том, что линия SDA выполнена также по способу «монтажное И». В течение процедуры передачи все master-абоненты проверяют со­стояние линии SDA. Если обнаружено несоответствие (выставляется высокий уровень, а при проверке читается низкий), передатчик, вы­ставляющий высокий уровень, отключается. Естественно, что в про­цессе передачи бита осуществляется синхронизация.

clip_image002

Как показывает практика, процедура арбитража наиболее трудна для понимания. Поэтому, чтобы досконально разобраться, приведем наглядную аналогию. Представьте себе шеренгу людей, синхронно поднимающих руки по команде ведущего. Если рука поднята, это свидетельствует о передаче единицы, если опущена — нуля. Допус­тим, в первом такте все подняли руки, а во втором — двое руки не подняли. Согласно принципу арбитража, из шеренги выбывают все, кроме этих двоих. Далее они, подчиняясь командам ведущего, будут поднимать или опускать руки, пока в каком-либо такте не окажется, что один руку поднял, а другой — опустил. Так вот, «поднявший ру­ку от руки и погибнет» — перефразируем известное выражение. Он выбывает, а передачу до окончания продолжит оставшийся — в единственном числе. Рис. 1.27 отражает процедуру арбитража для двух master-абонентов.

clip_image002[4]

Литература:


Б. Ю. Семенов, «ШИНА 12С В РАДИОТЕХНИЧЕСКИХ КОНСТРУКЦИЯХ» ,Москва СОЛОН-Р 2002

Предлагаю ознакомиться с аналогичными статьями: