Skip to content

匠芯创 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 / TMSCPA107953
JTAG_CK / TCKCPA118054
JTAG_MS / TMSC(另一组)PC06123
JTAG_CK / TCKC(另一组)PC56628

FT232H 接线 ​

FT232H 模块信号连接位置作用
D0 / ADBUS0D125 JTAG_CK:PA11 或 PC5输出调试时钟
D1 / ADBUS1D125 JTAG_MS:PA10 或 PC0FT232H 向目标输出数据
D2 / ADBUS2同一 JTAG_MS 节点FT232H 从目标输入数据
GNDD125 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 隧道,不直接暴露调试端口。

tcl
# 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 中进入配置文件所在目录,执行:

powershell
.\OpenOCD-SiFive-0.10.0\bin\openocd.exe -f .\openocd-d125-ft232h.cfg

目录名中的 0.10.0 与启动日志中的 2020.11.0 是不同的版本标识;应检查实际启动横幅,而不是仅凭文件夹名判断版本。

如需降低速度,可在读取配置前设置变量:

powershell
.\OpenOCD-SiFive-0.10.0\bin\openocd.exe -c "set ADAPTER_KHZ 50" -f .\openocd-d125-ft232h.cfg

项目提供的运行日志 ​

以下是原连接记录,不是本次文档整理重新测得的结果:

text
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 窗口运行,在另一个终端启动:

powershell
riscv64-unknown-elf-gdb.exe .\firmware.elf

随后在 GDB 提示符中执行:

text
target extended-remote 127.0.0.1:3333
monitor halt
info registers
x/8i $pc
bt

启动时指定 ELF 只在主机加载符号,不会自动烧写固件。连接与 halt 会影响目标运行,测试前让电机、执行器等受控外设处于安全状态。回溯质量取决于符号、优化选项和当前执行状态。

若需要断点,使用固件中实际存在的函数名:

text
hbreak your_function
continue

your_function 是占位符;运行过程中可按 Ctrl+C 请求中断,再检查寄存器。硬件断点数量有限。已运行过的初始化函数不会因设置断点而重新执行。

结束前可删除断点;根据是否需要恢复目标,显式选择 monitor resume:

text
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_modeOpenOCD 分支及构建版本是否与记录一致
IDCODE / DTMCS 不匹配PA10/PA11 接线、共地、电平、pinmux、供电与时钟速度
IR capture error保留完整日志;结合显式读值及 CPU examine 判断,不能仅屏蔽校验
GDB 无法连接OpenOCD 是否仍在运行、3333 端口是否被占用、本机地址是否正确
连接后 halt 或读寄存器失败CPU 调试状态、链路稳定性、固件对调试引脚的复用及旧驱动兼容性
符号地址或回溯异常ELF 是否与当前板上固件一致,是否包含调试信息

深圳市优森美科技开发有限公司
欢迎咨询音视频产品方案与芯片选型支持
邮箱:doc@ultrasemi.com · QQ: 2272715136 · 微信/手机: 13342996846

深圳市优森美科技开发有限公司
欢迎咨询音视频产品方案与芯片选型支持
邮箱:doc@ultrasemi.com · QQ: 2272715136 · 微信/手机: 13342996846