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 можно сделать в разы больше, однако клиент просто не знает других размеров.
Поделиться публикацией

Комментарии 18

    +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 при разгоне отваливается(
        • НЛО прилетело и опубликовало эту надпись здесь
            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.
                Заранее спасибо!

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое