Использование осциллографа для отладки цепей в протоколе I2C
Введение
При проектировании и отладке встроенных систем разработчики стремятся обеспечить единый протокол для взаимодействия различных устройств и подсистем, таких как цифро-аналоговые преобразователи (ЦАП), низкоскоростные аналого-цифровые преобразователи АЦП), контроллеры вентиляторов, ЭСППЗУ и программируемые логические матрицы (ПЛМ). Протокол I2C (Inter-Integrated Circuit) принят сегодня в качестве мирового стандарта обмена данными.
В отличие от таких протоколов, как SPI и UART, для которых необходимо несколько цепей, протокол I2C требует подключения только к двум цепям. В этом состоит его очевидное преимущество, поскольку встроенные системы располагают ограниченным числом цепей ввода/вывода и разработчики выделяют каждому устройству минимальное число цепей связи. Если, однако, в системе имеется значительное количество устройств I2C, процесс их отладки может занимать длительное время. Используя современный цифровой осциллограф, разработчик может анализировать параметры протокола I2C и наблюдать физические сигналы, не внося помех в систему.
Общие сведения о протоколе I2C
Для правильного выбора средств отладки протокола I2C следует хорошо понимать принцип его работы. I2C — это последовательный несимметричный протокол, позволяющий разделять схемные ресурсы между несколькими ведущими и несколькими ведомыми устройствами, подключенными к одной и той же шине. Шина I2C содержит две цепи: двунаправленная цепь SDA, служащая для передачи данных, и однонаправленная цепь SCL передачи синхросигналов, используемая для стробирования передачи данных (рис. 1). Обе цепи через резисторы подтянуты к шине питания. Такая двухпроводная структура называется шиной I2C и используется для связи между собой множества ведущих и ведомых устройств. Протокол I2C поддерживает четыре режима передачи данных: стандартный режим на скорости 100 кГц, быстрый режим на скорости 400 кГц, ускоренный режим на скорости 1 МГц и высокоскоростной режим на скорости 3,4 МГц. Протокол I2C использует следующий формат: старт-бит, адресные биты, биты чтения-записи (R/W), байт данных, бит подтверждения (ACK), бит отсутствия подтверждения (NACK) и стоп-бит.
рис. 1. Осциллограмма адресации и сигналы в цепях SDA и SCL
Обмен данными начинается посылкой старт-бита, всегда формируемого ведущим устройством. При этом цепь SDA переходит с «лог. 1» на «лог. 0», а в цепи SCL сохраняется «лог. 1».
Адресация обычно применяется в 7-битном или 10-битном форматах в зависимости от конфигурации системы. 7-битный формат состоит из фиксированного числа битов адреса и битов индивидуального адреса устройства (опция), что в сумме и составляет 7 бит. 10-битный формат адреса состоит из фиксированной команды 11110 и десяти адресных битов, фиксированных или индивидуальных для каждого устройства.
Восьмой бит в адресном байте (в 7-битном формате) определяет режим работы: 1 — для чтения данных, 0 — для их записи. В 10-битном формате адресации режим записи (рис. 2) определяется двумя байтами, а режим чтения — тремя байтами.
рис. 2. Диаграммы адресации записи (верхняя) и чтения (нижняя) для 10‑битного формата адресации шины I2C
После передачи байта данных передатчиком бит подтверждения (ACK) появляется во время девятого тактового импульса в цепи SCL. В это время приемник переводит цепь SDA в «лог. 0», подтверждая прием переданного ему байта. Если приемник по какой-либо причине не перевел линию SDA в «лог. 0», он передает бит отсутствия подтверждения (NACK), в этом случае обмен данными отменяется. В конце операции ведущее устройство посылает стоп-бит и переводит цепь SDA из «лог. 0» в «лог. 1», удерживая при этом «лог. 1» в цепи SCL.
Отладка протокола I2C
Для эффективной отладки систем разработчики должны хорошо понимать сообщения протокола I2C и правильно идентифицировать сообщения, посланные конкретным устройством, распознавать его адрес, анализировать содержимое байтов при обмене данными между устройствами и т. д. На практике для этой цели часто используют недорогой анализатор для захвата трафика на шине I2C. Однако большинство встроенных систем не снабжены специальным разъемом для подключения анализатора I2C к плате, предназначенной для отладки, так что разработчикам приходится следить за всеми сигналами, передающимися по шине I2C, чтобы обнаружить ошибку или сообщения, передаваемые между устройствами.
Проблема иногда усложняется тем, что отлаживаемое устройство поддерживает режим «горячего» подключения, что не позволяет перевести всю систему в режим отладки. В подобных ситуациях очень удобно использовать осциллограф, то есть подключиться к шине I2C и захватить трафик на ней, никак не влияя при этом на систему в целом. Тем не менее для декодирования сообщений, посланных несколькими устройствами, приходится тратить часы, вручную подсчитывая биты. Осциллограф, снабженный средствами синхронизации шины I2C и прикладными функциями декодирования, полностью освобождает от раздражающего ручного подсчета битов, позволяя получить мгновенную осциллограмму шины I2C.
Рассмотрим для примера состояние шины I2C, к которой подключены контроллер Nintendo Wii и система FreeStyleGames DJ Hero (рис. 3). Поскольку контроллер и система обмениваются данными по шине I2C, в некоторый момент времени были произведены несколько посылок между устройствами.
рис. 3. Пример трафика на шине I2C
с несколькими устройствами
Применяя современный цифровой осциллограф, пользователи могут захватывать трафик I2C и с помощью прикладных функций декодирования анализировать сообщения между ведущим и ведомым устройствами. Такая функция осциллографа позволяет весьма эффективно выполнять отладку устройств. Для еще большего удобства пользователей в дополнение к осциллограммам на экран выведена таблица соотношения тайминга и отдельных составляющих длинного пакета передачи по шине I2C.
В таблице под осциллограммой (рис. 3) в колонке Data приведены сообщения, посланные каждому устройству в соответствии с его адресом, приведенным в колонке Address, а также данные в формате, близком к тому, который используется в анализаторах шины РС Таким образом, средства осциллографа для синхронизации шины позволяют пользователям выделять при отладке конкретные устройства, задавая их адреса и выделяя обмен данными между конкретными ведомым и ведущим устройствами.
Заключение
Протокол повсеместно используется для обмена данными между устройствами во встроенных системах, однако его структура, поддерживающая одновременно несколько ведущих и ведомых устройств, имеет ряд проблемных аспектов. Правильный выбор осциллографа, снабженного специализированными средствами синхронизации и набором прикладных программ, обеспечивающих декодирование, ускоренный поиск и средства визуализации, значительно упрощает и ускоряет процесс отладки.