JTAG отладка ESP32

Документ содержит руководство по установке OpenOCD для ESP32 и отладке с использованием GDB в Linux, Windows и MacOS. В Руководстве также представлены примеры отладки, предоставленные как для Eclipse, так и для Командной Строки, дана подборка советов и рассмотрены особенности, связанные с отладкой JTAG ESP32 с OpenOCD и GDB
574
В избранное

Введение

Микросхема ESP32 имеет два мощных ядра Xtensa, что позволяет использовать множество программных архитектур. Операционная система FreeRTOS, поставляемая с ESP-IDF, поддерживает многоядерную вытесняющую многопоточность, делая возможным разрабатывать программное обеспечение интуитивно понятным способом.

Недостаток простого программирования заключается в том, что отладка без эффективных инструментов сложнее: выявление ошибки, вызванной двумя потоками, работающими одновременно на двух разных ядрах CPU, может занять много времени, когда все, что у вас есть – это оператор printf. Лучший и во многих случаях более быстрый способ устранения таких проблем – использование отладчика, подключенного к процессорам через порт отладки.

Компания Espressif портировала OpenOCD для поддержки процессора ESP32 и multicore FreeRTOS (RTOS с поддержкой многоядерных процессоров), которая станет основой большинства приложений ESP32. Также компания разработала ряд инструментов, которые помогут с функциями, которые OpenOCD изначально не поддерживает.

Этот документ содержит руководство по установке OpenOCD для ESP32 и отладке с использованием GDB в Linux, Windows и MacOS. За исключением особых процедур установки ОС, пользовательский интерфейс s/w и процедуры использования ПО одинаковы для всех поддерживаемых операционных систем.

Примечание. Скриншоты, представленные в этом документе, были сделаны для Eclipse Neon 3, работающей на Ubuntu 16.04 LTE. Могут быть небольшие отличия в том, как выглядит конкретный пользовательский интерфейс, в зависимости от того, используете ли вы Windows, MacOS или Linux и/или другой релиз Eclipse.  

Как это работает? 

Основные программные и аппаратные средства для выполнения отладки ESP32 с OpenOCD через интерфейс JTAG (Joint Test Action Group) представлены ниже и включают в себя отладчик xtensa-esp32-elf-gdb, отладчик OpenOCD на чипе и адаптер JTAG, подключенный к целевой микросхеме ESP32.

Обзорная схема отладки через JTAG

Рис. 1. Обзорная схема отладки через JTAG

Согласно «Application Loading and Monitoring (Загрузка приложений и мониторинг)» существует другое программное и аппаратное обеспечение для компиляции, сборки и прошивки приложений в ESP32, а также для предоставления средств мониторинга диагностических сообщений от ESP32.

Отладка с использованием JTAG и загрузка/мониторинг приложений интегрированы в среду Eclipse, чтобы обеспечить быстрый и простой переход от написания, компиляции и загрузки кода к отладке, и обратно к написанию кода, и так далее. Все программное обеспечение доступно для платформ Windows, Linux и MacOS.

Если используется ESP-WROVER-KIT, то соединение от ПК к ESP32 эффективно осуществляется с помощью одного USB-кабеля, благодаря микросхеме FT2232H, установленной на WROVER, которая обеспечивает два USB-канала: один для JTAG и второй для подключения UART.

В зависимости от предпочтений пользователя, отладка и сборка (make) могут работать непосредственно из терминала/ командной строки, а не из Eclipse. 

Выбор JTAG адаптера 

Самый быстрый и удобный способ начать  JTAG отладку - использовать ESP-WROVER-KIT. Каждая версия этой отладочной платы имеет уже встроенный интерфейс JTAG. Нет необходимости во внешнем адаптере JTAG и в подключении дополнительных проводов/ кабелей JTAG к ESP32. WROVER KIT использует интерфейс JTAG FT2232H, работающий на тактовой частоте 20 МГц, чего трудно добиться с помощью внешнего адаптера.

Если вы решите использовать отдельный адаптер JTAG, ищите тот, который совместим как с уровнями напряжений  ESP32, так и с программным обеспечением OpenOCD. Порт JTAG на ESP32 – это порт JTAG индустриального стандарта, в котором отсутствует (и не требуется) пин TRST. Все пины I/O JTAG питаются от вывода VDD_3P3_RTC (который обычно питается от шины 3.3 В), поэтому JTAG адаптер должен иметь возможность работать с выводами JTAG в этом диапазоне напряжений.

Что касается программного обеспечения, OpenOCD поддерживает достаточное количество адаптеров JTAG. См. список адаптеров (к сожалению, немного неполный), с которыми работает OpenOCD на http://openocd.org. На этой странице также перечислены SWD-совместимые адаптеры, обратите внимание, что ESP32 не поддерживает SWD. JTAG-адаптеры, которые жестко привязаны к конкретной линейке продуктов, например, ST-LINK для семейств STM32, работать не будут.

Минимальный набор сигналов для работы JTAG – TDI, TDO, TCK, TMS и GND. Некоторым отладчикам JTAG также требуется подключение к линии питания ESP32, которая может называться, например, Vtar. При желании сигнал SRST может быть подключен к CH_PD ESP32, хотя на данный момент поддержка OpenOCD для этой линии минимальна.

Установка OpenOCD 

Этот шаг охватывает установку двоичных файлов OpenOCD. Если вы желаете собрать OpenOCD из исходников, обратитесь к разделу Сборка OpenOCD из Исходников. Все OpenOCD файлы будут размещены в директории ~/esp/openocd-esp32. Вы можете выбрать любую другую директорию, но необходимо настроить соответствующие пути, используемые в примерах.

Выберите вашу операционную систему ниже и следуйте инструкциям по установке OpenOCD.

Windows Linux MacOS
Windows  Linux  MacOS

После завершения установки ознакомьтесь с двумя ключевыми каталогами в папке установки openocd-esp32:

  • Bin, содержащий OpenOCD исполнимый файл
  • share\openocd\scripts, содержащий файлы конфигурации, вызываемые вместе с OpenOCD в качестве параметров командной строки

Примечание 

Названия и структура директорий, приведенных выше, относятся к двоичному дистрибутиву OpenOCD. Они используются в этом руководстве в примерах вызовов OpenOCD. Директории для сборки OpenOCD из исходников разные. Для получения дополнительной информации см. "Сборка OpenOCD из исходников".

Конфигурирование целевой ESP32

После установки OpenOCD перейдите к настройке целевой ESP32 (т. е. платы ESP32 с интерфейсом JTAG). Сделать это можно в три шага:

  1. Настроить и подключить интерфейс JTAG
  2. Запустите OpenOCD
  3. Загрузить приложение для отладки

Конфигурирование и подключение интерфейса JTAG

Этот шаг зависит от используемой платы ESP32 и JTAG  - см. два случая, описанных ниже.

Запуск OpenOCD

После того, как целевая плата настроена и подключена к компьютеру, можно запускать OpenOCD.

Откройте терминал, перейдите в директорию, в которую инсталлирован OpenOCD и запустите его:

cd ~/esp/openocd-esp32
bin/openocd -s share/openocd/scripts -f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp-wroom-32.cfg

Примечание

Файлы, указанные выше после -f, относятся к ESP-WROVER-KIT с модулем ESP32-WROOM-32. Вам может потребоваться предоставить другие файлы в зависимости от используемого аппаратного обеспечения. Для получения дополнительной информации см. "Конфигурирование OpenOCD для конкретного целевого устройства".

Примечание

Если вы установили openocd в Windows с помощью установщика ESP-IDF Tools, можно запустить openocd -f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp-wroom-32.cfg без необходимости сначала изменять каталог и без аргумента -s share/openocd/scripts.

Теперь вы должны увидеть на выходе лог, подобный приведенному ниже (этот лог предназначен для ESP-WROVER-KIT):

user-name@computer-name:~/esp/openocd-esp32$ bin/openocd -s share/openocd/scripts -f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp-wroom-32.cfg
Open On-Chip Debugger 0.10.0-dev-ged7b1a9 (2017-07-10-07:16)
Licensed under GNU GPL v2
For bug reports, read             
        http://openocd.org/doc/doxygen/bugs.html
none separate
adapter speed: 20000 kHz
force hard breakpoints
Info : ftdi: if you experience problems at higher adapter clocks, try the command "ftdi_tdo_sample_edge falling"
Info : clock speed 20000 kHz
Info : JTAG tap: esp32.cpu0 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1)
Info : JTAG tap: esp32.cpu1 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1)
Info : esp32: Debug controller was reset (pwrstat=0x5F, after clear 0x0F).
Info : esp32: Core was reset (pwrstat=0x5F, after clear 0x0F).

  • Если есть ошибка, указывающая на проблемы с разрешениями, см. бит «Делегирование разрешений» в файле README OpenOCD в директории ~/esp/openocd-esp32.
  • В случае ошибки поиска конфигурационных файлов, например, его не удается найти Can'tfind interface/ftdi/esp32_devkitj_v1.cfg, проверьте путь после -s. Этот путь используется OpenOCD для поиска файлов, указанных после -f. Также проверьте, действительно ли файл находится по указанному пути.
  • Если вы видите ошибки JTAG (...все единицы/ ...все нули), пожалуйста, проверьте ваши подключения, нет ли других сигналов, подключенных к JTAG, кроме сигналов ESP32, и посмотрите, включено ли питание.

Загрузка приложения для отладки

Сборка и загрузка приложения в ESP32 осуществляется обычным путем, см. раздел "Сборка и Прошивка".

Другие опции для записи образа приложения во флэш через JTAG, используя OpenOCD  с такими командами:

cd ~/esp/openocd-esp32
bin/openocd -s share/openocd/scripts -f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp-wroom-32.cfg -c "program_esp32 filename.bin 0x10000 verify exit"

Примечание

Если вы установили openocd в Windows с помощью установщика ESP-IDF Tools, можно запустить openocd -f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp-wroom-32.cfg без необходимости сначала изменять каталог и без аргумента -s share/openocd/scripts.

Команда OpenOCD прошивки program_esp32 имеет следующий формат:

program_esp32 <image_file> <offset> [verify] [reset] [exit]

  • image_file – Путь к файлу образа.
  • offset – Смещение в банке памяти  флэш для записи образа.
  • verify – Опционально. Верификация содержимого флэш-памяти после записи.
  • reset – Опционально. Сброс целевого устройства после программирования.
  • exit – Опционально. Финальный выход из OpenOCD.

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

Запуск Отладчика 

Набор инструментов (Тулчеин) для ESP32 содержит GNU Отладчик, сокр. GDB – GNU Debugger. Он доступен с другими программами toolchain под именем файла xtensa-esp32-elf-gdb. GDB может быть вызван и работать напрямую из командной строки терминала. Другой вариант – вызвать его из IDE (например, Eclipse, Visual Studio Code и т. д.) и работать косвенно с помощью графического интерфейса пользователя (GUI) вместо ввода команд в терминале.

Оба варианта использования отладчика обсуждаются по ссылкам ниже:

Примеры Отладки 

Этот раздел предназначен для пользователей, не знакомых с GDB. Он представляет пример сеанса отладки из Eclipse с использованием простого приложения, доступного в разделе get-started/ blink, и охватывает следующие действия отладки:

  1. Навигация по коду, стек вызовов и потоки
  2. Установка и удаление точек останова
  3. Остановка целевого устройства вручную
  4. Пошаговое выполнение кода
  5. Проверка и настройка памяти
  6. Просмотр и установка программных переменных
  7. Установка условных точек останова

Аналогичные действия по отладке выполняются с помощью GDB из командной строки.

Прежде чем перейти к примерам, настройте целевую плату с ESP32 и загрузите ее с помощью get-started/blink.

Сборка OpenOCD из Исходников 

Пожалуйста, обратитесь к отдельным документам, перечисленным ниже, которые описывают процесс сборки:

Примечание 

Примеры вызова OpenOCD в этом документе предполагают использование готового бинарного дистрибутива, описанного в разделе "Установка OpenOCD". Чтобы использовать двоичные файлы, создаваемые локально из исходных кодов, измените путь к исполняемому файлу OpenOCD  в src/openocd, а путь к файлам конфигурации на -s tcl.

Пример локального вызова сборки OpenOCD из исходников:

src/openocd -s tcl -f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp-wroom-32.cfg

Рекомендации и особенности

Этот раздел содержит коллекцию ссылок на все рекомендации и особенности, упомянутые в различных частях этого руководства.

Связанные документы 

Источник: https://docs.espressif.com

Производитель: Espressif Systems (shanghai) Pte. Ltd.
Наименование
Производитель
Описание Корпус/
Изображение
Цена, руб. Наличие
ESP32-WROOM-32 [4MB]
ESP32-WROOM-32 [4MB]
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2292549 ИНФО PDF DT
Доступно: 641 шт. 398,00
Базовый модуль, использующий высокопроизводительную микросхему ESP32-D0WDQ6 с двухъядерным процессором и максимальной рабочей частотой до 240 МГц. Микросхема ESP32-D0WDQ6 работает под управлением freeRTOS и использует стек LwIP, ESP32-D0WDQ6, 32Mbits SPI flash, UART Mode
ESP32-WROOM-32 [4MB] 398,00 от 10 шт. 341,00 от 22 шт. 307,00 от 46 шт. 284,00 от 121 шт. 270,00
83 шт.
(на складе)
558 шт.
(под заказ)
ESP-WROVER-KIT
ESP-WROVER-KIT
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2736589 ИНФО
Доступно: 92 шт. 3760,00
отладочная плата, предназначенная для создания высокопроизводительных устройств на базе модулей ESP32-WROVER. Плата отличается богатым набором периферии: LCD, RGB-светодиоды, Micro SD Card, разъем для подключения камеры, по 4 Мбайт Flash и PSRAM. Для загрузки и отладки программ предлагается использовать JTAG. Подключение по USB осуществляется с помощью моста USB-UART FT2232HL.
ESP-WROVER-KIT 3760,00 от 2 шт. 3220,00 от 3 шт. 2900,00 от 5 шт. 2680,00 от 13 шт. 2550,00
14 шт.
(на складе)
78 шт.
(под заказ)

Сравнение позиций

  • ()