Skip to content

Latest commit

 

History

History
121 lines (111 loc) · 14.6 KB

README-RU.md

File metadata and controls

121 lines (111 loc) · 14.6 KB

En

| Supported Targets |

ESP32 ESP32S3 ESP32C3

Логический анализатор на ESP32 для самодиагностики

  • Нет необходимости покупать и подключать внешний логичекий анализатор
  • Подключается как компонент к вашей программе ( ESP IDF )
  • Вывод информации на WEB интерфейс или Sigrok PulseView
  • Поддерживаемые SOC -> ESP32, ESP32S3, ESP32C3

WebSocket PulseView

Основные параметры

Channels Max
Sample
Count(2)
Max
Sample
Rate
ESP
Module
Free GPIO & Clock Source
Required
ESP32 16 50 000 40 MHz I2S0/I2S1 NO
ESP32S3 8
16
140 000
70 000
80 MHz
40 MHz
LCD_CAM One Free GPIO
One LEDC Channel for slow PCLK(3)
ESP32S3
PSRAM8(1)
8
16
8 000 000
4 000 000
10 MHz
5 MHZ
LCD_CAM One Free GPIO
One LEDC Channel for slow PCLK(3)
ESP32C3(4) 4 60 000 80 MHz GPSPI2 NO
  1. Не рекомендую использовать этот режим без необходимости. PSRAM сильно нагружает SPI шину, возможны артефакты и задержки в работе основной программы. Для корректной работы с Кэшем требуется ESP IDF ver 5.2 ( в текущей версии master branch )
  2. Максимальное количество сэмплов зависит от количества свободной памяти при работе вашей программы, анализатор ограничит количество сэмплов и вернет максимально возможное.
  3. ESP32S3 -> требуется один, никуда не подключенный вывод GPIO для сигнала PCLK, для частоты сэмплов меньше 1 MHz - можно разрешить подключение 1 канала LEDC
  4. ESP32C3 -> триггер не использует HiLevel прерывания, Задержка от триггера до начала данных 1,3-1,5 мкСек. SUMP работает врежиме 8 каналов, старшие 4 канала не используются.
  • 1 канал триггера захвата. Триггер организован на прерываниях по фронтам. В ESP32 прерывания обрабатываются примерно 2 мкСек (rev0.1) - Соответственно задержка от триггера до начала данных, около 2-х мкСек. В текущих версиях триггер переведен на Hilevel прерывания ( level 5 ), Задержка от триггера до начала данных уменьшена до 0,3 мкСек.
  • Все настройки режимов вынесены в Menuconfig. Каналы, Триггер, Частота сэмплов дополнительно настраивается в WEB интерфейсе
  • Анализатор позволяет работать на измеряемом устройстве. Устанавливаем софт на пациента, как стандартный внешний компонент ESP IDF, настраиваем GPIO на каналы ( проверено - GPIO, I2C, I2S, SPI, LED PWM, IRQ_GPIO, UART, USB, думаю что остальное также будет работать ), показывает как входные так и выходные сигналы пациента. Ограничения по триггеру в этом режиме - нельзя назначить триггер на пин (GPIO) у которого назначено прерывание на софте пациента ( анализатор перенастроит на себя ) - в последней версии (interrupt level 5) ограничение частично снято, но триггер будет срабатывать по тем фронтам(уровням), которые назначены на софте пациента.
  • Можно сделать анализатор как отдельное устройство, но не вижу особого смысла На рынке достаточное количество дешевых аналогов с похожими харатеристиками. Основное преимущество самодиагностики - подключили компонет к проекту и смотрим, что там происходит. Понятно что софт пациента может уже использовать всю память - тогда сильно уменьшится объем сэмплов - но хотя бы уровни и небольшое количество отсчетов все равно увидим.

Простой web интерфейс

  • Подключение совсем без проводов
  • Простая настройка GPIO на каналы
  • Переключение количества каналов 8/16 и использования PSRAM
  • Просмотр сэмплов ( без анализатора протоколов )
  • Сохранение данных в .bin формате который потом можно при необходимости передать в Sigrok PulseView.

В качестве визуализации и анализатора протоколов можно использовать Sigrok PulseView

  • Открытый софт
  • Много анализаторов протокола
  • при прямом (SUMP) подключении используется UART для получения данных, протокол передачи "Openbench logic Sniffer & SUMP"
  • по умолчанию используется UART0 ESP32 можно ( а лучше нужно ) использовать другой порт, если он есть на вашем устройстве. Можно настроить в menuconfig.
  • можно использовать ( рекомендую ) сохраненные данные из WEB интерфейса rawBin
  • рекомендую использовать прямое подключение к SUMP/Sigrok PulseView только при дефиците ресурсов ( Rom/Ram ). SUMP протокол очень маленький по объему кода.

Известные баги

  • при использовании SUMP/Sigrok UART0 - необходимо отключить весь дигностический вывод ESP32 (LOG LEVEL - NONE ), это не баг но существенное ограничение.
  • PulseView - для получения данных нужно нажать RUN 2 раза с интервалом 1-2 секунды ( причину не знаю )
  • PulseView - в режиме триггера не работает с кадрами меньше 1к ( причину не знаю )
  • PulseView - не принимает параметр максимальной частоты сэмплов - легко увидите частоты 50/100/200 мегаГерц.
  • PulseView - не работает предвыборка триггера ( ставим 0% ) - просто не делал, и в текущей архитектуре невозможно.
  • PulseView - невозможно поставить частоту выборки 40-80 MHz

Подключение LogicAnalyzer к проекту как компонент

Подключение PulseView

  • Connect to device
  • Choose the driver - Openbench logic Sniffer & SUMP
  • Serial Port - Speed - 921600 ( скорость можно переопределить, на моем кабеле работает на этой скорости )
  • Scan for Device - должен появиться ESP32 with 8/16 channels
  • Дальше читаем руководство по PulseView.
  • Для чтения .bin файлов - просто импорт rawBin, 8/16 каналов, нужная частота сэмплов.

Подключение Web интерфейса - заходим на страничку по адресу http://xxx.xxx.xxx.xxx/la

Интерфейс программы

Условно состоит из 3-х частей

include/logic_analyzer_hal.h

  • Получает сэмплы в буфер ESP32
  • logic_analyzer_config_t - конфигурация захвата
  • start_logic_analyzer(logic_analyzer_config_t *config) - старт захвата
  • void (*logic_analyzer_cb_t)(uint8_t *samle_buf, int samples, int sample_rate) - каллбэк после захвата данных

include/logic_analyzer_sump.h

  • работа с PulseView
  • logic_analyzer_sump();

include/logic_analyzer_ws_server.h

  • Стартуем web сервер с поддержкой websocket - проверить в menuconfig поддержку websocket
  • logic_analyzer_ws_server()

include/logic_analyzer_ws.h

  • если на вашем устройстве уже установлен сервер с поддержкой websocket - просто зарегистрируйте uri handler
  • logic_analyzer_register_uri_handlers(httpd_handle_t server);

Пример с тестовыми сэмплами

logic_analyzer_example

  • test_sample_init() - включает простой генератор на 100 килогерц, пачку GPIO имульсов с большой скважностью и пачку GPIO импульсов сформированных по прерываниям. Никаких дополнительных подключений, проводков и пр. не нужно, уже будет показывать внутренности. При желании можете поставить 2 перемычки на пины - продублирует сигналы на GPIO.
  • вишенка на торте - подключаемся любым каналом на TXD0 и смотрим свой же uart0 (только web)

Настройки вынесены в menuconfig

  • Общие настройки
    • ANALYZER_USE_HI_LEVEL_INTERRUPT - триггер через прерывания высокого уровня
    • ANALYZER_SEPARATE_MODE - для работы как отдельное устройство ( своя настройка GPIO )
    • ANALYZER_USE_WS - использовать WEB интерфейс
    • ANALYZER_USE_SUMP - подключаться непосредственно к PulseView по COM порту
    • ANALYZER_USE_PORT_ASSIGN - настроить каналы по умолчанию (Каналы, триггер, частота количество сэмплов, Количество каналов, использоввание PSRAM)
  • Настройки для ESP32
    • ANALYZER_USE_I2S_CHANNEL - используемый канал I2S ( 0/1 )
  • Настройки для ESP32S3
    • ANALYZER_PCLK_PIN - номер GPIO для транзита PCLK
    • ANALYZER_USE_LEDC_TIMER_FOR_PCLK - подключать канал LEDC для частоты сэмплов меньше 1 MHz

Для использования Hi-level interrupt необходимо в menuconfig поставить CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL = ESP_SYSTEM_CHECK_INT_LEVEL_4

Добавлен CLI интерфейс для стабильной работы с PulseView при ограничении RAM

  • минимальное потребление RAM
  • простой скрипт logic_analyzer_cli/logic_analyzer_cli.py для сохранения сэмплов в RowBin файл (необходимо добавить зависимость PySerial)
  • параметры скрипта задаются в файле la_cfg.json ( шаблон файла создается автоматически при первом запуске скрипта), GPIO,TRIGGER,TRBGGER EDGE,SAMPLES,SAMPLE RATE,NUMBER CHANNELS,RAM/PSRAM.
  • подключение к коду программы
    • logic_analyzer_cli/include/logic_analyzer_cli.h
    • установить в menuconfig ANALYZER_USE_CLI и параметры UART/USB_SERIAL_JTAG
    • скомпилировать и загрузить код программы с подключеным logic_analyzer
    • подключиться к UART/USB
    • запустить logic_analyzer_cli.py с установлеными параметрами в файле la_cfg.json - подключение к PulseView
    • Import Raw binary logic data - файл который создается скриптом
    • задание количества каналов и частоты сэмплов при первом импорте (esp32c3 - ставим 8 каналов, используются 4 младших ), в дальнейшем если эти параметры не меняются достаточно сделать Reload
  • для UART0 те же ограничения как для SUMP интерфейса
  • преимущества перед SUMP интерфейсом
    • смотрим выше известные баги PulseView - здесь их нет (кроме UART0)
    • простая настройка GPIO на каналы через la_cfg.json

вывод cli интерфейса

В проекте использованы части кода