Keil 里给 MCU 下断点,Vivado 里给 FPGA 下载位流,Quartus 里用 SignalTap 看内部信号。这几套熟悉的开发工具,现在都能接入 CH347了。
一、Keil:把 CH347 放进调试器列表
CH347Link 为 Keil µVision 提供 CH347 调试驱动,支持 SWD/JTAG。
安装后,在Options for Target → Debug中选择WCH / CH347 JTAG_SWD,再设置 SWD 或 JTAG 端口。下载固件、进入调试会话,后续操作沿用 µVision 的方式。
它基于 elaphureLink 修改,把所需适配放在驱动 DLL 里,不必另外启动代理程序。Flash 下载与擦除使用 Keil 的标准算法流程,所以选好调试器之后,还要让工程里的 Flash 算法与目标芯片对应。
对于已经在 Keil 中开发的工程,这条路线的价值很直接:保留原有开发习惯,把 CH347 作为另一种调试器接进来。
文中这些工具按需选用。CH347 只有 1 路 JTAG/SWD,两种协议复用同一组引脚,不能同时作为两路独立调试通道使用。
图 1:keil中打开 CH347,设置SWD为5MHz并下载MCU程序。
图 2:keil中使用CH347对MCU进行调试。
二、Vivado:通过 XVC,接回 Hardware Manager
换到 Xilinx FPGA,CH347 走的是另一条路:xvcd-ch347。
它在电脑上提供 XVC(Xilinx Virtual Cable)服务,把 Vivado 发出的操作转成 CH347 的 JTAG 访问。启动服务后,Vivado 的 Hardware Manager 连接这个地址,再识别和操作目标 FPGA。
图 3:XVC 程序打开 CH347,Vivado 识别到 XC6SLX9。原作者演示,来源:CH347 配合 Vivado 的使用教程。
连接本机服务时,Vivado 使用open_hw_target -xvc_url 127.0.0.1:2542这样的 正式 Tcl 接口。项目也提供图形程序,可以在界面里设置服务地址、端口和 JTAG 时钟。
这样,程序仍由 Vivado 生成,下载与目标操作也留在 Hardware Manager。使用 ILA 等调试核时,还需要对应设计文件、调试核和时钟满足条件。
三、Quartus:Programmer 和 SignalTap 也有入口
用 EP4CE6、EP4CE10 这类 Cyclone IV FPGA 做开发,Quartus 同样可以接入 CH347。Quartus_IDE_CH347 采用硬件插件方式,在 Quartus 的下载器列表中加入 CH347。
部署后,器件识别、.sof下载、.jic固化,以及 SignalTap 在线调试,都沿着 Quartus 原有工具展开。
图 4:对EP4CE10 FPGA固化.jic程序最终显示固化完成。
这里要分清程序放在哪里:.sof写入 FPGA 的 SRAM,供当前上电期间运行;需要掉电保存时,再按目标配置器件的要求进行固化。安装与操作已经单独整理在 CH347 在 Quartus 中的使用说明 中。
至此,同一颗桥接芯片已经进入了 MCU 和 FPGA 两边的经典开发环境。继续往下看,这些能力也能交给脚本和其他前端使用。
四、OpenOCD 与 probe-rs:把下载、调试交给脚本
前面的几套 IDE,各有自己的接入方法。需要命令行、自动下载或可定制的调试流程时,OpenOCD 是一个通用入口。
它负责识别目标、控制运行与暂停、访问寄存器和内存,并调用 Flash 算法完成下载;同时也能向 GDB 提供调试服务。上游已有 CH347 驱动与配置文件,使用时选择包含该驱动的构建,再配上目标芯片脚本。
这也带出了更多 IDE 用法。VS Code 的 Cortex-Debug 可以连接 OpenOCD GDB Server;STM32CubeIDE 也已有 搭配 CH347 的公开配置与演示。
图 5:原作者的 STM32CubeIDE 调试演示,程序停在 main 函数断点,控制台显示 GDB 连接与目标暂停信息。来源同上。
另一个值得看的通用项目是 probe-rs。它提供命令行、库和编辑器调试入口,覆盖固件下载、运行控制、内存访问及 RTT 等工作流。用 Rust 做嵌入式开发,或者希望把下载和日志组织进开发命令,可以从这里入手。
当前上游 CH347 驱动 已有 JTAG/SWD 实现;OpenChipLab 分支 则包含 Windows 厂商接口库路线的适配。先用probe-rs list确认设备,再选择目标和协议。RTT 还需要固件中的缓冲区配合,适合把日志与下载调试放在一起使用。
五、openFPGALoader:不同厂商的 FPGA,用一套入口下载
如果手里不止一种 FPGA 板子,openFPGALoader 就有用了。它专注于 FPGA 编程,覆盖 Xilinx、Altera/Intel、Lattice、Gowin 等多个厂商的器件和开发板。
CH347 已经在上游的 下载线列表 中。选中对应 cable 后,可以先扫描目标:
openFPGALoader-cch347_jtag--detect后续可以加载位流,或按受支持的配置流程写入非易失存储。设计依旧由相应工具链完成,下载环节则可以放进脚本,适合换板验证和重复配置。
这里的支持范围要同时看下载线、FPGA 型号和板级连接。尤其是经 JTAG 固化外部 Flash 时,可能需要匹配的桥接位流。作者早期公开案例 展示了 CH347F 对 Spartan-6 XC6SLX9 的识别及配置 Flash 写入,可以帮助理解这条流程;具体命令按当前版本核对。
六、板子还没跑起来,也可以先查 JTAG 和引脚
下载只是 JTAG 的一种用途。CH347_JTAG_Scanner 把重点放在边界扫描:扫描器件链,匹配 BSDL,再观察或控制相应的边界扫描引脚。
BSDL 描述器件的边界扫描结构,要与实际型号、封装匹配。项目提供 SAMPLE、EXTEST、BYPASS 等操作:SAMPLE 用于观察相应引脚状态,EXTEST 可控制边界扫描单元的输出,适合围绕板级连接做检查。使用 EXTEST 时,要先确认外部电路的驱动关系。
图 4:CH347扫描xilinx fpga的芯片引脚。
另一类任务是执行已经生成好的 JTAG 序列。厂商工具导出 SVF 后,可以交给 OpenOCD 的 SVF 功能,或 CH347_SVF_DNTool_py 这样的专用播放器。
图 5:SVF 工具仓库的原始运行图,显示序列执行完成。来源:项目图片,图中的耗时只对应作者这次演示。
SVF 里可以是编程操作,也可以是测试操作。拿到文件后,先确认播放器支持其中的指令、时序和校验,再放进固定流程。
七、从单步调试,再走到变量观察和图形工具
程序已经能下载、单步之后,下一步常常是持续观察几个变量。LinkScope 就面向这类任务:解析符号文件,读取和修改变量,把变化画成曲线,也能导出数据。
图 6:LinkScope 原项目运行图,图示连接为 ST-Link,展示变量观察方式。来源:项目原图。
它基于 OpenOCD,因此 CH347 可以沿相应后端探索接入;完整组合仍需按目标验证。它适合看变量趋势,采样由调试访问和软件轮询完成,不能当作测量高速引脚信号的逻辑分析仪。
想把常用操作集中到一个窗口,还可以看 CH347 多功能接口演示软件。它在 Windows 界面中组织 OpenOCD、xvcd-ch347 等工具,同时提供其他接口演示。
图 7:项目公开的主界面,左侧列出 FPGA 与 MCU 入口,设备状态显示“设备已插入”。来源:项目原图。
再往自动化方向走,embedded-debugger-mcp 提供了基于 probe-rs 的接口封装。打通 CH347 后端后,可以继续探索运行控制、内存访问、Flash 和 RTT 的自动化调用;这一完整组合本文尚未联调。
八、顺手扩展:直接操作 Flash,可以换到 SPI
如果面对的是一颗串行 Flash,还可以用 CH347 的 SPI 接口。flashrom 上游 已有ch347_spi驱动,用来探测、读取和写入支持的 Flash。
OpenChipLab 中收录的 SNANDer、AsProgrammer / UsbAsp-flash,也可继续查看串行存储器的使用范围。这里已经换到 SPI 等接口,与前面的 JTAG/SWD 分开接线和配置。
九、最后按任务选一条路
| 手上的任务 | 可以先看 |
|---|---|
| Keil 内下载、断点与单步 | CH347Link |
| Vivado 内连接 FPGA | xvcd-ch347 |
| Quartus 内下载和 SignalTap | Quartus_IDE_CH347 |
| MCU 命令行下载、GDB 与脚本控制 | OpenOCD |
| Rust 开发、下载与 RTT | probe-rs |
| 多厂商 FPGA 下载 | openFPGALoader |
| 边界扫描、引脚观察与板级检查 | CH347_JTAG_Scanner |
| 执行现成 SVF | OpenOCD SVF / 专用播放器 |
| 变量观察与曲线显示 | LinkScope + 相应后端 |
| 直接读写串行 Flash | flashrom 等 SPI 工具 |
上手时,把 CH347 模式与固件、主机驱动、目标支持和接线电平对应好,再从较低时钟开始验证。JTAG/SWD 共用一路接口,换软件前让原程序释放设备;多器件 JTAG 链仍然属于同一条总线。
从经典 IDE 出发,CH347 的用法已经延伸到命令行、边界扫描和图形化观察。先把日常最常用的一条路径跑通,再按任务增加软件,这块调试板就能逐步用起来。
资料与图片来源
本文按 2026 年 11 月 2 日的公开文档与源码整理;运行截图来自原作者或项目公开素材,文中逐图标注来源,本次未新增硬件实测。LeoZY_ 博客演示图按原文标示的 CC BY-SA 4.0 保留署名与出处。
- CH347 产品资料、WCH 官方项目。
- CH347Link、xvcd-ch347、Quartus_IDE_CH347。
- OpenOCD CH347 说明、Cortex-Debug、STM32CubeIDE 配套分支。
- probe-rs、CH347 SWD 支持合并记录、Windows 厂商接口适配分支。
- openFPGALoader、下载线兼容表、构建选项。
- OpenChipLab 仓库列表。边界扫描、SVF、LinkScope、多接口演示及存储器工具见正文各节链接;部分项目为 fork,版本和许可证分别以对应项目为准。