匠芯创 D125 cJTAG 实板调试:FT232H、OpenOCD 与 GDB
本文整理 匠芯创(ArtInChip)D125 E907 + FT232H + SiFive OpenOCD 2020.11.0 的实板调试记录,包含硬件连接、完整配置、原始运行日志及 GDB 附加步骤。项目已确认 cJTAG 连接经过实板验证:PA 组使用 D0 → PA11(TCKC),D1/D2 → PA10(TMSC)。
验证边界
项目已确认本文 cJTAG 接线和 OpenOCD 连接经过实板验证,日志记录了 IDCODE/DTMCS 读取与 CPU examine。本文新增的 GDB 操作指引不据此宣称所有步骤均已验证。示例使用 ftdi_oscan1_mode on 的两线模式,不是普通四线 JTAG 接法;该命令依赖所用 OpenOCD 分支,不保证其他版本或 FTDI 模块可直接使用。
硬件连接
D125 引脚
根据本次提供的官方 D125 数据手册引脚摘录,两组调试引脚均使用 功能 8。根据板上实际引出和固件 pinmux 选择一组,不同时连接两组。下表脚号按封装区分,不是开发板排针编号。
| cJTAG 信号 | MCU 引脚 | D125CxS 芯片脚号 | D125ExS 芯片脚号 |
|---|---|---|---|
| JTAG_MS / TMSC | PA10 | 79 | 53 |
| JTAG_CK / TCKC | PA11 | 80 | 54 |
| JTAG_MS / TMSC(另一组) | PC0 | 61 | 23 |
| JTAG_CK / TCKC(另一组) | PC5 | 66 | 28 |
FT232H 接线
| FT232H 模块信号 | 连接位置 | 作用 |
|---|---|---|
| D0 / ADBUS0 | D125 JTAG_CK:PA11 或 PC5 | 输出调试时钟 |
| D1 / ADBUS1 | D125 JTAG_MS:PA10 或 PC0 | FT232H 向目标输出数据 |
| D2 / ADBUS2 | 同一 JTAG_MS 节点 | FT232H 从目标输入数据 |
| GND | D125 GND | 调试器与目标板共地 |
本例 D1、D2 在同一 JTAG_MS 节点短接。PA 组接法为 D0 → PA11,D1/D2 → PA10;PC 组则为 D0 → PC5,D1/D2 → PC0。
接线更正
此前 PA10/PA11 的时钟与数据文字说明相反,现已纠正为 PA11 时钟、PA10 数据。项目已确认 cJTAG 调试经过实板验证;这是对文档接线描述的更正,不应继续标记为“未上板验证”。其他封装、PC 组接线和不同适配器仍需按实际硬件核对。
D0 与 D1/D2 短接组不能接到同一个引脚。 D1/D2 短接仅适用于本例适配器及驱动模式,不能推广为普通 JTAG 接法。
连接前断电,确认 FT232H 模块 VCCIO、输出电平与 D125 对应 IO 电源域匹配。USB 供电电压不等于 IO 电平;不要把 5 V 接到调试信号,也不要未经核对把模块电源输出接入目标板。目标板应正常供电。
配置保留了 TMS 和 JTAG_SEL 的适配器布局定义,不表示需要把 D3 或 JTAG_SEL 接到目标的 JTAG_MS 或 JTAG_CK。更换适配器时应核对其原理图和驱动实现。
OpenOCD 配置
保存为 openocd-d125-ft232h.cfg,或 下载配置文件。
已清除原始粘贴内容中的 Markdown 星号和转义下划线。出于本机调试安全考虑,将原记录的 bindto 0.0.0.0 改为 bindto 127.0.0.1;其余关键探测参数保持一致。需要远程连接时优先使用 SSH 隧道,不直接暴露调试端口。
# D125 E907 / current FTDI adapter, SiFive OpenOCD 2020.11.0.
# Preserve the interface layout used for the successful TAP/DTMCS scans.
# This does not establish electrical compatibility with other FTDI modules.
# Wiring (mux function 8): D0 -> PA11; D1/D2 tied -> PA10; common GND.
# Alternative group: D0 -> PC5; D1/D2 tied -> PC0. Use one group only.
adapter driver ftdi
ftdi_vid_pid 0x0403 0x6014
ftdi_channel 0
# For multiple adapters, uncomment and fill in the actual serial number:
# ftdi_serial "YOUR_FT232H_SERIAL"
ftdi_oscan1_mode on
transport select jtag
ftdi_layout_init 0x0008 0x001b
ftdi_layout_signal TCK -data 0x0001
ftdi_layout_signal TDI -data 0x0002
ftdi_layout_signal TDO -input 0x0004
ftdi_layout_signal TMS -data 0x0008
ftdi_layout_signal JTAG_SEL -data 0x0100 -oe 0x0100
if {![info exists ADAPTER_KHZ]} { set ADAPTER_KHZ 100 }
adapter speed $ADAPTER_KHZ
reset_config none
# Observed on this board: IDCODE=0x10000b6f, DTMCS=0x000040a1.
# Keep standard IR validation enabled: the initial capture warning remains visible.
jtag newtap d125 cpu -irlen 5 -expected-id 0x10000b6f
target create d125.cpu riscv -chain-position d125.cpu -defer-examine
# Local-only default; original test configuration used 0.0.0.0.
bindto 127.0.0.1
gdb_port 3333
telnet_port 4444
tcl_port disabled
gdb_breakpoint_override hard
# No flash algorithm, RAM initialization, hardware reset or automatic halt.
# The old driver fails its initial IR-chain validation on this connection.
# Validate explicit register reads before asking the RISC-V driver to examine.
init
irscan d125.cpu 0x01
set d125_id [drscan d125.cpu 32 0]
irscan d125.cpu 0x10
set d125_dtmcs [drscan d125.cpu 32 0]
echo "D125 IDCODE=0x$d125_id DTMCS=0x$d125_dtmcs"
if {$d125_id ne "10000b6f" || $d125_dtmcs ne "000040a1"} {
error "D125 probe mismatch; refusing CPU examination."
}
d125.cpu arp_examine
echo "D125 CPU examination complete; GDB port 3333. Attach GDB to halt."该配置不提供 Flash 烧写算法、RAM 初始化或硬件复位流程,也不主动执行 halt。100 kHz 是当前记录使用的起始速率,不代表最高稳定速率。
运行命令
在 Windows PowerShell 中进入配置文件所在目录,执行:
.\OpenOCD-SiFive-0.10.0\bin\openocd.exe -f .\openocd-d125-ft232h.cfg目录名中的 0.10.0 与启动日志中的 2020.11.0 是不同的版本标识;应检查实际启动横幅,而不是仅凭文件夹名判断版本。
如需降低速度,可在读取配置前设置变量:
.\OpenOCD-SiFive-0.10.0\bin\openocd.exe -c "set ADAPTER_KHZ 50" -f .\openocd-d125-ft232h.cfg项目提供的运行日志
以下是原连接记录,不是本次文档整理重新测得的结果:
Open On-Chip Debugger 0.10.0+dev (SiFive OpenOCD 0.10.0-2020.11.0)
Licensed under GNU GPL v2
For bug reports:
https://github.com/sifive/freedom-tools/issues
force hard breakpoints
Info : clock speed 100 kHz
Info : JTAG tap: d125.cpu tap/device found: 0x10000b6f (mfg: 0x5b7 (<unknown>), part: 0x0000, ver: 0x1)
Error: d125.cpu: IR capture error; saw 0x00 not 0x01
Warn : Bypassing JTAG setup events due to errors
Info : starting gdb server for d125.cpu on 3333
Info : Listening on port 3333 for gdb connections
D125 IDCODE=0x10000b6f DTMCS=0x000040a1
Info : datacount=1 progbufsize=2
Info : Examined RISC-V core; found 1 harts
Info : hart 0: XLEN=32, misa=0x40901125
D125 CPU examination complete; GDB port 3333. Attach GDB to halt.
Info : tcl server disabled
Info : Listening on port 4444 for telnet connections如何判断连接状态
- TAP IDCODE 为
0x10000b6f,显式读取 DTMCS 为0x000040a1。 - 配置仅在两个读值匹配后执行 CPU examine;不匹配时停止,不应删除校验强行继续。
- 日志显示识别到一个 RV32 hart,但 IR capture error 仍然存在,不等于整个扫描链已无异常。
- 本记录在初始校验报错后显式扫描成功,并完成 CPU examine;这不是适用于所有 IR 错误的通用修复。
- 端口监听成功不代表 CPU halt、寄存器读取、断点或 Flash 操作已经验证。
使用 GDB 连接
准备与目标 RISC-V 架构兼容的 GDB,以及与板上当前固件匹配、带调试信息的 ELF。下面的 riscv64-unknown-elf-gdb.exe 仅为工具名示例,需替换为 SDK 实际提供且支持 RV32 的 GDB。
保持 OpenOCD 窗口运行,在另一个终端启动:
riscv64-unknown-elf-gdb.exe .\firmware.elf随后在 GDB 提示符中执行:
target extended-remote 127.0.0.1:3333
monitor halt
info registers
x/8i $pc
bt启动时指定 ELF 只在主机加载符号,不会自动烧写固件。连接与 halt 会影响目标运行,测试前让电机、执行器等受控外设处于安全状态。回溯质量取决于符号、优化选项和当前执行状态。
若需要断点,使用固件中实际存在的函数名:
hbreak your_function
continueyour_function 是占位符;运行过程中可按 Ctrl+C 请求中断,再检查寄存器。硬件断点数量有限。已运行过的初始化函数不会因设置断点而重新执行。
结束前可删除断点;根据是否需要恢复目标,显式选择 monitor resume:
delete breakpoints
monitor resume
detach
quit不要直接套用 load、run 或 monitor reset halt。 本配置未提供固件下载、RAM 初始化及板级复位保证,附加调试不等于支持重新启动或烧写。
通用连接与 halt 命令参考:OpenOCD GDB 文档、OpenOCD 通用命令。这些文档不验证本例 D125 的电气连接或旧版驱动行为。
常见问题
匠芯创 D125 使用 FT232H 时,PA10 和 PA11 分别接什么?
PA10 是 JTAG_MS / TMSC,接 FT232H 的 D1/D2 共用数据节点;PA11 是 JTAG_CK / TCKC,接 D0。两脚选择功能 8,并与目标板共地。
D125 cJTAG 是否已经实板验证?
是,项目已确认本例连接经过实板验证,提供的日志记录了 IDCODE、DTMCS 和 RV32 CPU examine。验证结论不自动覆盖其他适配器、所有 GDB 操作或 Flash 烧写。
这份 OpenOCD 配置可以烧写 D125 Flash 吗?
本配置未提供 Flash 算法,不应作为烧写配置。它用于连接与 CPU 检查,文章另提供 GDB 附加指引。
相关教程:匠芯创 D126 Wi-Fi / BLE 使用。
排查要点
| 现象 | 优先检查 |
|---|---|
| 找不到 FTDI 设备 | USB 枚举、VID/PID、驱动、是否被其他程序占用;多适配器时指定序列号 |
| 不认识 ftdi_oscan1_mode | OpenOCD 分支及构建版本是否与记录一致 |
| IDCODE / DTMCS 不匹配 | PA10/PA11 接线、共地、电平、pinmux、供电与时钟速度 |
| IR capture error | 保留完整日志;结合显式读值及 CPU examine 判断,不能仅屏蔽校验 |
| GDB 无法连接 | OpenOCD 是否仍在运行、3333 端口是否被占用、本机地址是否正确 |
| 连接后 halt 或读寄存器失败 | CPU 调试状态、链路稳定性、固件对调试引脚的复用及旧驱动兼容性 |
| 符号地址或回溯异常 | ELF 是否与当前板上固件一致,是否包含调试信息 |
