ESP32 JTAG-отладка

Материал из ВИКИЦМИТ
Перейти к навигации Перейти к поиску

В этой статье рассказывается, как установить среду отладки OpenOCD для ESP32 и как использовать GDB для отладки приложений ESP32.

Примечание

Вы также можете использовать для отладки ESP32 без настройки JTAG или OpenOCD. См. Монитор IDF и CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME .idf.py monitor

Этот документ структурирован следующим образом:

введение
Представляет цель данного руководства.
Принцип работы
Расскажите, как ESP32, интерфейс JTAG (Joint Test Action Group), OpenOCD и GDB связаны друг с другом для реализации функции отладки ESP32.
Выберите адаптер JTAG
Представляет выбор и эталонные стандарты аппаратных адаптеров JTAG.
УстановитьOpenOCD
Расскажите, как установить официальный предварительно скомпилированный пакет программного обеспечения OpenOCD и проверьте, прошла ли установка успешно.
Настройте целевую плату ESP32
Описывает, как настроить программное обеспечение OpenOCD и установить оборудование JTAG, которые вместе составляют цель отладки.
Запустить отладчик
Описывает, как запустить сеанс отладки GDB из интегрированной среды разработки Eclipse и терминала командной строки .
Пример отладки
Если вы новичок в GDB, ознакомьтесь с этим разделом, где представлены примеры отладки, предоставляемые интегрированной средой разработки Eclipse и терминалом командной строки .
Сборка OpenOCD из исходного кода
Описывает, как собрать OpenOCD из исходного кода в операционных системах Windows , Linux и macOS .
Примечания и дополнительный контент
Представляет меры предосторожности и дополнительный контент при использовании OpenOCD и GDB для отладки ESP32 через интерфейс JTAG.

Введение

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

Напротив, из-за отсутствия соответствующих инструментов простые методы программирования также могут создавать трудности при отладке программы, например, при обнаружении ошибок, вызванных одновременной работой двух потоков на разных ядрах ЦП. Тогда printfпоиск ошибки сам по себе займет много времени. . Лучший (и часто более быстрый) способ отладки таких проблем — использовать отладчик, подключенный к порту отладки процессора.

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

В этой статье рассказывается, как установить OpenOCD для ESP32 в средах Linux, Windows и macOS, а также использовать GDB для отладки программного обеспечения. За исключением некоторых различий в процессе установки, пользовательский интерфейс программного обеспечения и процесс использования одинаковы для всех операционных систем.

Примечание

Изображения, использованные в этой статье, взяты из снимков экрана программного обеспечения Eclipse Neon 3 в Ubuntu 16.04 LTS. Различные операционные системы (Windows, macOS или Linux) или разные версии программного обеспечения Eclipse могут иметь небольшие различия в пользовательском интерфейсе.

Принцип работы

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

Флаг «Загрузка и мониторинг приложений» отображает набор ключевых программных и аппаратных компонентов, которые можно использовать для компиляции, сборки и прошивки приложений на ESP32, а также для отслеживания диагностической информации во время выполнения из ESP32.

Среда Eclipse объединяет функции отладки JTAG, загрузки и мониторинга приложений, что делает итерационный процесс написания программного обеспечения, компиляции, загрузки и отладки быстрее и проще. Eclipse IDE и встроенное программное обеспечение для отладки доступны на платформах Windows, Linux и macOS.  и  непосредственно в терминале командной строки .

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

Выберите адаптер JTAG

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

Если вы хотите использовать отдельный адаптер JTAG, убедитесь, что он совместим как с уровнями напряжения ESP32, так и с программным обеспечением OpenOCD. ESP32 использует стандартный интерфейс JTAG, который не использует (фактически не нуждается) сигнальный вывод TRST. Выводы ввода-вывода, используемые JTAG, питаются от вывода питания VDD_3P3_RTC (обычно подключенного к внешней шине питания 3,3 В), поэтому выводы аппаратного адаптера JTAG должны иметь возможность правильно работать в этом диапазоне напряжений.

Что касается программного обеспечения, OpenOCD поддерживает значительное количество адаптеров JTAG, пожалуйста, обратитесь к списку адаптеров, поддерживаемых OpenOCD (обратите внимание, что этот список не является полным), в котором также перечислены адаптеры, совместимые с интерфейсом SWD, но обратите внимание, что ESP32 в настоящее время не поддерживает SWD. Кроме того, адаптеры JTAG, которые жестко запрограммированы для поддержки только определенных линеек продуктов, не будут работать с ESP32, например адаптеры ST-LINK, предназначенные только для продуктов серии STM32.

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

ESP-Prog показывает пример отладки с использованием внешней платы путем подключения ее к контактам JTAG ESP32.

УстановитьOpenOCD

Если вы завершили установку ESP-IDF и его системы сборки CMake согласно быстрому старту , то OpenOCD установлен в вашей системе разработки по умолчанию. После настройки среды разработки вы сможете запустить в терминале следующую команду OpenOCD:

openocd --version

Терминал выведет следующую информацию (актуальный номер версии может быть обновлен):

Open On-Chip Debugger  v0.10.0-esp32-20190708 (2019-07-08-11:04)
Licensed under GNU GPL v2
For bug reports, read
    https://openocd.org/doc/doxygen/bugs.html

Вы также можете проверить OPENOCD_SCRIPTSзначение переменной среды, чтобы подтвердить путь к файлу конфигурации OpenOCD.Пользователи Linux и macOS могут ввести его в терминале , а пользователи Windows должны ввести его . Если терминал выводит правильный путь, это означает, что OpenOCD установлен правильно.echo $OPENOCD_SCRIPTSecho %OPENOCD_SCRIPTS%

Если вы не можете выполнить описанные выше действия, прочитайте Краткое руководство еще раз и обратитесь к главе «Настройка средств установки» .

Примечание

Альтернативно вы можете скомпилировать инструмент OpenOCD из исходного кода.Подробную информацию см. в главе «Создание OpenOCD из исходного кода» .

Настройте целевую плату ESP32

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

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

Настройте и подключите интерфейс JTAG

Этот шаг зависит от используемых плат JTAG и ESP32. См. следующие два случая.

ЗапуститьOpenOCD

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

Откройте терминал, следуйте инструкциям в Кратком руководстве по настройке среды разработки , а затем выполните следующую команду, чтобы запустить OpenOCD (эта команда доступна для Windows, Linux и macOS):

openocd -f board/esp32-wrover-kit-3.3v.cfg

Примечание

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

Теперь вы должны увидеть следующий вывод (этот журнал взят с платы разработки ESP-WROVER-KIT со встроенным модулем ESP32-WROOM-32):

user-name@computer-name:~/esp/esp-idf$ openocd -f board/esp32-wrover-kit-3.3v.cfg
Open On-Chip Debugger  v0.10.0-esp32-20190708 (2019-07-08-11:04)
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).
  • Если вы получаете сообщение об ошибке, указывающее на проблему с разрешениями, откройте ~/esp/openocd-esp32каталог и просмотрите инструкции «Делегирование разрешений» в файле README OpenOCD.
  • Если вы столкнулись с ошибкой, связанной с невозможностью найти файл конфигурации, например , проверьте , правильно ли установлена ​​переменная среды. OpenOCD использует эту переменную для поиска указанного файла. Подробности см. в разделе «Установка OpenOCD» . Кроме того, вам необходимо убедиться, что файл конфигурации действительно находится по этому пути.Can't find board/esp32-wrover-kit-3.3v.cfgOPENOCD_SCRIPTS-f
  • Если возникает ошибка JTAG (например, выходной сигнал или ) , убедитесь, что аппаратные соединения верны, что к JTAG не подключены другие сигналы, кроме контактов ESP32, и что все устройства включены....all ones...all zeroes

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

Выполните обычные шаги для сборки и загрузки приложения ESP32. Подробную информацию см. в разделе «Шаг 5. Начало использования ESP-IDF» .

Кроме того, вы также можете использовать OpenOCD для записи образа приложения во флэш-память через интерфейс JTAG. Команда выглядит следующим образом:

openocd -f board/esp32-wrover-kit-3.3v.cfg -c "program_esp filename.bin 0x10000 verify exit"

Формат команды программирования OpenOCD program_espследующий:

program_esp <image_file> <offset> [verify] [reset] [exit] [compress] [encrypt]

  • image_file- Путь, по которому хранится файл образа программы.
  • offset- Адрес смещения образа, записанного во флэшку
  • verify- Проверьте содержимое флэш-памяти после завершения программирования (опционально)
  • reset- Перезапустите цель после завершения программирования (опционально).
  • exit- Выйдите из OpenOCD после завершения программирования (необязательно)
  • compress- Сжимайте файл изображения перед записью (необязательно).
  • encrypt- Шифрование двоичных файлов перед записью на флэш-память, та же функция, что и (опционально)idf.py encrypted-flash

Теперь вы можете отлаживать приложение, следуя инструкциям в следующих разделах.

Запустить отладчик

Цепочка инструментов ESP32 включает отладчик GNU (сокращенно GDB), который хранится в xtensa-esp32-elf-gdb вместе с другим программным обеспечением цепочки инструментов. Помимо прямого вызова и работы с GDB в терминале командной строки, вы также можете вызвать его в IDE (например, Eclipse, Visual Studio Code и т. д.) и использовать графический интерфейс пользователя для косвенного управления GDB. Этот метод не требует ввод любых команд в терминале.

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

Рекомендуется сначала проверить, может ли отладчик нормально работать под терминалом командной строки , а затем использовать интегрированную среду разработки Eclipse для отладки.

Пример отладки

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

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

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

Примечание

Отладка объектов FreeRTOS в настоящее время работает только с отладкой из командной строки.

Перед демонстрацией завершите настройки целевой платы ESP32 и загрузите команду « Начало работы/blink» в ESP32.

Сборка OpenOCD из исходного кода

В следующих документах описано, как собрать OpenOCD из исходного кода на каждой платформе операционной системы.

OpenOCD, используемый в демонстрации этого документа, представляет собой предварительно скомпилированный двоичный дистрибутив, который представлен в главе «Установка OpenOCD» .

Если вы хотите использовать программу OpenOCD, скомпилированную локально из исходного кода, вам необходимо изменить путь к соответствующему исполняемому файлу src/openocdи установить OPENOCD_SCRIPTSпеременную среды, чтобы OpenOCD мог найти файл конфигурации. Пользователи Linux и macOS могут:

cd ~/esp/openocd-esp32
export OPENOCD_SCRIPTS=$PWD/tcl

Пользователи Windows могут:

cd %USERPROFILE%\esp\openocd-esp32
set "OPENOCD_SCRIPTS=%CD%\tcl"

Для пользователей Linux и macOS пример запуска локально скомпилированного OpenOCD:

src/openocd -f board/esp32-wrover-kit-3.3v.cfg

Примеры для пользователей Windows:

src\openocd -f board\esp32-wrover-kit-3.3v.cfg

Примечания и дополнительный контент

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

  • Примечания и дополнительный контент
    • Доступные точки останова и точки наблюдения
    • Дополнительные знания о точках останова
    • сопоставление флэш-памяти и программные точки останова флэш-памяти
    • Причина, по которой команда «следующий» не может пропустить подпрограммы
    • Параметры времени компиляции, поддерживаемые OpenOCD
    • Поддержка FreeRTOS
    • Установите рабочее напряжение флэш-памяти SPI в файле конфигурации OpenOCD.
    • Оптимизация скорости JTAG
    • Значение команды запуска отладчика
    • Настройте OpenOCD в соответствии с целевым чипом
    • Сброс ESP32
    • Можно ли использовать контакты JTAG для других функций?
    • JTAG и флэш-шифрование и безопасная загрузка
    • Проблемы совместимости прошивок JTAG и ESP32-WROOM-32 AT
    • Сообщить о проблеме с OpenOCD/GDB