На склад поступили жидко-кристаллические индикаторы и дисплеи от KSE
РадиоЛоцман - Все об электронике

Разделение и арбитраж двунаправленной последовательной шины

Журнал РАДИОЛОЦМАН, апрель 2016

Jeff Anderson

EDN

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Введение в двунаправленные шины

Двунаправленные шины, такие, например, как 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 к порту ввода/вывода.

Заключение

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

Двухсторонний арбитраж – это метод арбитража, применимый к большинству приложений с разделенной шиной. Опираясь на специфику обмена по двунаправленной шине, он не требует внешних компонентов и достаточно универсален, чтобы, не внося ненужных усложнений, использоваться во многих приложениях.

Ссылки

Перевод: AlexAAN по заказу РадиоЛоцман

На английском языке: Splitting and arbitration a bidirectional serial bus

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • Схемы на первых двух рисунках в этом виде работать не будут. Они зависнут при подаче лог."0". Когда-то была такая задача. Была решена немного другой схемотехникой.
  • Вы прочли невнимательно, об этом написано в 6-м абзаце. Статья как раз о том, чтобы использовать дополнительную логику ИЛИ в качестве арбитра на линии. Пояснения на рисунке 5 и ниже. Какой именно, поделитесь опытом. Аналогично, с поднятым в статье вопросом столкнулся при желании изолировать цепочку DS18B20. В направлении 1-Wire действительно много наработок, вот первая ссылка [url]http://radiokot.ru/articles/58/[/url]. Вариантов масса, но всегда не последним фактором при выборе схемотехники оказывается стоимость. В свете этого данная статья вполне уместна. Я же поступил немного иначе. Мне нужно было опрашивать 5 датчиков. Не долго думая, поставил "1-Wire сопроцессор". Т.е. не специализированную микросхему по типу "1-Wire Master" как DS2482 производства Maxim, а просто ещё один менее мощный микроконтроллер на плате. С основным контроллером связал его опторазвязанным UART. Из плюсов: пара оптронов и рядовой МК стоят копейки; основной МК избавился от лишнего груза (код + время на опрос датчиков). Из минусов такого решения: необходимость писать отдельную прошивку для второго контроллера, но это ни так уж сложно, если есть библиотека под DS18B20; в моём случае в основном МК был задействоаван один канал UART из 3х, так что выделение ещё одного канала под обмен с датчиками ничего не потеснило.
  • Если мне не изменяет память, то использовалось временное мультиплексирование обоих "сторон" линии. Скорее всего, это было связано с тем, что нам надо было в 4 линии передавать 8 в условиях помех. На дискретных элементах не очень интересно, но потом схема была закинута в альтеру. Задача у нас стояла - вынести клаву и мышь от двух компов на метров 30 сквозь источники помех. Так что, возможно, полученное нами решение не является универсальным. Там были ограничения на максимальную частоту транслируемого сигнала. Не так всё просто с этим арбитражем, как оказалось на практике, если нет заранее разделённых линий приёма и передачи.