
JTAG отладка ESP32
Введение
Микросхема 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.
Рис. 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 |
После завершения установки ознакомьтесь с двумя ключевыми каталогами в папке установки openocd-esp32:
- Bin, содержащий OpenOCD исполнимый файл
- share\openocd\scripts, содержащий файлы конфигурации, вызываемые вместе с OpenOCD в качестве параметров командной строки
Примечание
Названия и структура директорий, приведенных выше, относятся к двоичному дистрибутиву OpenOCD. Они используются в этом руководстве в примерах вызовов OpenOCD. Директории для сборки OpenOCD из исходников разные. Для получения дополнительной информации см. "Сборка OpenOCD из исходников".
Конфигурирование целевой ESP32
После установки OpenOCD перейдите к настройке целевой ESP32 (т. е. платы ESP32 с интерфейсом JTAG). Сделать это можно в три шага:
- Настроить и подключить интерфейс JTAG
- Запустите OpenOCD
- Загрузить приложение для отладки
Конфигурирование и подключение интерфейса 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, и охватывает следующие действия отладки:
- Навигация по коду, стек вызовов и потоки
- Установка и удаление точек останова
- Остановка целевого устройства вручную
- Пошаговое выполнение кода
- Проверка и настройка памяти
- Просмотр и установка программных переменных
- Установка условных точек останова
Аналогичные действия по отладке выполняются с помощью 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
Рекомендации и особенности
Этот раздел содержит коллекцию ссылок на все рекомендации и особенности, упомянутые в различных частях этого руководства.
- Доступные точки останова и наблюдения
- Что еще нужно знать о точках останова?
- Маппирование флэш vs Программные точки останова во флэш
- Почему шаги с использованием «next» не обходят вызовы подпрограмм?
- Параметры поддержки OpenOCD во время компиляции
- Поддержка FreeRTOS
- Зачем устанавливать напряжение SPI флэш в конфигурации OpenOCD?
- Оптимизация скорости JTAG
- Что означают команды запуска отладчика?
- Конфигурация OpenOCD для конкретного целевого устройства
- Как отладчик сбрасывает ESP32?
- Не используйте контакты JTAG для чего-то другого
- Отчеты о проблемах с OpenOCD / GDB
Связанные документы
- Использование отладчика
- Примеры отладки
- Рекомендации и особенности
- Библиотека трассировки уровня приложения
Источник: https://docs.espressif.com
Производители: ESPRES
Разделы: Приемо-передатчики
Опубликовано: 05.11.2019