Теперь поговорим об арбитраже. Согласно спецификации режима multi-master, передатчик может начинать передачу данных только после того, как убедится, что шина свободна (линии SDA и SCL имеют высокий уровень). Но несколько передатчиков могут сгенерировать состояние Start практически одновременно, поэтому нужно определить, какое устройство первым выставило Start-условие. Как это возможно выполнить с помощью достаточно скудных (с точки зрения возможностей серьезных шин, конечно!) средств I2C? Дело в том, что линия SDA выполнена также по способу «монтажное И». В течение процедуры передачи все master-абоненты проверяют состояние линии SDA. Если обнаружено несоответствие (выставляется высокий уровень, а при проверке читается низкий), передатчик, выставляющий высокий уровень, отключается. Естественно, что в процессе передачи бита осуществляется синхронизация.
Как показывает практика, процедура арбитража наиболее трудна для понимания. Поэтому, чтобы досконально разобраться, приведем наглядную аналогию. Представьте себе шеренгу людей, синхронно поднимающих руки по команде ведущего. Если рука поднята, это свидетельствует о передаче единицы, если опущена — нуля. Допустим, в первом такте все подняли руки, а во втором — двое руки не подняли. Согласно принципу арбитража, из шеренги выбывают все, кроме этих двоих. Далее они, подчиняясь командам ведущего, будут поднимать или опускать руки, пока в каком-либо такте не окажется, что один руку поднял, а другой — опустил. Так вот, «поднявший руку от руки и погибнет» — перефразируем известное выражение. Он выбывает, а передачу до окончания продолжит оставшийся — в единственном числе. Рис. 1.27 отражает процедуру арбитража для двух master-абонентов.
Литература:
Б. Ю. Семенов, «ШИНА 12С В РАДИОТЕХНИЧЕСКИХ КОНСТРУКЦИЯХ» ,Москва СОЛОН-Р 2002
0 коммент.:
Отправить комментарий