Как я уже неоднократно упоминал в своих публикациях, любительские проекты финансируются из семейного бюджета, и радиолюбитель, обычно, не может себе позволить покупку дорогостоящего измерительного оборудования. Приходится довольствоваться тем, что есть. Или тем, что удаётся взять попользоваться «на время». А иногда от безысходности радиолюбителю приходится «сверлить пилой и пилить буравчиком».
Недавно я испытал потребность выяснить, что на самом деле передаётся в разрабатываемом мной устройстве по шине I2C. Это был тот счастливый момент, когда можно было себе позволить «пилить пилой».
Как происходит обмен данными между устройствами по протоколу I2C можно узнать здесь. Для анализа сигналов на шине I2C можно применить, как цифровой двухканальный осциллограф с памятью, так и логический анализатор.
Цифровой двухканальный осциллограф с памятью
При работе с радиоэлектронной аппаратурой осциллограф является наиболее универсальным инструментом. Современные цифровые осциллографы обладают рядом полезных свойств, позволяющих производить, в том числе, и анализ сигналов шины I2C.
В данном случае мне достался «на время» цифровой двухканальный осциллограф с памятью Rigol DS1102 (цена на сайте производителя $461). У этого прибора есть два канала измерения с полосой пропускания до 100 MHz и частотой выборки сигнала 1 GSa/s.
К сигналу SCL был подключен CH1. К сигналу SDA был подключен CH2. Для обоих каналов был установлен масштаб 1.00 V/дел. Масштаб развёртки – 10 us/дел. Для наглядности луч первого канала смещён в верхнюю половину экрана, а луч второго канала – в нижнюю.
В меню Trigger осциллограф был настроен на однократное измерение с запуском по достижению передним фронтом в канале CH1 уровня 1.00 V:
После включения тестируемого оборудования была нажата большая красная кнопка 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 8 (цена на сайте производителя $399). В качестве программного обеспечения использовалась демо-версия Saleae Logic 1.2.18, взятая с официального сайта. Устанавливая данное программное обеспечение, я принял лицензионное соглашение с условием, в том числе, не использовать данное программное обеспечение с оборудованием сторонних производителей.
В программе был включен анализатор протокола I2C. Для сигнала SCL был назначен канал CH0, а для сигнала SDA – канал CH1. Частота выборки сигнала 24 MSa/s.
Запуск был настроен по «переднему» фронту CH0. Для отображения данных был выбран шестнадцатеричный формат.
После включения тестируемого оборудования была нажата большая зелёная кнопка Start, и через несколько секунд на экран вывелась диаграмма:
Максимум пользы в применении логического анализатора я вижу в том, что программа сама дешифрует полученные данные. Результаты дешифровки заносятся построчно в окно Decoded Protocols. При выборе в окне строки данных, программа показывает расположение этих данных на диаграмме.
Цифровой осциллограф vs логический анализатор
Для сравнения вариантов я «склеил» в графическом редакторе четыре снимка экрана осциллографа и фрагмент диаграммы логического анализатора:
Start обозначен зеленым кружочком, Stop – красным кружочком. На диаграмме сначала происходит проверка наличия на шине устройства с адресом 0x60, а затем производится запись в регистр 0xB7 этого устройства значения 0x80.
Если подходить к сравнению вариантов «с пристрастием», то можно заметить, что на диаграмме логического анализатора (частота выборки 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.
Буду рад, если своей публикацией помог сэкономить читателям время и деньги.
В следующей публикации расскажу, как измерял частоту, на которой запустился кварцевый резонатор в синтезаторе частоты, без частотомера. Но это уже другая история…
Комментарии (38)
andi123
05.02.2019 10:39+1Сосунки!
dslogic, за скромные ~4300 руб. с ПО на базе сигрока (со всеми возможностями оного под дешифровке протоколов). 16 каналов, 400 МГц!
Работает как в стриме (не отличаясь от салеа), так и в буфер (быстро складывает в буфер, а потом медленно в льет в комп).
Базовая версия не содержит буферной памяти (только то, что есть внутри спартан6).
Но в любом ларьке торгующем электрокомпонентами можно за 300 руб купить SDRAM.
Припаяв ее и немного пропатчив либо прошивку логического анализатора либо ПО для компа. Получаем полный «фарш» в виде 64Mb хранения в буфер на канал!
А если взять программиста+плисовода, fx3+спартан6, ПО от сигрока, то за недолго можно запилить 32 канала на 100МГц в стриме! (это значит можно в комп лить бесконечные логи работы оборудования).
А если ограничиться 8 каналами, то стрим уже будет 400МГц.
А если вам нужно не очень быстро, но много каналов, то можно и 64 канала на 50МГц.proton17
05.02.2019 10:57400МГц на 4 каналах в буфер 100МГц на 3 каналах стрим. Но в остальном штука хорошая, когда выбирал себе давно ЛА смотрел на этот, но он тогда дороже стоял вроде. А DsView вроде лежит на гитхабе в открытом виде с исходниками.
andi123
05.02.2019 11:01У них две версии, с буфером в 256Mb и 256Kb. И с разницей в цене на 3000 руб. Хотя по сути разница только в запаянной 300-рублевой SDRAM и 8 байтах прошивки FX2LP.
proton17
05.02.2019 11:05Так я про 256Мб и говорю, DSLogic Plus:
Buffer mode: 400MHz when using 4 channels, 200MHz when using 8 channels, 100MHz when using 16 channels
Stream mode: 100MHz when using 3 channels, 50MHz when using 6 channels, 25MHz when using 12 channels, 20MHz when using 16 channels
Goron_Dekar
05.02.2019 11:29dslogic ну такое… Нет USB 3.0. И этим всё сказано.
Без буфера это игрушка, которая не даст прослушать даже USB FS. С буфером мы уже получаем эту возможность, но ждать заливки по 5-10 секунд уныло.
Да и нет аналогового сигнала, что иногда бывает полезно.
Для своей цены (130$) вполне приемлемо. А вот брать младшую версию и шаманить вручную с буфером и прошивкой не стоит, вернее сразу делать свой ЛА на спартане + FPGA, благо заделов в интернете есть, если поискать.andi123
05.02.2019 11:41А вот брать младшую версию и шаманить вручную с буфером и прошивкой не стоит
трудозатраты в сравнении
сразу делать свой ЛА на спартане + FPGA
просто на порядки меньше. Тем более вы путаете цель и средство. Цель не сделать свой крутой ЛА, а посмотреть, что на шине происходит.
А по теме статьи (шина i2c) переплачивать за usb3 глупость, не говоря уж о том чтобы делать свой.Goron_Dekar
05.02.2019 12:36i2c перелапчивать без аналогового сигнала, не имея представления о том, где master, а где slave это немного уныло.
andi123
05.02.2019 14:04А можно узнать чем поможет аналоговый сигнал для представления о том где мастер и где слейв?
И что значит не имея представления, не имея представления географически на плате?
Или в обмене не видно?
proton17
05.02.2019 15:39Я вот тоже не понял, мастер тот, кто формирует условие старта. А если надо физически на плате определить, так это из маркировки или схемы понятно, ну или ножки отпаивать и смотреть. Ну на крайний случай можно по форме SCL смотреть — у мастера должны быть более четкие фронты и меньше выбросы, но это справедливо если линия длинная, а если там 2см, то пофиг. Тем более что у этих ЛА хар-ки аналоговых каналов так себе.
andi123
05.02.2019 16:00Вангую, что просто обидно 1000 баксов отдать только за usb3.0 и аналоговый вход.
Только и остается говорить о 10 сек. ожидания (откуда такая цифра, решительно не ясно) и о обязательной нужности аналогового входа (50MS/band 5MHz/-+10V/12bit) якобы для определения мастер/слейва.
Спору нет, usb3 полезная штука, но не за $1000. А уж аналоговый вход… кстати у DS есть двухканальный осциллограф (200MS/band 50MHz/+-100V/8bit) за смешные 7000 руб.
Итого за 12 тыс руб. 16 LA+2ch oscill + вся мощь сигрока.
DreamSourceLab — молодцы! Не удивлюсь, если «запилят» usb3, тогда Saleae придется заняться чем-то другим.proton17
05.02.2019 16:06Да, за цену Saleae PRO можно купить уже очень интересный осциллограф от Hantek\Unit\Rigol, с нормальными аналоговыми каналами (и щупами, что важно) и еще анализатором на 16 каналов.
andi123
05.02.2019 16:10Это так. Но лучше отдельный нормальный осцилл без ЛА. И нормальный ЛА, чтобы и 32 канала и usb3 и разбор всех протоколов.
Вот пойду на пенсию и займусь ЛА своей мечты :) эх… мечты-мечты.
dmitryrf
06.02.2019 17:06В SMBus аналоговый сигнал позволяет по уровню понять кто именно тянет шину вниз — мастер или слейв — за счет падения на последовательном резисторе. Страница 7
andi123
06.02.2019 17:10Это если последовательный резистор есть.
А в каком случае эта информация может быть полезной?
Я вот пока не могу придумать для чего бы это было нужно.dmitryrf
06.02.2019 17:21Один вариант придумал — понять, кто зажал клок и тупит. Я не говорю, что это нужная штука, просто пояснил, что мог иметь в виду Goron_Dekar.
andi123
06.02.2019 17:26Нормуль, принято.
Хотя конечно с трудом представляю реальную историю применения.
Только если есть самодельные i2c слейв и мастер. И приходится отлаживаться только на них. Стоит только взять вместо слейва 24c01 и уже ясно, что косяк в мастере.
VT100
05.02.2019 12:05В следующей публикации расскажу, как измерял частоту, на которой запустился кварцевый резонатор в синтезаторе частоты, без частотомера.
Спойлер. Настоящий?По сигналам станций точного времени и частоты что-ли?tronix286
05.02.2019 15:59А когда под рукой только клон Saleae на 8 каналов, а нужно посмотреть 40 сигналов с шины ISA приходится городить самому из платы от игровых автоматов и макетки:
И пользовать конечно Pulse-view из комплекта Sigrok, чтоб еще и этот велосипед не изобретать:
Зато дешево и сердито :E И не нужен анализатор за овер 9000 на 64 канала.
PR200SD
05.02.2019 18:11Придется поставить PulseView, и посмотреть что же эта программа такого делает с клоном Salea Logic, что нужно сделать столько манипуляций.
xztau
05.02.2019 19:21Платка с экраном и крутилкамиКрутилки и кнопки слева, а экран справа. Не очень удобно в использовании будет. По крайней мере для правшей.meda1ex
06.02.2019 08:23Есть небольшая особенность логического анализатора, которая не упомянута в статье. Логический анализатор показывает непосредственно логические уровни: лог. 0 и лог. 1, причем переключение происходит при определенном значении напряжения. Помню, как-то отлаживал передачу данных по UART с использованием логического анализатора. Вижу импульсы с передатчика, а приемник не видит. После того, как подключился на линии осциллографом, первое на что обратил внимание это импульсы оказались низкой амплитуды
Andy_Big
06.02.2019 14:16Выводы в статье немного странные. Осциллограф и ЛА — это несколько разные инструменты. Ну, как гаечный ключ и пассатижи.
Осциллограф — для анализа формы сигналов. ЛА — для анализа содержимого цифровых протоколов. То есть если нужно убедиться в том, что форма сигналов соответствует требованиям — используем осциллограф, если нужно убедиться в том, что передающиеся данные соответствую требованиям — используем ЛА.
Ну и поддержу первый комментарий — берем не клон Saleae, а самостоятельный бренд Kingst и работаем без плясок с бубном :)dredd_krd
07.02.2019 00:44Ну, я бы не был настолько категоричен. У меня Rigol DS2072A, так он совмещает в себе функции и гаечного ключа, и пассатижей, правда всего на 2 канала. Умеет и различные протоколы декодировать по байтам и событиям, и триггер на те же события (разные) навешивать, и дампить собранные данные (правда с небольшим бубном, но это издержки). На разработку/ремонт хватает за глаза, и всё в одном флаконе. Недавно успешно реверс-инженирил общение блоков в автомагнитоле по сабжевому i2c, и никаких затруднений при этом не испытывал.
Раньше думал, что непременно нужен будет логический анализатор, а теперь спокойно обхожусь без него. Но не исключаю, что до поры до времени… :)Andy_Big
07.02.2019 01:56Да можно, конечно, можно даже осциллографом без встроенного ЛА, как показал автор :)
Но «всего на 2 канала» и «с небольшим бубном» — это не совсем замена нормальному анализатору :)
proton17
Kingst LA1010-LA5016 и никаких танцев с бубнами и тем более Saleae за 400$. ПО у них не хуже, подозреваю тоже скопипастили. Но все интерфейсы есть: UART, SPI, I2C, CAN и многое другое.
Goron_Dekar
Sigrok на голову выше по возможностям анализатора пакетов оригинальной ПО Saleae и ПО Kingst. Немного хуже по юзабилити, но терпимо. Жаль, что пока что не поддерживает старшие модели Saleae Pro без бубна.
А железо Saleae Logic Pro 16 просто бесподобно. Стоит своих денег.
proton17
Согласен, но для хобби 400$ (всего 8 каналов) без учета доставки все же перебор ИМХО. А если вы используете это в профессиональной деятельности, то там уже Lecroy, Agilent и т.п.
Goron_Dekar
Ну люди на хобби тратят гораздо больше 400$. Сколько стоит поездка покататься на горных лыжах в горы из Москвы?
А возможность использовать real-time debugging в микроконтроллерах, или отлаживать LS + FS USB это приятно.
proton17
Вопрос в достатке, у кого-то хобби это коллекционирование Ferrari. Я сейчас говорю про среднестатистического отечественного радиолюбителя, среди которых много школьников и студентов кстати.
Goron_Dekar
Для школьников/студентов, у которых, кстати, часто можно встретить мобильные телефоны подороже, чем этот ЛА, можно вообще обойтись китайцем на старом спартане за 15$. Благо он отлично цепляется к sigrok. Но когда просто анализа цифровых протоколов станет мало всё равно понадобится этакий цифровой швейцарский нож, и тут Saleae Pro с аналоговыми сигналами и USB3.0 просто вне конкуренции. Ближайшие аналоги по функционалу стоят раза в 4 дороже.
proton17
Ага, а про стоит от 700$ лол, за эти деньги можно купить уже хороший осциллограф который по измерению аналоговых сигналов порвет Saleae как тузик) И еще денег на что-ть 16-канальное на 100МГц останется, типа LA1016. А в принципе можно и DS1052D купить, там вообще все есть, ну может анализатор чуток слабоват. Вообще складывается впечатление, что Saleae чисто имиджевый продукт, модный стартап из Калифорнии, для тех кому не хватает на Lecroy, но не хочет брать китайца.