Журнал РАДИОЛОЦМАН, апрель 2016
Jeff Anderson
EDN
Введение в двунаправленные шины
Двунаправленные шины, такие, например, как I2C, SMBus и LIN, получили повсеместное распространение в современной электронике, отчасти благодаря их простоте. С помощью всего двух проводов – для передачи сигналов данных и синхронизации – они позволяют общаться друг с другом множеству устройств. Согласно спецификации шины I2C, к каждой линии данных и синхронизации допускается подключение до 128 устройств, что обеспечивается внешними подтягивающими резисторами и драйверами с открытыми стоками в каждом устройстве. Если не одно из устройств не передает «0», подтягивающий резистор удерживает шину в состоянии «1». Однако любое устройство может опустить шину в «0».
Ведущие устройства (задатчики) могут управлять шиной в любой момент, а ведомые должны ответить на запросы ведущего в течение определенного периода времени после приема запроса. В конфигурации с несколькими ведущими каждое устройство, выступающее задатчиком, само должно выполнять арбитраж шины. Задатчик, желающий получить контроль над шиной, должен проверить ее, выставив на шину «0». Это информирует остальных ведущих о том, что шина будет занята.
Зачем разделять двунаправленную шину?
Спецификация шины I2C [1] содержит пример эталонной схемы, позволяющей разделять ее на входную и выходную пары. Такая конфигурация может потребоваться по нескольким причинам. Прежде всего, разделение шины используется для оптической изоляции ведущего устройства от ведомых при повышенных требованиях к безопасности, в случае зашумленности линий передачи или при невозможности обеспечить надежное заземление (Рисунок 1). Кроме того, сигналы разделенной шины можно усиливать (Рисунок 2), а, заменив усилитель схемой преобразователя интерфейсов, можно сменить среду передачи информации. Это позволяет увеличить рабочую длину шины и улучшить ее характеристики за счет снижения емкости. По мере снижения емкости линий доминирующее влияние на постоянную времени шины начинают оказывать подтягивающие резисторы.
![]() |
|
Рисунок 1. | Изоляция двунаправленной шины. |
Для разработчиков контроллеров двунаправленных шин разделение шины может использоваться в целях отладки. Обычно отладка двунаправленных протоколов представляет собой непростую задачу, поскольку вполне вероятна ситуация, при которой работающий неправильно контроллер выставляет на шине «0» в то же время, когда другой контроллер пытается установить контроль над шиной. Это сделает идентификацию передающего устройства на шине невозможной без информации о внутренних состояниях контроллеров всех устройств. Однако контроль линий /gateB1 и /gateA2 (Рисунок 2) позволяет идентифицировать оба передающих устройства и выявлять любые одновременные обращения с использованием лишь стандартного лабораторного оборудования и обычных технологий отладки.
![]() |
|
Рисунок 2. | Повторитель двунаправленной шины. |
Наконец, возможно использование технологии разделения шины для подключения устройства, поддерживающего интерфейс I2C, к другому устройству, не имеющему контроллера I2C. В этом случае разделенная шина может быть подключена к портам вывода/вывода общего назначения другого устройства (Рисунок 3).
![]() |
|
Рисунок 3. | Разделенная шина, подключенная к порту ввода/вывода общего назначения. |
Опубликовано немало схем, позволяющих разделять двунаправленные шины. К сожалению, примеры решений, демонстрирующих разделение шин, требуют разработки специальных схем для каждого приложения (как следует из публикаций) или внешней управляющей логики (как показано в описании стандарта I2C), использующей проходные логические вентили для того, чтобы в процессе обмена не образовывались замкнутые контуры, приводящие к «защелкиванию». Условия для защелкивания, очевидным образом, существуют в схеме на Рисунке 2, где узел IOA, выставив на шине «0», через /gateB1 открывает транзистор Q1, в результате чего потенциал узла IOB опускается в «0», что, в свою очередь, открывает Q2 высоким уровнем на /gateA2, опуская вниз потенциал IOA.
![]() |
|
Рисунок 4. | Схема двухстороннего арбитража. |
Представленный в этой статье двухсторонний арбитр может разделять шину на передающую и приемную пары, и сконструирован универсальным, что позволяет использовать его в любых приложениях с разделенной шиной. Кроме того, он не требует внешней управляющей логики – управление осуществляется исключительно на основании состояния шины данных (Рисунок 4).
Двухсторонний арбитраж
![]() |
|
Рисунок 5. | Двухсторонний арбитраж двунаправленной шины. |
Изображенный на Рисунке 5 арбитр, образованный двумя перекрестными схемами разрешения из Рисунка 4, будет работать всегда, так как двунаправленные шины, по определению, поддерживают только полудуплексный обмен. В неактивном режиме линии данных подтягиваются к шине питания резисторами R1 и R2, вследствие чего выходы OUT1 и OUT2 находятся в состоянии «0». В этих условиях оба N-канальных MOSFET выключены. Когда микросхема IC1 выставляет на линии данных «0», на выходе OUT1 устанавливается уровень «1», открывающий транзистор Q2 и опускающий вниз потенциал шины данных микросхемы IC2. Одновременно сигнал OUT1 поступает на вход вентиля «ИЛИ-НЕ» U2, разрывая петлю обратной связи между OUT2 и Q1. Этот разрыв исключает возможность защелкивания, делая ненужной какую-либо другую управляющую логику, поскольку схема, первой претендующая на линию данных, выигрывает гонку и блокирует остальную схему через вентиль «ИЛИ-НЕ».
![]() |
|
Рисунок 6. | Двухсторонний арбитраж с усилением сигналов шины. |
Универсальный характер схемы позволяет использовать ее для двухстороннего арбитража в любых приложениях с разделенной шиной. На Рисунке 6 приведен пример разделения шины в целях усиления сигналов. Эту схему легко расширить на случаи преобразования среды передачи и изоляции шины, заменив усилители, соответственно, преобразователями интерфейсов или оптоизоляторами. Для отладки шинных контроллеров можно отслеживать состояние линий между усилителями, что поможет идентифицировать неисправности контроллеров шины. На Рисунке 7 показано включение двухстороннего арбитра между шиной I2C и портом ввода/вывода общего назначения.
![]() |
|
Рисунок 7. | Подключение линии интерфейса I2C к порту ввода/вывода. |
Заключение
Есть ряд причин, по которым возникает необходимость разделения двунаправленной шины на приемные и передающие пары. От увеличения пропускной способности и длины линии передачи до возможности отладки – многие разработчики оценят эти преимущества разделения шины и сочтут их полезным в тот или иной момент своей деятельности.
Двухсторонний арбитраж – это метод арбитража, применимый к большинству приложений с разделенной шиной. Опираясь на специфику обмена по двунаправленной шине, он не требует внешних компонентов и достаточно универсален, чтобы, не внося ненужных усложнений, использоваться во многих приложениях.