{"id":14963347,"url":"https://github.com/ok-home/logic_analyzer","last_synced_at":"2025-04-09T11:11:57.848Z","repository":{"id":163040312,"uuid":"622439971","full_name":"ok-home/logic_analyzer","owner":"ok-home","description":"Logic analyzer on ESP32 for self-diagnostics","archived":false,"fork":false,"pushed_at":"2024-11-24T06:08:42.000Z","size":1042,"stargazers_count":88,"open_issues_count":0,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-02T09:08:15.435Z","etag":null,"topics":["esp-idf","esp32","esp32c3","esp32s3"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ok-home.png","metadata":{"files":{"readme":"README-RU.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-02T05:33:16.000Z","updated_at":"2025-03-25T16:51:33.000Z","dependencies_parsed_at":"2024-05-05T02:29:52.522Z","dependency_job_id":"dd756498-c11a-4bdc-9454-4a4e2fefdbc0","html_url":"https://github.com/ok-home/logic_analyzer","commit_stats":{"total_commits":192,"total_committers":1,"mean_commits":192.0,"dds":0.0,"last_synced_commit":"394e468763452437da7000b3026cbb9b699e65c1"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ok-home%2Flogic_analyzer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ok-home%2Flogic_analyzer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ok-home%2Flogic_analyzer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ok-home%2Flogic_analyzer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ok-home","download_url":"https://codeload.github.com/ok-home/logic_analyzer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248027411,"owners_count":21035594,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esp-idf","esp32","esp32c3","esp32s3"],"created_at":"2024-09-24T13:31:23.163Z","updated_at":"2025-04-09T11:11:57.821Z","avatar_url":"https://github.com/ok-home.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"[En](/README.md)\n\n| Supported Targets |  \n| ESP32    ESP32S3 ESP32C3 | \n| ----------------- |\n\n# Логический анализатор на ESP32 для самодиагностики\n - Нет необходимости покупать и подключать внешний логичекий анализатор\n - Подключается как компонент к вашей программе ( ESP IDF )\n - Вывод информации на WEB интерфейс или Sigrok PulseView\n - Поддерживаемые SOC -\u003e ESP32, ESP32S3, ESP32C3\n\n![WebSocket](/la_ws.jpg)\n![PulseView](/sigrok_esp.jpg)\n\n## Основные параметры\n|                      | Channels | Max\u003cbr\u003eSample\u003cbr\u003eCount(2) | Max\u003cbr\u003eSample\u003cbr\u003eRate | ESP\u003cbr\u003eModule |        Free GPIO \u0026 Clock Source\u003cbr\u003eRequired        |\n|:--------------------:|:--------:|:-------------------------:|:---------------------:|:-------------:|:--------------------------------------------------:|\n|         ESP32        |    16    |          50 000           |         40 MHz        |   I2S0/I2S1   | NO                                                 |\n|        ESP32S3       |  8\u003cbr\u003e16 |     140 000\u003cbr\u003e70 000     |    80 MHz\u003cbr\u003e40 MHz   |    LCD_CAM    | One Free GPIO\u003cbr\u003eOne LEDC Channel for slow PCLK(3) |\n| ESP32S3\u003cbr\u003ePSRAM8(1) |  8\u003cbr\u003e16 |   8 000 000\u003cbr\u003e4 000 000  |    10 MHz\u003cbr\u003e5 MHZ    |    LCD_CAM    | One Free GPIO\u003cbr\u003eOne LEDC Channel for slow PCLK(3) |\n|       ESP32C3(4)     |    4     |          60 000           |         80 MHz        |    GPSPI2     | NO                                                 |\n\n1. Не рекомендую использовать этот режим без необходимости. PSRAM сильно нагружает SPI шину, возможны артефакты и задержки в работе основной программы. Для корректной работы с Кэшем требуется ESP IDF ver 5.2 ( в текущей версии master branch )\n2. Максимальное количество сэмплов зависит от количества свободной памяти при работе вашей программы, анализатор ограничит количество сэмплов и вернет максимально возможное.\n3. ESP32S3 -\u003e требуется один, никуда не подключенный вывод GPIO для сигнала PCLK, для частоты сэмплов меньше 1 MHz - можно разрешить подключение 1 канала LEDC\n4. ESP32C3 -\u003e триггер не использует HiLevel прерывания, Задержка от триггера до начала данных 1,3-1,5 мкСек. SUMP работает врежиме 8 каналов, старшие 4 канала не используются.\n\n - 1 канал триггера захвата. Триггер организован на прерываниях по фронтам. В ESP32 прерывания обрабатываются примерно 2 мкСек (rev0.1) - Соответственно задержка от триггера до начала данных, около 2-х мкСек. В текущих версиях триггер переведен на Hilevel прерывания ( level 5 ), Задержка от триггера до начала данных уменьшена до 0,3 мкСек.\n - Все настройки режимов вынесены в Menuconfig. Каналы, Триггер, Частота сэмплов дополнительно настраивается в WEB интерфейсе\n - Анализатор позволяет работать на измеряемом устройстве. Устанавливаем софт на пациента, как стандартный внешний компонент ESP IDF, настраиваем GPIO на каналы ( проверено - GPIO, I2C, I2S, SPI, LED PWM, IRQ_GPIO, UART, USB, думаю что остальное также будет работать ), показывает как входные так и выходные сигналы пациента. Ограничения по триггеру в этом режиме - нельзя назначить триггер на пин (GPIO) у которого назначено прерывание на софте пациента ( анализатор перенастроит на себя ) - в последней версии (interrupt level 5) ограничение частично снято, но триггер будет срабатывать по тем фронтам(уровням), которые назначены на софте пациента.\n - Можно сделать анализатор как отдельное устройство, но не вижу особого смысла На рынке достаточное количество дешевых аналогов с похожими харатеристиками. Основное преимущество самодиагностики - подключили компонет к проекту и смотрим, что там происходит. Понятно что софт пациента может уже использовать всю память - тогда сильно уменьшится объем сэмплов - но хотя бы уровни и небольшое количество отсчетов все равно увидим.\n  ## Простой web интерфейс\n  - Подключение совсем без проводов\n  - Простая настройка GPIO на каналы\n  - Переключение количества каналов 8/16 и использования PSRAM\n  - Просмотр сэмплов ( без анализатора протоколов )\n  - Сохранение данных в .bin формате который потом можно при необходимости передать в Sigrok PulseView.\n  ## В качестве визуализации и анализатора протоколов можно использовать Sigrok PulseView \n  - Открытый софт\n  - Много анализаторов протокола\n  - при прямом (SUMP) подключении используется UART для получения данных, протокол передачи \"Openbench logic Sniffer \u0026 SUMP\"\n  - по умолчанию используется UART0 ESP32 можно ( а лучше нужно ) использовать другой порт, если он есть на вашем устройстве. Можно настроить в menuconfig. \n  - можно использовать ( рекомендую ) сохраненные данные из WEB интерфейса rawBin\n  - рекомендую использовать прямое подключение к SUMP/Sigrok PulseView только при дефиците ресурсов ( Rom/Ram ). SUMP протокол очень маленький по объему кода.\n  ## Известные баги\n  - при использовании SUMP/Sigrok UART0 - необходимо отключить  весь дигностический вывод ESP32 (LOG LEVEL - NONE ), это не баг но существенное ограничение.\n  - PulseView - для получения данных нужно нажать RUN 2 раза с интервалом 1-2 секунды ( причину не знаю )\n  - PulseView - в режиме триггера не работает с кадрами меньше 1к ( причину не знаю )\n  - PulseView - не принимает параметр максимальной частоты сэмплов - легко увидите частоты 50/100/200 мегаГерц.\n  - PulseView - не работает предвыборка триггера ( ставим 0% ) - просто не делал, и в текущей архитектуре невозможно.\n  - PulseView - невозможно поставить частоту выборки 40-80 MHz\n  # Подключение LogicAnalyzer к проекту как компонент\n   - смотрим документацию в ESP IDF - https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/build-system.html#example-project\n   - в качестве примера - https://github.com/ok-home/logic_analyzer/tree/master/logic_analyzer_example\n  # Подключение PulseView\n  - Connect to device\n  - Choose the driver - Openbench logic Sniffer \u0026 SUMP\n  - Serial Port - Speed - 921600 ( скорость можно переопределить, на моем кабеле работает на этой скорости )\n  - Scan for Device - должен появиться ESP32 with 8/16 channels\n  - Дальше читаем руководство по PulseView.\n  - Для чтения .bin файлов - просто импорт rawBin, 8/16 каналов, нужная частота сэмплов.\n  # Подключение Web интерфейса - заходим на страничку по адресу http://xxx.xxx.xxx.xxx/la\n  # Интерфейс программы\n  ## Условно состоит из 3-х частей\n  ### include/logic_analyzer_hal.h\n  - Получает сэмплы в буфер ESP32\n  - logic_analyzer_config_t - конфигурация захвата\n  - start_logic_analyzer(logic_analyzer_config_t *config) - старт захвата\n  - void (*logic_analyzer_cb_t)(uint8_t *samle_buf, int samples, int sample_rate) - каллбэк после захвата данных\n  ### include/logic_analyzer_sump.h\n  - работа с PulseView \n  - logic_analyzer_sump(); \n  ### include/logic_analyzer_ws_server.h\n  - Стартуем web сервер с поддержкой websocket - проверить в menuconfig поддержку websocket\n  - logic_analyzer_ws_server()\n  ### include/logic_analyzer_ws.h\n  - если на вашем устройстве уже установлен сервер с поддержкой websocket - просто зарегистрируйте uri handler\n  - logic_analyzer_register_uri_handlers(httpd_handle_t server);\n  ## Пример с тестовыми сэмплами\n  ### logic_analyzer_example\n  - test_sample_init() - включает простой генератор на 100 килогерц, пачку GPIO имульсов с большой скважностью и пачку GPIO импульсов сформированных по прерываниям. Никаких дополнительных подключений, проводков и пр. не нужно, уже будет показывать внутренности. При желании можете поставить 2 перемычки на пины - продублирует сигналы на GPIO.\n  - вишенка на торте - подключаемся любым каналом на TXD0 и смотрим свой же uart0 (только web)\n  ## Настройки вынесены в menuconfig\n   - Общие настройки\n     - ANALYZER_USE_HI_LEVEL_INTERRUPT - триггер через прерывания высокого уровня\n     - ANALYZER_SEPARATE_MODE           - для работы как отдельное устройство ( своя настройка GPIO )\n     - ANALYZER_USE_WS                  - использовать WEB интерфейс\n     - ANALYZER_USE_SUMP                - подключаться непосредственно к PulseView по COM порту\n     - ANALYZER_USE_PORT_ASSIGN         - настроить каналы по умолчанию (Каналы, триггер, частота количество сэмплов, Количество каналов, использоввание PSRAM)\n   - Настройки для ESP32\n     - ANALYZER_USE_I2S_CHANNEL         - используемый канал I2S ( 0/1 )\n   - Настройки для ESP32S3\n     - ANALYZER_PCLK_PIN                - номер GPIO для транзита PCLK\n     - ANALYZER_USE_LEDC_TIMER_FOR_PCLK - подключать канал LEDC для частоты сэмплов меньше 1 MHz\n   \n  ## Для использования Hi-level interrupt необходимо в menuconfig поставить CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL = ESP_SYSTEM_CHECK_INT_LEVEL_4\n\n  ## Добавлен CLI интерфейс для стабильной работы с PulseView при ограничении RAM\n   - минимальное потребление RAM\n   - простой скрипт logic_analyzer_cli/logic_analyzer_cli.py для сохранения сэмплов в RowBin файл (необходимо добавить зависимость PySerial)\n   - параметры скрипта задаются в файле la_cfg.json ( шаблон файла создается автоматически при первом запуске скрипта), GPIO,TRIGGER,TRBGGER EDGE,SAMPLES,SAMPLE RATE,NUMBER CHANNELS,RAM/PSRAM.\n   - подключение к коду программы\n     - logic_analyzer_cli/include/logic_analyzer_cli.h\n     - установить в menuconfig ANALYZER_USE_CLI и параметры UART/USB_SERIAL_JTAG\n     - скомпилировать и загрузить код программы с подключеным logic_analyzer\n     - подключиться к UART/USB\n     - запустить logic_analyzer_cli.py с установлеными параметрами в файле la_cfg.json\n    - подключение к PulseView\n     - Import Raw binary logic data  - файл который создается скриптом\n     - задание количества каналов и частоты сэмплов при первом импорте (esp32c3 - ставим 8 каналов, используются 4 младших ), в дальнейшем если эти параметры не меняются достаточно сделать Reload\n   - для UART0 те же ограничения как для SUMP интерфейса\n   - преимущества перед SUMP интерфейсом\n     - смотрим выше известные баги PulseView - здесь их нет (кроме UART0)\n     - простая настройка GPIO на каналы через la_cfg.json\n\n![вывод cli интерфейса](/la_cli.jpg)\n\n## В проекте использованы части кода\n - [esp32-cam](https://github.com/espressif/esp32-camera) for I2S DMA\n - [EUA/ESP32_LogicAnalyzer](https://github.com/EUA/ESP32_LogicAnalyzer) for SUMP\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fok-home%2Flogic_analyzer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fok-home%2Flogic_analyzer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fok-home%2Flogic_analyzer/lists"}