这篇教程用来带领实现 Ubuntu/Linux 下 ESP32 使用 Jlink 进行 JTAG 调试。分为如下几步:
1. 安装 OpenOCD
如果你已经按照 esp-idf 快速入门 一文中的介绍安装好了 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
2. Jlink 连线
以下是 Jlink 上的 JTAG 接口对应的引脚图:
上图的左侧那排引脚对应着 Jlink的正面(有 Jlink logo 那一面)。
你需要按如下表格连接 Jlink 与 ESP32:
序号 | ESP32 引脚 | JTAG 信号 |
---|---|---|
1 | CHIP_PU | TRST_N |
2 | MTDO / GPIO15 | TDO |
3 | MTDI / GPIO12 | TDI |
4 | MTCK / GPIO13 | TCK |
5 | MTMS / GPIO14 | TMS |
6 | GND | GND |
注:序号 1 可以不接。
具体的接法如下图:
上图的左侧那排引脚对应着 Jlink的正面(有 Jlink logo 那一面)。
其他硬件连线部分就按正常 ESP32 编译烧写运行所需的连线接好即可,同时 Jlink 另一端也需要通过 USB 连接到电脑。
3. 配置并运行 OpenOCD
3.1 进入 openocd-esp32
目录
首先你需要在终端里进入到 openocd-esp32
目录:
cd ~/esp/openocd-esp32/v0.10.0-esp32-20200406/openocd-esp32
上述 openocd-esp32
目录请按照自己的 openocd-esp32
目录调整。
3.2 查看 openocd-esp32
版本
然后你需要查看 openocd-esp32
版本,一般已经标注在对应的文件夹上,比如 /esp/openocd-esp32/v0.10.0-esp32-20200406
。如果是 2019 及以前版本,请忽略此步并直接跳转至 3.3 运行 openocd-esp32
。如果是 2020 及以后版本,需要执行以下操作:
- 进入
openocd-esp32
的以下目录:/esp/openocd-esp32/v0.10.0-esp32-20200309/openocd-esp32/share/openocd/scripts/interface
,在interface
文件夹中找到jlink.cfg
并打开 - 在
jlink.cfg
中添加adapter_khz 9600
,然后保存文件并关闭(如果不添加,会在后续运行 openocd 指令时报错)
添加 adapter_khz 9600
后的 jlink.cfg
应如下:
#
# SEGGER J-Link
#
# http://www.segger.com/jlink.html
#
interface jlink
adapter_khz 9600
# The serial number can be used to select a specific device in case more than
# one is connected to the host.
#
# Example: Select J-Link with serial number 123456789
#
# jlink serial 123456789
3.3 运行 openocd-esp32
最后你只需要使用如下指令运行 openocd-esp32
,此处确保 Jlink 已按上述硬件配置连接,同时确保 2020 版本已进行 3.2 查看 openocd-esp32 版本
中的配置。
cd ~/esp/openocd-esp32/v0.10.0-esp32-20200406/openocd-esp32
./bin/openocd -s share/openocd/scripts -f interface/jlink.cfg \
-f board/esp-wroom-32.cfg
特别注意:上述指令中第二行和第三行请一并粘贴进入终端,因为单行指令太长,直接转成 PDF 会出现不必要的错误(使用 \ + 回车进行了指令换行)。
上述 openocd-esp32
目录请按照自己的 openocd-esp32
目录调整。上述 -f board/esp-wroom-32.cfg
请按照自己实际使用的开发板进行调整。如果使用的不是 ESP-WROVER-KIT
开发板,可以跳过下面的 特别测试 部分。
特别测试:这里也已经额外测试过 ESP-WROVER-KIT
开发板,也可以正常使用