Довольно часто в домашних электронных поделках возникает необходимость посмотреть тот или иной сигнал, причем достаточно его цифрового представления — что передает МК по I2C, правильно ли настроен ШИМ и т.п. Если на работе есть хороший осциллограф, то покупать его для дома — слишком дорогое удовольствие, особенно, когда необходимость возникает лишь от случая к случаю.
В последнее время появились недорогие (в пределах $50) логические анализаторы, однако меня от их покупки всегда останавливало одна мысль: штука то предельно простая, почему бы не сделать её своими руками из подручных материалов?
В данной статье я расскажу, как сделать простой логический анализатор с минимальными финансовыми затратами — все что нужно это отладочная плата Stm32F4Discovery.
Логический анализатор (далее ЛА) – устройство предназначенное, для записи, просмотра и анализа сигналов в цифровых схемах. Подобно осциллографу, ЛА подключается одним или несколькими щупами к анализируемой схеме, но в отличие от осциллографа фиксирует только два состояния сигнала «0» и «1». Важной функцией ЛА является способность автоматически расшифровывать записанные сигналы, например, разобрать обмен данными по шине I2C или SPI. Также ЛА отличаются бОльшим, по сравнению с осциллографами, количеством анализируемых линий: от 8 в простых анализаторах до сотен в промышленных образцах.
Описываемый здесь проект — LogicDiscovery — это SUMP-совместимый логический анализатор, выполненный в формате USB-приставки к ПК. Он обладает довольно скромными характеристиками: 20MHz, 16 каналов, 24кБ памяти. Однако, этого достаточно для весьма большого круга задач: анализ линий UART, I2C, SPI (в пределах нескольких мегагерц), параллельных шин, измерение временных характеристик сигналов и т.п.
Итак, все, что нам понадобится это:
Клиент написан на Java, поэтому полученное решение не зависит от ОС. Теоретически вы можете использовать любой SUMP-совместимый клиент, однако ниже я буду описывать работу именно с этой программой.
Stm32F4Discovery питается от порта mini-USB, через который она и прошивается. Для использования функций ЛА плата подключается к ПК через порт micro-USB. Чтобы запитать плату от этого же порта соединяем перемычкой пины PA9 и 5V. PA9 подключен напрямую к Vbus порта micro-USB, а 5V это вход стабилизатора формирующего питание для платы. Для проверки работы соедините порты PA2 и PD0. На PA2 формируется тестовый сигнал, а PD0 это первый вход ЛА.
![](https://habrastorage.org/r/w780q1/storage2/7f3/ab0/b88/7f3ab0b88fdbf4322be7043b5ba38b21.jpg)
Плата опознается ПК как COM-порт, для Linux драйвера стандартные и должны уже быть в ядре, для Win драйвера скачиваются с сайта ST. После того как плата опозналась можно запускать клиент и приступать к работе.
Но сначала ложка дёгтя.
В проекте используется открытый протокол SUMP. Данный протокол изначально разрабатывался для ЛА на базе ПЛИС, и поскольку в части записи входных сигналов и анализа потока данных микроконтроллеры по-прежнему им уступают, нам будут доступны не все функции реализованные в клиенте:
Эти ограничения следует иметь ввиду при настройке клиента. Тот ничего не знает об этих ограничениях и позволит выбрать любые настройки. Полученный результат в этом случае будет некорректным.
Запускаем клиент через файл run.bat или run.sh, в зависимости от используемой ОС. О функциях клиента можно почитать на его страничке, здесь я опишу процесс получения первых сэмплов и те настройки, которые попадают под ограничения.
В меню «Capture», выбирая пункт «Begin capture», открываем окно настроек записи. На первой странице в поле ««Analyzer port» выбираем порт, на котором сидит наш ЛА, больше ничего менять не нужно. Кнопкой ««Show device metadata» можно проверить наличие связи:
![](https://habrastorage.org/r/w1560/storage2/5b7/713/d1d/5b7713d1d007dbf65a4bc7d7ad0d3319.png)
На второй странице указываем параметры захвата. Первые два пункта не трогаем,
«Sampling rate» не выше 20МГц (если указать больше – плата все равно использует 20МГц, но клиент будет думать, что используется указанное значение, в общем, ерунда получится).
«Channel groups»: 0 – используем одну группу каналов, это линии PD0-PD7, либо 0 и 1 – используем две группы каналов — линии PD0-PD15.
«Recording size»: для одной группы каналов – любое значение, для двух групп – не более 12kB (клиент предупредит, если в данном поле выбрано неверное значение).
Чекбоксы на данной странице не трогаем, они не поддерживаются:
![](https://habrastorage.org/r/w1560/storage2/569/c5c/8a9/569c5c8a9e8b42dea238041025fb8709.png)
Страница «Triggers» — самое интересное. Первый флажок ставим, чтобы просто включить триггеры.
«Before/After ratio» позволяет указать, в процентном соотношении, сколько данных сохранить до срабатывания буфера. После нажатия «Capture» ЛА сразу начинает запись данных, складывая их в циклический буфер, а по срабатыванию триггера отсчитывает указанный в поле After процент времени и отправляет данные на ПК.
«Type» — только «Simple», «Complex» — не поддерживается.
«Mode» — только «Parallel».
«Mask» — это те линии, на которых триггер будет ожидать перепад сигнала, поставте флаг в нулевой позиции для срабатывания по линии PD0
«Value» — фронт сигнала, по которому будет происходить срабатывание триггера. Флажок установлен – передний фронт. Флажок снят – задний:
![](https://habrastorage.org/r/w1560/storage2/d4c/287/0ca/d4c2870ca059646c8eaa3d0d04f96424.png)
Для проверки работы соедините порты PD0 и PA2 (на данном порту выводится тестовый сигнал UART) перемычкой.
Вот и все, нажимаем «Capture» и смотрим на полученный сигнал (Ctrl+F — обзорный масштаб):
![](https://habrastorage.org/r/w1560/storage2/54d/569/b5e/54d569b5e26799c9371960900ffd8664.png)
Если ничего не происходит, значит, вы выставили срабатывание триггера на неправильные линии, или сигнала вовсе нет — проверьте настройки и подключение платы. Триггер можно запустить вручную, нажатием User button (синяя кнопка).
Помните: вы подключаетесь напрямую к портам микроконтроллера! Никакой защиты, кроме встроенных в МК диодов на плате нет. Поэтому сначала удостоверьтесь что, изучаемый сигнал имеет максимальное напряжение 3.3В, в крайнем случае 5В, но тогда желательно добавить между источником сигнала и ЛА защитный резистор.
При подключении к анализируемой схеме не забывайте сначала соединять земли, и только уже потом сигнальные линии. Особенно, когда анализируемая схема питается от своего источника питания, а не от того же ПК, к которому подключен ЛА.
Страничка проекта на Google.Code
Описание платы STM32F4Discovery
Open Logic Sniffer — проект послуживший источником вдохновения для данной работы.
PS: LogicDiscovery успешно применяется как дома, так и на работе, преимущественно для анализа последовательных интерфейсов (SPI, UART). Если будут пожелания по расширению функционала — буду рад выслушать. Учитывайте только, что многое упирается в ограничения клиента, например, размер выборки на F4 можно сделать в разы больше, однако клиент просто не знает других размеров.
В последнее время появились недорогие (в пределах $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 это первый вход ЛА.
![](https://habrastorage.org/storage2/7f3/ab0/b88/7f3ab0b88fdbf4322be7043b5ba38b21.jpg)
Плата опознается ПК как COM-порт, для Linux драйвера стандартные и должны уже быть в ядре, для Win драйвера скачиваются с сайта ST. После того как плата опозналась можно запускать клиент и приступать к работе.
Но сначала ложка дёгтя.
Ограничения
В проекте используется открытый протокол SUMP. Данный протокол изначально разрабатывался для ЛА на базе ПЛИС, и поскольку в части записи входных сигналов и анализа потока данных микроконтроллеры по-прежнему им уступают, нам будут доступны не все функции реализованные в клиенте:
- Максимальная частота записи – 20МГц, в оригинале до 200МГц
- RLE-сжатие и фильтрация шумов не поддерживаются.
- Нельзя выбрать произвольные группы каналов, только первую (8 каналов), либо первую + вторую (16 каналов).
- Триггеры работают не по значению, а по фронту (впрочем, на мой взгляд, это уже достоинство).
- Нет поддержки расширенных (Complex) триггеров.
Эти ограничения следует иметь ввиду при настройке клиента. Тот ничего не знает об этих ограничениях и позволит выбрать любые настройки. Полученный результат в этом случае будет некорректным.
Пользуемся
Запускаем клиент через файл run.bat или run.sh, в зависимости от используемой ОС. О функциях клиента можно почитать на его страничке, здесь я опишу процесс получения первых сэмплов и те настройки, которые попадают под ограничения.
В меню «Capture», выбирая пункт «Begin capture», открываем окно настроек записи. На первой странице в поле ««Analyzer port» выбираем порт, на котором сидит наш ЛА, больше ничего менять не нужно. Кнопкой ««Show device metadata» можно проверить наличие связи:
![](https://habrastorage.org/storage2/5b7/713/d1d/5b7713d1d007dbf65a4bc7d7ad0d3319.png)
На второй странице указываем параметры захвата. Первые два пункта не трогаем,
«Sampling rate» не выше 20МГц (если указать больше – плата все равно использует 20МГц, но клиент будет думать, что используется указанное значение, в общем, ерунда получится).
«Channel groups»: 0 – используем одну группу каналов, это линии PD0-PD7, либо 0 и 1 – используем две группы каналов — линии PD0-PD15.
«Recording size»: для одной группы каналов – любое значение, для двух групп – не более 12kB (клиент предупредит, если в данном поле выбрано неверное значение).
Чекбоксы на данной странице не трогаем, они не поддерживаются:
![](https://habrastorage.org/storage2/569/c5c/8a9/569c5c8a9e8b42dea238041025fb8709.png)
Страница «Triggers» — самое интересное. Первый флажок ставим, чтобы просто включить триггеры.
«Before/After ratio» позволяет указать, в процентном соотношении, сколько данных сохранить до срабатывания буфера. После нажатия «Capture» ЛА сразу начинает запись данных, складывая их в циклический буфер, а по срабатыванию триггера отсчитывает указанный в поле After процент времени и отправляет данные на ПК.
«Type» — только «Simple», «Complex» — не поддерживается.
«Mode» — только «Parallel».
«Mask» — это те линии, на которых триггер будет ожидать перепад сигнала, поставте флаг в нулевой позиции для срабатывания по линии PD0
«Value» — фронт сигнала, по которому будет происходить срабатывание триггера. Флажок установлен – передний фронт. Флажок снят – задний:
![](https://habrastorage.org/storage2/d4c/287/0ca/d4c2870ca059646c8eaa3d0d04f96424.png)
Для проверки работы соедините порты PD0 и PA2 (на данном порту выводится тестовый сигнал UART) перемычкой.
Вот и все, нажимаем «Capture» и смотрим на полученный сигнал (Ctrl+F — обзорный масштаб):
![](https://habrastorage.org/storage2/54d/569/b5e/54d569b5e26799c9371960900ffd8664.png)
Если ничего не происходит, значит, вы выставили срабатывание триггера на неправильные линии, или сигнала вовсе нет — проверьте настройки и подключение платы. Триггер можно запустить вручную, нажатием User button (синяя кнопка).
Техника безопасности
Помните: вы подключаетесь напрямую к портам микроконтроллера! Никакой защиты, кроме встроенных в МК диодов на плате нет. Поэтому сначала удостоверьтесь что, изучаемый сигнал имеет максимальное напряжение 3.3В, в крайнем случае 5В, но тогда желательно добавить между источником сигнала и ЛА защитный резистор.
При подключении к анализируемой схеме не забывайте сначала соединять земли, и только уже потом сигнальные линии. Особенно, когда анализируемая схема питается от своего источника питания, а не от того же ПК, к которому подключен ЛА.
Полезности
Страничка проекта на Google.Code
Описание платы STM32F4Discovery
Open Logic Sniffer — проект послуживший источником вдохновения для данной работы.
PS: LogicDiscovery успешно применяется как дома, так и на работе, преимущественно для анализа последовательных интерфейсов (SPI, UART). Если будут пожелания по расширению функционала — буду рад выслушать. Учитывайте только, что многое упирается в ограничения клиента, например, размер выборки на F4 можно сделать в разы больше, однако клиент просто не знает других размеров.