LogicDiscovery — простой логический анализатор

Довольно часто в домашних электронных поделках возникает необходимость посмотреть тот или иной сигнал, причем достаточно его цифрового представления — что передает МК по I2C, правильно ли настроен ШИМ и т.п. Если на работе есть хороший осциллограф, то покупать его для дома — слишком дорогое удовольствие, особенно, когда необходимость возникает лишь от случая к случаю.
В последнее время появились недорогие (в пределах $50) логические анализаторы, однако меня от их покупки всегда останавливало одна мысль: штука то предельно простая, почему бы не сделать её своими руками из подручных материалов?
В данной статье я расскажу, как сделать простой логический анализатор с минимальными финансовыми затратами — все что нужно это отладочная плата Stm32F4Discovery.

Логический анализатор (далее ЛА) – устройство предназначенное, для записи, просмотра и анализа сигналов в цифровых схемах. Подобно осциллографу, ЛА подключается одним или несколькими щупами к анализируемой схеме, но в отличие от осциллографа фиксирует только два состояния сигнала «0» и «1». Важной функцией ЛА является способность автоматически расшифровывать записанные сигналы, например, разобрать обмен данными по шине I2C или SPI. Также ЛА отличаются бОльшим, по сравнению с осциллографами, количеством анализируемых линий: от 8 в простых анализаторах до сотен в промышленных образцах.
Описываемый здесь проект — LogicDiscovery — это SUMP-совместимый логический анализатор, выполненный в формате USB-приставки к ПК. Он обладает довольно скромными характеристиками: 20MHz, 16 каналов, 24кБ памяти. Однако, этого достаточно для весьма большого круга задач: анализ линий UART, I2C, SPI (в пределах нескольких мегагерц), параллельных шин, измерение временных характеристик сигналов и т.п.

Приступим


Итак, все, что нам понадобится это:
  • Отладочная плата Stm32F4Discovery. От 500 рублей в московской рознице, а может она уже лежит в ваших закромах? Подойдет и любая другая плата на STM32F4 или STM32F2, но тогда придется подправить исходники.
  • Несколько проводов, для подключения к анализируемой схеме.
  • Прошивка, готовая к употреблению лежит на Google.Code. Там же находятся исходники.
  • Кроме того нужен клиент для ПК, рекомендую OLS.

Клиент написан на Java, поэтому полученное решение не зависит от ОС. Теоретически вы можете использовать любой SUMP-совместимый клиент, однако ниже я буду описывать работу именно с этой программой.
Stm32F4Discovery питается от порта mini-USB, через который она и прошивается. Для использования функций ЛА плата подключается к ПК через порт micro-USB. Чтобы запитать плату от этого же порта соединяем перемычкой пины PA9 и 5V. PA9 подключен напрямую к Vbus порта micro-USB, а 5V это вход стабилизатора формирующего питание для платы. Для проверки работы соедините порты PA2 и PD0. На PA2 формируется тестовый сигнал, а PD0 это первый вход ЛА.



Плата опознается ПК как COM-порт, для Linux драйвера стандартные и должны уже быть в ядре, для Win драйвера скачиваются с сайта ST. После того как плата опозналась можно запускать клиент и приступать к работе.
Но сначала ложка дёгтя.

Ограничения


В проекте используется открытый протокол SUMP. Данный протокол изначально разрабатывался для ЛА на базе ПЛИС, и поскольку в части записи входных сигналов и анализа потока данных микроконтроллеры по-прежнему им уступают, нам будут доступны не все функции реализованные в клиенте:
  • Максимальная частота записи – 20МГц, в оригинале до 200МГц
  • RLE-сжатие и фильтрация шумов не поддерживаются.
  • Нельзя выбрать произвольные группы каналов, только первую (8 каналов), либо первую + вторую (16 каналов).
  • Триггеры работают не по значению, а по фронту (впрочем, на мой взгляд, это уже достоинство).
  • Нет поддержки расширенных (Complex) триггеров.

Эти ограничения следует иметь ввиду при настройке клиента. Тот ничего не знает об этих ограничениях и позволит выбрать любые настройки. Полученный результат в этом случае будет некорректным.

Пользуемся


Запускаем клиент через файл run.bat или run.sh, в зависимости от используемой ОС. О функциях клиента можно почитать на его страничке, здесь я опишу процесс получения первых сэмплов и те настройки, которые попадают под ограничения.

В меню «Capture», выбирая пункт «Begin capture», открываем окно настроек записи. На первой странице в поле ««Analyzer port» выбираем порт, на котором сидит наш ЛА, больше ничего менять не нужно. Кнопкой ««Show device metadata» можно проверить наличие связи:



На второй странице указываем параметры захвата. Первые два пункта не трогаем,
«Sampling rate» не выше 20МГц (если указать больше – плата все равно использует 20МГц, но клиент будет думать, что используется указанное значение, в общем, ерунда получится).
«Channel groups»: 0 – используем одну группу каналов, это линии PD0-PD7, либо 0 и 1 – используем две группы каналов — линии PD0-PD15.
«Recording size»: для одной группы каналов – любое значение, для двух групп – не более 12kB (клиент предупредит, если в данном поле выбрано неверное значение).
Чекбоксы на данной странице не трогаем, они не поддерживаются:



Страница «Triggers» — самое интересное. Первый флажок ставим, чтобы просто включить триггеры.
«Before/After ratio» позволяет указать, в процентном соотношении, сколько данных сохранить до срабатывания буфера. После нажатия «Capture» ЛА сразу начинает запись данных, складывая их в циклический буфер, а по срабатыванию триггера отсчитывает указанный в поле After процент времени и отправляет данные на ПК.
«Type» — только «Simple», «Complex» — не поддерживается.
«Mode» — только «Parallel».
«Mask» — это те линии, на которых триггер будет ожидать перепад сигнала, поставте флаг в нулевой позиции для срабатывания по линии PD0
«Value» — фронт сигнала, по которому будет происходить срабатывание триггера. Флажок установлен – передний фронт. Флажок снят – задний:



Для проверки работы соедините порты PD0 и PA2 (на данном порту выводится тестовый сигнал UART) перемычкой.

Вот и все, нажимаем «Capture» и смотрим на полученный сигнал (Ctrl+F — обзорный масштаб):



Если ничего не происходит, значит, вы выставили срабатывание триггера на неправильные линии, или сигнала вовсе нет — проверьте настройки и подключение платы. Триггер можно запустить вручную, нажатием User button (синяя кнопка).

Техника безопасности


Помните: вы подключаетесь напрямую к портам микроконтроллера! Никакой защиты, кроме встроенных в МК диодов на плате нет. Поэтому сначала удостоверьтесь что, изучаемый сигнал имеет максимальное напряжение 3.3В, в крайнем случае 5В, но тогда желательно добавить между источником сигнала и ЛА защитный резистор.

При подключении к анализируемой схеме не забывайте сначала соединять земли, и только уже потом сигнальные линии. Особенно, когда анализируемая схема питается от своего источника питания, а не от того же ПК, к которому подключен ЛА.

Полезности


Страничка проекта на Google.Code
Описание платы STM32F4Discovery
Open Logic Sniffer — проект послуживший источником вдохновения для данной работы.

PS: LogicDiscovery успешно применяется как дома, так и на работе, преимущественно для анализа последовательных интерфейсов (SPI, UART). Если будут пожелания по расширению функционала — буду рад выслушать. Учитывайте только, что многое упирается в ограничения клиента, например, размер выборки на F4 можно сделать в разы больше, однако клиент просто не знает других размеров.

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 21

    +2
    Вот буквально позавчера сел за проектирование на своей STM-ке лог.анализатора, ибо под рукой нету, а очень надо!

    Вощем — пасибо за экономию времени!
      0
      Обязательно воспользуюсь!
      А почему так с частотами? почему не получается выше 20МГц?
        +1
        Потому что следующая частота в ряду, который поддерживает клиент — 50МГц. Думаю проц ее потянет, однако, тогда придется выставить базовую частоту 100 или 150МГц, что бы делением получить ровно 50. А из этой частоты уже не получится сделать 48МГц, которые нужны для USB-контроллера, просто нет подходящего делителя на выходе PLL.
        Сейчас базовая частота процессора — 120МГц.
          0
          Т.е. если подвесить трехбаксовый USB-UART на аппаратный UART дискавери, то взлетит на 50?
          Вот Вам и фичреквестик:)
            +1
            Думаю — взлетит :) Попробую, главное что бы пропускной способности шины хватило.
              +1
              Мням… Из этого вытекает еще одна интересная фича… Если задействовать UART удлинитель, например мой любимый bluetooth hc-06, то система превращается в беспроводную, электрически отвязанную от компа. Что-то в этом есть весьма привлекательное!

              Надо бы еще замутить шильд с диодами и резисторами защиты, питанием и разъемами на щупы.
                0
                Есть еще старая мыслишка — сделать клиентскую программу на Андройд. С Bluetooth эта тема выглядит еще привлекательнее, он везде есть, а usb-host далеко не на всех аппаратах присутствует.
                Вот только объем работ там поболее будет, да и опыт написания софта под андройд у меня минимальный.
                  0
                  я в сети видел исходники простого осцилографа для подключения через BT к андроиду.
                  найдется (только по-английски ищите)
            0
            Фиксированные делители в PLL USB вообще очень огорчают, я STM32F103xx, у которой частота в 72 МГц, заводил на 120, даже не вспотела. А вот если нужен USB — все, STM работает, а USB при разгоне отваливается(
        • UFO just landed and posted this here
            0
            Защиты входов нет. С этой микросхемой памяти тулзы плохо заводятся. А так да.
            Вот бы ещё кто-нибудь на Stm32F4Discovery с HS USB анализатор сделал…
              0
              Делал и с HS-USB, там в проекте только дефайны надо поменять и пересобрать. Вот только не то у меня какой-то косяк, не то в ST-шном драйвере бага затесалась… Вобщем, при считывании результатов USB наглухо повисало, причем процессор продолжал мигать диодами. Иногда удавалось несколько раз считать полную пачку, иногда висло сразу, так я и не разобрался с этим — отложил до лучших времен.
            0
            очень интересно! F4 используется только из-за большей по сравнению с F1 частоты?
              0
              Не только, см выше мой ответ про частоты. У F2/F4 можно гораздо гибче настроить рабочую частоту при сохранении работоспособности USB. Если у F1 для получения 48МГц для USB есть только два делителя — 1 и 1.5, то у F2/4 можно выбирать из полутора десятков.
              Если отбросить USB и выдавать данные по UART, то можно и на F1 сделать, но прошивку придется всю перелопатить — другие контроллеры USB, DMA
                0
                Ну т.е. так или иначе, дело в частоте. То есть нет препятствий сделать на той же кодовой базе анализатор на F1, но с максимальной частотой например 2 МГц? Для SPI/I2C/UART должно такго хватить, как мне кажется
                  0
                  Вполне, причем как раз 2МГц это максимум, при котором можно сохранить работоспособный USB на F1.
              +1
              Если проект еще кому-то интересен: в последнем релизе добавил RLE сжатие семплов и еще в прошлом — подключение к компу через UART.
              code.google.com/p/logicdiscovery/downloads/detail?name=LogicDiscovery-r12.bin
                0
                А в чём проект делали?
                Хочу пересобрать под stm32f429-Discovery.
                Заранее спасибо!
                0

                Добрый день! Да, старая статья, но, может, ответите.
                Захотел сделать логический анализатор на STM32, начал искать различные варианты. Ваш пока самый "навороченный" из тех, которые я нашел.


                Скажите, а у Вас поддерживается continuous режим, т.е. отправка данных на компьютер в реальном времени? Еще не дошли руки посмотреть Ваш код, и не до конца разобрался с SUMP протоколом, не знаю, позволяет ли он такое в принципе.


                Не будет ли Isochronus трансфер более быстрым по сравнению с CDC? Правда, в таком случае потребуется написать поддержку протокола, с помощью libusb, я думаю.

                  0
                  Приветствую! Давненько это было) В свое время был приобретен осциллограф с логическим анализатором и проект благополучно зарос бурьяном. Поэтому отвечать буду по памяти.

                  На ваши вопросы в основном отвечает протокол SUMP (который, кстати, был выбран по причине наличия адекватных клиентов на то время)
                  1. Насколько я помню, SUMP не поддерживает непрерывную передачу.
                  2. SUMP-клиенту на ПК нужно указать COM-порт для подключения, поэтому CDC без вариантов.

                  Изохронная передача не гарантирует доставку, а выпадание сэмплов для данной задачи недопустимо.
                  И, да, если нужно добиться более высокой производительности, стоит сделать свой буферизующий (и передающий данные большими массивами) протокол, на базе libusb. Но придется добавлять поддержку в существующие sump-клиенты или найти что-то другое.
                    0

                    Я хочу сделать поддержку sigrok, который, как мне кажется, самый навороченный open source софт для логических анализаторов, осцилографов. Поддерживает большое количество оборудования с различными протоколами (и sump, и проприентарные, например saleae). Да и добавить поддержку своего в libsigrok не очень сложно.

                Only users with full accounts can post comments. Log in, please.