Перейти к содержанию

Декодер протоколов

Логический анализатор записывает только нули и единицы. Превратить их в «запись 0x3C по адресу 0x68» — работа программного декодера протоколов, и половина ошибок при отладке шин — ошибки его настройки.

Обновлено Редакция GAW

Декодер протоколов (protocol decoder, у Saleae — protocol analyzer) — программа, которая разбирает запись логического анализатора — последовательность перепадов на каналах — в кадры конкретного интерфейса: байты UART, адреса и данные I2C, транзакции SPI, кадры CAN. Результат накладывается поверх диаграммы и выводится таблицей, по которой можно искать и фильтровать.

Что умеют

У Saleae Logic 2 — 24 встроенных анализатора протоколов, поиск и фильтр по результатам и API для собственных декодеров (Saleae, Logic 8 Data Sheet). В открытом пакете sigrok то же делает программа PulseView с библиотекой декодеров libsigrokdecode; она работает и с недорогими анализаторами на FX2 через драйвер fx2lafw. В PulseView декодеры можно наслаивать: поверх декодера I2C — декодер конкретного датчика, который превращает запись в регистр в понятное название.

Настройка

Декодер ничего не знает о шине, пока его не настроили, и ошибка настройки выглядит как «мусор» в байтах, а не как сообщение об ошибке:

  • UART — скорость, число бит данных, чётность, число стоп-битов, полярность (инверсия у RS-232 после преобразователя);
  • SPI — режим (полярность и фаза такта), порядок бит, назначение каналов MOSI, MISO, SCK и CS, активный уровень CS;
  • I2C — какие каналы SDA и SCL; декодер показывает адрес 7-битным или 8-битным с битом чтения — это частый источник путаницы при сравнении с даташитом;
  • CAN — скорость передачи и канал, к которому подключён выход приёмопередатчика (RX), а не сама дифференциальная пара.

Частота выборки

Выборка у анализатора асинхронная: всё, что произошло между выборками, теряется, а положение фронта известно с точностью до периода выборки (Saleae, What is Asynchronous Sampling?). Поэтому Saleae советует выбирать цифровые сигналы не меньше чем в 4 раза чаще их высшей частоты (Logic 8 Data Sheet). Для SPI 10 МГц это 40 Мвыб/с. Анализатор на FX2 с 24 МГц на 8 каналах (драйвер fx2lafw) даёт на таком сигнале 2,4 выборки на период — декодер начнёт ошибаться. Медленные фронты I2C с открытым стоком проходят зону между порогами долго, и Saleae советует включать программный фильтр глитчей.

Чего декодер не покажет

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

Частые вопросы

Почему декодер показывает «мусор» вместо данных?

Чаще всего из-за настроек, а не схемы. Для UART проверьте скорость, число бит, чётность и полярность; для SPI — режим (полярность и фаза такта), порядок бит и то, какой канал назначен MOSI, MISO, SCK и CS; для I2C — что SDA и SCL не перепутаны. Вторая причина — слишком низкая частота выборки: меньше четырёх выборок на период, и фронты прыгают.

Какая частота выборки нужна для декодирования SPI?

Saleae советует выбирать цифровые сигналы не меньше чем в 4 раза чаще их высшей частоты. Для SPI на 10 МГц это 40 Мвыб/с и больше. Анализатор на FX2 с 24 МГц даёт всего 2,4 выборки на период такта 10 МГц — фронты будут смещены, и декодер ошибётся.

Можно ли написать свой декодер?

Да. Saleae Logic 2 даёт API для собственных декодеров, а в открытом пакете sigrok декодеры пишут на Python для библиотеки libsigrokdecode, которую использует PulseView. Свой декодер нужен для нестандартных протоколов — например, шины конкретного датчика поверх SPI.

Источники

  1. Saleae. Logic 8, Technical Data Sheet (DOC_620-00011, V20260521) — 24 встроенных анализатора протоколов, API для собственных декодеров, фильтр и поиск по результатам декодирования; цифровую выборку брать не менее чем в 4 раза чаще высшей частоты сигнала; длина записи ограничена памятью ПК и плотностью сигнала
  2. Saleae Support. Supported Voltages; What Is the Maximum Bandwidth of Logic?; What is Asynchronous Sampling? — выборка асинхронная — всё, что происходит между выборками, теряется; цифровые каналы — выборка не меньше 4 × полосы сигнала; у Logic 8 пороги 0,6/1,2 В, для медленных фронтов I2C включать программный фильтр глитчей
  3. sigrok project. libsigrok, драйвер fx2lafw: src/hardware/fx2lafw/api.c и protocol.h (GPL-3.0) — анализаторы на FX2: 24 МГц на 8 каналах и 12 МГц на 16; условия запуска 0, 1, фронт, спад, любой перепад

Нашли ошибку?