Хабрахабр

Радиолюбительские измерения: анализ сигналов шины I2C

Приходится довольствоваться тем, что есть. Как я уже неоднократно упоминал в своих публикациях, любительские проекты финансируются из семейного бюджета, и радиолюбитель, обычно, не может себе позволить покупку дорогостоящего измерительного оборудования. А иногда от безысходности радиолюбителю приходится «сверлить пилой и пилить буравчиком». Или тем, что удаётся взять попользоваться «на время».

Это был тот счастливый момент, когда можно было себе позволить «пилить пилой».
Как происходит обмен данными между устройствами по протоколу I2C можно узнать здесь. Недавно я испытал потребность выяснить, что на самом деле передаётся в разрабатываемом мной устройстве по шине I2C. Для анализа сигналов на шине I2C можно применить, как цифровой двухканальный осциллограф с памятью, так и логический анализатор.

При работе с радиоэлектронной аппаратурой осциллограф является наиболее универсальным инструментом. Современные цифровые осциллографы обладают рядом полезных свойств, позволяющих производить, в том числе, и анализ сигналов шины I2C.

У этого прибора есть два канала измерения с полосой пропускания до 100 MHz и частотой выборки сигнала 1 GSa/s. В данном случае мне достался «на время» цифровой двухканальный осциллограф с памятью Rigol DS1102 (цена на сайте производителя $461).

К сигналу SDA был подключен CH2. К сигналу SCL был подключен CH1. 00 V/дел. Для обоих каналов был установлен масштаб 1. Для наглядности луч первого канала смещён в верхнюю половину экрана, а луч второго канала – в нижнюю. Масштаб развёртки – 10 us/дел.

00 V: В меню Trigger осциллограф был настроен на однократное измерение с запуском по достижению передним фронтом в канале CH1 уровня 1.

Осциллограф встал в режим ожидания, затем запустился. После включения тестируемого оборудования была нажата большая красная кнопка Run/Stop. Через несколько секунд запись была остановлена вручную.

Полученная осциллограмма записывалась на внешний носитель поэкранно:

На первом экране мы видим отображение настроек прибора и осциллограмму сигналов SCL (верхняя часть) и SDA (нижняя часть экрана), на которой читаем слева направо: Произведём разбор записанных сигналов.

  • сигнал START: ведущее устройство выставляет низкий уровень сначала на шине SDA, а затем на шине SCL;
  • 7-bit адрес: читаем 0x60 (1100000) на шине SDA по передним фронтам SCL;
  • признак режима записи: читаем на шине SDA низкий уровень по следующему переднему фронту SCL;
  • сигнал ACK: ведущее устройство после передачи байта переключается на приём по шине SDA, на SDA устанавливается высокий уровень, ведомое устройство по заднему фронту SCL выставляет на SDA низкий уровень (собственно, сигнал ACK), который ведущее устройство считывает по переднему фронту SCL;
  • сигнал STOP: ведущее устройство выставляет высокий уровень сначала на шине SCL, а затем на шине SDA

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

В качестве программного обеспечения использовалась демо-версия Saleae Logic 1. Для использования в качестве логического анализатора мне был любезно предоставлен коллегами Saleae Logic 8 (цена на сайте производителя $399). 18, взятая с официального сайта. 2. Устанавливая данное программное обеспечение, я принял лицензионное соглашение с условием, в том числе, не использовать данное программное обеспечение с оборудованием сторонних производителей.

Для сигнала SCL был назначен канал CH0, а для сигнала SDA – канал CH1. В программе был включен анализатор протокола I2C. Частота выборки сигнала 24 MSa/s.

Для отображения данных был выбран шестнадцатеричный формат. Запуск был настроен по «переднему» фронту CH0.

После включения тестируемого оборудования была нажата большая зелёная кнопка Start, и через несколько секунд на экран вывелась диаграмма:

Результаты дешифровки заносятся построчно в окно Decoded Protocols. Максимум пользы в применении логического анализатора я вижу в том, что программа сама дешифрует полученные данные. При выборе в окне строки данных, программа показывает расположение этих данных на диаграмме.

Для сравнения вариантов я «склеил» в графическом редакторе четыре снимка экрана осциллографа и фрагмент диаграммы логического анализатора:

На диаграмме сначала происходит проверка наличия на шине устройства с адресом 0x60, а затем производится запись в регистр 0xB7 этого устройства значения 0x80. Start обозначен зеленым кружочком, Stop – красным кружочком.

В остальном картина совпадает, а логическим анализатором ещё и производится правильная дешифрация данных в автоматическом режиме. Если подходить к сравнению вариантов «с пристрастием», то можно заметить, что на диаграмме логического анализатора (частота выборки 24 MSa/s) присутствует «джиттер» сигнала SCL, которого нет, как такового, на осциллограмме с частотой выборки 1 GSa/s.

В этих условиях лично я, как инженер «старой закалки», приобрёл бы цифровой осциллограф. При выборе «или-или» в «сухом остатке» имеем, в случае осциллографа, дорогое универсальное устройство, не такое удобное для анализа шины, как логический анализатор, но за сопоставимые с ним деньги.

Однако, если бы существовало программное обеспечение с лицензионным соглашением, позволяющим использование недорогих клонов популярных логических анализаторов, типа Saleae Logic 8 или DSLogic Plus…

Недорогие клоны популярных логических анализаторов, и не только их, поддерживает программное обеспечение open source проекта sigrok.

Было собрано рабочее место:

На Windows 10 запустилась только 32-разрядная версия PulseView. После чего начались «танцы с бубном». Наличие в системе недорогого китайского клона Saleae Logic (цена на сайте продавца $7) она не определила.

После этого, в Zadig для устройства Logic были установлены драйверы WinUSB, и после повторного сканирования оно определилось в Zadig, как устройство fx2latw:

Устройство было подключено. После этого для устройства fx2latw в Zadig снова были установлены драйверы WinUSB, и только после этого PulseView увидела в списке устройство «Saleae Logic».

После подключения устройства были произведены следующие настройки программы (слева направо по панели инструментов, начиная с надписи «Saleae Logic»):

  • выставлено Pre-trigger capture ratio = 2% по нажатию кнопки с ключом и отвёрткой;
  • отключены лишние входы по нажатию кнопки с красным щупом;
  • выставлен объем записи 100 К выборок;
  • выставлена частота выборки 24 MHz;
  • включен анализатор протокола I2C по нажатию кнопки с жёлто-зелёным значком.

Далее в панели слева от каналов:

  • каналам присвоены соответствующие сигналам текстовые метки;
  • условием запуска назначен задний фронт сигнала SDA;
  • сигналам I2C назначены соответствующие каналы.

После включения тестируемого оборудования была нажата кнопка Run. Получен уже знакомый результат:

Похоже, «танцы с бубном» того стоили!

UPD: После ручной установки в Диспетчере устройств для устройства USB Logic драйвера libusb-win32 программа PulseView начала стабильно определять наличие в системе «Saleae Logic» без манипуляций с Zadig.

Краткие выводы:

В статье была описана методика проведения анализа сигналов шины I2C с помощью цифрового осциллографа с памятью и логических анализаторов с пакетами прикладного программного обеспечения.

Универсальным методом анализа сигналов, но недешёвым и небыстрым, является применение цифрового осциллографа с памятью.

Быстрым и бюджетным методом анализа сигналов, но с нетривиальной задачей подключения оборудования, является применение недорогого клона логического анализатора в связке с PulseView.

Буду рад, если своей публикацией помог сэкономить читателям время и деньги.

Но это уже другая история… В следующей публикации расскажу, как измерял частоту, на которой запустился кварцевый резонатор в синтезаторе частоты, без частотомера.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»