天天看點

esp32 jtag 下載下傳_JTAG 調試 - ESP32-S2 - — ESP-IDF 程式設計指南 release-v4.2 文檔

JTAG 調試¶

本文将指導安裝 ESP32-S2 的 OpenOCD 調試環境,并介紹如何使用 GDB 來調試 ESP32-S2 的應用程式。本文的組織結構如下:

介紹本指南主旨。

介紹 ESP32-S2,JTAG(Joint Test Action Group)接口,OpenOCD 和 GDB 是如何互相連接配接進而實作 ESP32-S2 的調試功能。

介紹有關 JTAG 硬體擴充卡的選擇及參照标準。

介紹如何安裝官方預編譯好的 OpenOCD 軟體包并驗證是否安裝成功。

介紹如何設定 OpenOCD 軟體并安裝 JTAG 硬體擴充卡,這兩者共同組成最終的調試目标。

如果你對 GDB 不太熟悉,本小節會分别針對 Eclipse 內建開發環境 和 指令行終端 來講解調試的範例。

介紹如何在 Windows,Linux 和 MacOS 作業系統上從源碼建構 OpenOCD。

介紹使用 OpenOCD 和 GDB 通過 JTAG 接口調試 ESP32-S2 時的注意事項和補充内容。

引言¶

樂鑫已經為 ESP32-S2 處理器和多核 FreeRTOS 架構移植好了 OpenOCD,它将成為大多數 ESP32-S2 應用程式的基礎。此外,樂鑫還提供了一些 OpenOCD 本身并不支援的工具來進一步豐富調試的功能。

本文将指導如何在 Linux,Windows 和 MacOS 環境下為 ESP32-S2 安裝 OpenOCD,并使用 GDB 進行軟體調試。除了個别作業系統的安裝過程有所差别以外,軟體使用者界面和使用流程都是一樣的。

注解

本文使用的圖檔素材來自于 Ubuntu 16.04 LTS 上 Eclipse Neon 3 軟體的截圖,不同的作業系統(Windows, MacOS 或者 Linux)和 Eclipse 軟體版本在使用者界面上可能會有細微的差别。

工作原理¶

通過 JTAG(Joint Test Action Group)接口使用 OpenOCD 調試 ESP32-S2 時所需要的一些關鍵的軟體和硬體包括 xtensa-esp32s2-elf-gdb

調試器,OpenOCD 片上調試器 和連接配接到 ESP32-S2 目标的 JTAG 擴充卡。

esp32 jtag 下載下傳_JTAG 調試 - ESP32-S2 - — ESP-IDF 程式設計指南 release-v4.2 文檔

JTAG 調試 - 概述圖¶

在 “Application Loading and Monitoring” 下還有另外一組軟體和硬體,它們用來編譯、建構和燒寫應用程式到 ESP32-S2 上,以及監視來自 ESP32-S2 的運作診斷資訊。

Eclipse 環境內建了 JTAG 調試和應用程式加載、監視的功能,它使得軟體從編寫、編譯、加載到調試的疊代過程變得更加快速而簡單。所有的軟體均适用于 Windows,Linux 和 MacOS 平台。

如果你使用的是 ESP-S2-Kaluga-1,得益于闆載的 FT232H 晶片,PC 和 ESP32-S2 的連接配接僅僅需要一根 USB 線即可完成。FT232H 提供了兩路 USB 通道,一路連接配接到 JTAG,另一路連接配接到 UART。

根據使用者的喜好,除了使用 Eclipse 內建開發環境,還可以直接在指令行終端運作 debugger 和 idf.py build。

選擇 JTAG 擴充卡¶

上手 JTAG 最快速便捷的方式是使用 ESP-S2-Kaluga-1,因為它闆載了 JTAG 調試接口,無需使用外部的 JTAG 硬體擴充卡和額外的線纜來連接配接 JTAG 與 ESP32-S2。ESP-S2-Kaluga-1 采用 FT2232H 提供的 JTAG 接口,可以穩定運作在 20 MHz 的時鐘頻率,外接的擴充卡很難達到這個速度。

如果你想使用單獨的 JTAG 擴充卡,請確定其與 ESP32-S2 的電平電壓和 OpenOCD 軟體都相容。ESP32-S2 使用的是業界标準的 JTAG 接口,它省略了(實際上也并不需要)TRST 信号腳。JTAG 使用的 IO 引腳由 VDD_3P3_RTC 電源引腳供電(通常連接配接到外部 3.3 V 的電源軌),是以 JTAG 硬體擴充卡的引腳需要能夠在該電壓範圍内正常工作。

在軟體方面,OpenOCD 支援相當多數量的 JTAG 擴充卡,可以參閱 OpenOCD 支援的擴充卡清單 (盡管上面顯示的器件不太完整),這個頁面還列出了相容 SWD 接口的擴充卡,但是請注意,ESP32-S2 目前并不支援 SWD。此外那些被寫死為隻支援特定産品線的 JTAG 擴充卡也不能在 ESP32-S2 上工作,比如用于 STM32 産品家族的 ST-LINK 擴充卡。

JTAG 正常工作至少需要連接配接的信号線有:TDI,TDO,TCK,TMS 和 GND。某些 JTAG 擴充卡還需要 ESP32-S2 提供一路電源到擴充卡的某個引腳上(比如 Vtar)用以設定擴充卡的工作電壓。SRST 信号線是可選的,它可以連接配接到 ESP32-S2 的 CH_PD 引腳上,盡管目前 OpenOCD 對該信号線的支援還非常有限。

安裝 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

http://openocd.org/doc/doxygen/bugs.html

你還可以檢查 OPENOCD_SCRIPTS 環境變量的值來确認 OpenOCD 配置檔案的路徑,Linux 和 macOS 使用者可以在終端輸入 echo $OPENOCD_SCRIPTS,Windows 使用者需要輸入 echo %OPENOCD_SCRIPTS%。如果終端列印了有效的路徑,則表明 OpenOCD 已經被正确安裝。

如果上述步驟沒有成功執行,請傳回快速入門手冊,參考其中 設定安裝工具 章節的說明。

注解

另外,我們還可以從源代碼編譯 OpenOCD 工具,相關詳細資訊請參閱 從源碼建構 OpenOCD 章節。

配置 ESP32-S2 目标闆¶

安裝好 OpenOCD 之後就可以配置 ESP32-S2 目标(即帶 JTAG 接口的 ESP32-S2 闆),具體可以通過以下三個步驟進行:

配置并連接配接 JTAG 接口

運作 OpenOCD

上傳待調試的應用程式

配置并連接配接 JTAG 接口¶

此步驟取決于您使用的 JTAG 和 ESP32-S2 闆,請參考以下兩種情況。

運作 OpenOCD¶

配置完目标并将其連接配接到電腦後,即可啟動 OpenOCD。

打開終端,按照快速入門中的指南 設定好開發環境 ,然後運作如下指令,啟動 OpenOCD(該指令在 Windows,Linux,和 macOS 中通用):

openocd -f board/esp32s2-kaluga-1.cfg

注解

上述指令中 -f 選項後跟的配置檔案專用于 ESP32-S2-Kaluga-1 開發闆。您可能需要根據具體使用的硬體而選擇或修改不同的配置檔案,相關指導請參閱 Configuration of OpenOCD for specific target。

現在應該可以看到如下輸入(此日志來自 ESP32-S2-Kaluga-1 開發闆):

[email protected]:~/esp/esp-idf$ openocd -f board/esp32s2-kaluga-1.cfg

Open On-Chip Debugger v0.10.0-esp32-20200420 (2020-04-20-16:15)

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: esp32s2.cpu0 tap/device found: 0x120034e5 (mfg: 0x272 (Tensilica), part: 0x2003, ver: 0x1)

Info : esp32s2: Debug controller was reset (pwrstat=0x5F, after clear 0x0F).

Info : esp32s2: Core was reset (pwrstat=0x5F, after clear 0x0F).

如果出現訓示權限問題的錯誤,請參閱 ~/esp/openocd-esp32 目錄下 OpenOCD README 檔案中關于 “Permissions delegation” 的說明。

如果發現配置檔案有錯誤,例如 Can't find board/esp32s2-kaluga-1.cfg,請檢查 -s 後面的路徑,OpenOCD 會根據此路徑來查找 -f 指定的檔案。此外,還需要檢查配置檔案是否确實位于該路徑下。

如果看到 JTAG 錯誤(輸出全是 1 或者全是 0),請檢查硬體連接配接,除了 ESP32-S2 的引腳之外是否還有其他信号連接配接到了 JTAG,并檢視是否所有器件都已經上電。

上傳待調試的應用程式¶

您可以像往常一樣建構并上傳 ESP32-S2 應用程式,具體請參閱 第八步:編譯工程 章節。

除此以外,還支援使用 OpenOCD 通過 JTAG 接口将應用程式鏡像燒寫到閃存中,指令如下:

openocd -f board/esp32s2-kaluga-1.cfg -c "program_esp filename.bin 0x10000 verify exit"

其中 OpenOCD 的燒寫指令 program_esp 具有以下格式:

program_esp [verify] [reset] [exit]

image_file - 程式鏡像檔案存放的路徑

offset - 鏡像燒寫到閃存中的偏移位址

verify - 燒寫完成後校驗閃存中的内容(可選)

reset - 燒寫完成後重新開機目标(可選)

exit - 燒寫完成後退出 OpenOCD(可選)

現在可以進行應用程式的調試了,請按照以下章節中講解的步驟進行操作。

啟動調試器¶

ESP32-S2 的工具鍊中帶有 GNU 調試器(簡稱 GDB) xtensa-esp32s2-elf-gdb,它和其它工具鍊軟體存放在同一個 bin 目錄下。除了直接在指令行終端中調用并操作 GDB 外,還可以在 IDE (例如 Eclipse,Visual Studio Code 等)中調用它,在圖形使用者界面的幫助下間接操作 GDB,無需在終端中輸入任何指令。

關于以上兩種調試器的使用方法,詳見以下連結。

建議首先檢查調試器是否能在 指令行終端 下正常工作,然後再轉到使用 Eclipse 等 內建開發環境 下進行調試工作。

從源碼建構 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"

運作本地編譯的 OpenOCD 的示例如下(Linux 和 macOS 使用者):

src/openocd -f board/esp32s2-kaluga-1.cfg

Windows 使用者:

src\openocd -f board/esp32s2-kaluga-1.cfg