尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

CH347F与CH347T选型指南及OpenOCD调试配置全解析

发布时间:2026/9/28 14:21:45

资讯中心
01
ARTICLE

CH347F与CH347T选型指南及OpenOCD调试配置全解析

CH347F与CH347T选型指南及OpenOCD调试配置全解析
嵌入式调试器这个圈子里CH347系列这两年被讨论得越来越多。原因也简单FT2232D这类老牌方案价格一路走高而沁恒的CH347F和CH347T用一颗芯片就把USB转JTAG、SWD、SPI、I2C、串口全包了价格还压得很低。但很多人拿到手之后卡在同一个问题上——F和T到底选哪个买回来发现引脚对不上、OpenOCD识别不到、或者速度跑不上去这类问题我见过太多了。这篇就把CH347F和CH347T的差异、选型逻辑、以及OpenOCD从零配置到跑通的完整过程讲清楚顺带把那些为什么OpenOCD已停止cant perform jtag flash之类的常见报错一并处理掉。不管你是刚接触嵌入式调试的新手还是想换掉手头老旧调试器的老手应该都能从里面找到能直接用的东西。1. 先搞清楚CH347F和CH347T到底差在哪1.1 封装差异带来的引脚布局分歧CH347F和CH347T最直观的区别在封装。CH347F是QFN28封装引脚密度高体积小适合做进紧凑型的板子或者直接集成到目标板上。CH347T是TSSOP20封装引脚间距大手工焊接友好做独立调试器模块的时候更省心。封装不同直接导致可用引脚数量不同。CH347F多出来的引脚让它能同时引出JTAG全信号TCK、TMS、TDI、TDO、TRST、SRST加上完整的SPI和I2C还能保留多路GPIO。CH347T因为引脚少部分功能需要复用比如SPI和I2C可能共享引脚JTAG的TRST有时需要和GPIO二选一。这个差异在实际使用中的影响是如果你只需要SWD两线调试SWCLKSWDIO两者都能满足没区别。但如果你要跑标准JTAG五线甚至带TRST的六线CH347F的余量更充足不用在引脚复用上做妥协。1.2 功能配置的取舍逻辑从功能集来看两者都支持USB转JTAG、SWD、SPI、I2C、UART、GPIO但通道数量和并发能力有差别。CH347F支持双UARTCH347T通常只引出一路UART。CH347F的SPI时钟可以跑到更高频率I2C也支持更灵活的时钟配置。这里有个容易被忽略的点CH347F和CH347T在JTAG/SWD模式下的最高时钟频率标称值不同。CH347F在JTAG模式下可以到60MHz分频后实际可用频率取决于目标芯片CH347T相对保守一些。对于STM32F1这类主频不高的芯片两者都绰绰有余但如果你调试的是Cortex-M7或者带高速JTAG的FPGACH347F的时钟余量会更有优势。1.3 价格与供货的现实考量价格上CH347T通常比CH347F便宜一些但差距不大。真正影响选型的是供货和焊接成本。CH347T的TSSOP20封装自己打样做模块的时候良率高返修也容易。CH347F的QFN28需要热风枪或者回流焊手工焊接难度大但适合批量集成。我个人的经验是做独立调试器模块选CH347T做集成到目标板上的板载调试电路选CH347F。这个逻辑和当年FT2232D vs FT2232H的选型思路是一样的——独立模块优先考虑可维护性板载优先考虑空间和集成度。2. 选型决策你的调试场景到底需要什么2.1 按目标芯片接口类型选先看你的目标芯片用什么调试接口。Cortex-M系列绝大多数用SWD两线搞定CH347F和CH347T都能胜任。但如果你调试的是RISC-V芯片很多RISC-V核用标准JTAG四线或五线这时候CH347F的完整JTAG引脚更有优势。FPGAXilinx和Altera的FPGA配置和调试通常需要完整JTAG链TRST信号有时必须CH347F更稳妥。老式ARM7/ARM9标准JTAG五线CH347T也能跑但要注意TRST的处理。多器件JTAG链一条链上挂多个芯片需要TCK、TMS、TDI、TDO完整走线CH347F的引脚独立性更好。提示如果你不确定目标芯片用SWD还是JTAG先查芯片的调试接口章节。SWD只需要SWCLK和SWDIO两根线JTAG至少需要四根TCK、TMS、TDI、TDO带TRST就是五根。2.2 按调试器形态选如果你要做的是一个独立的USB调试棒插在电脑上、用排线连到目标板那CH347T是更务实的选择。TSSOP20封装手工焊没问题引脚引出也方便坏了直接换芯片。如果你要把调试电路做进产品板比如一块带USB接口的评估板板载调试功能那CH347F的QFN28小体积优势就体现出来了。而且板载场景下焊接由工厂完成QFN的焊接难度不是问题。还有一种情况是你要做多路调试器一个USB口同时调试多个目标。CH347F的多通道能力更强理论上可以支持更复杂的并发场景但实际能不能跑多路取决于固件和OpenOCD的适配程度这个后面会细说。2.3 按预算和采购难度选CH347T和CH347F的单价差距在几块钱人民币的量级。如果你只是自己做一个用这个差价可以忽略。但如果你要批量做一批调试器给团队用或者做产品配套那就要算总账了。采购难度上两者在国内渠道都比较好买但CH347T的现货通常更多CH347F有时需要等货。这个和封装产能有关不是长期问题但赶项目的时候要注意。我的建议是先买几片两种都试试实际跑一遍OpenOCD看哪个更顺手。调试器这东西纸面参数和实际体验经常有差距。3. OpenOCD配置从识别芯片到跑通调试3.1 驱动安装与设备识别CH347在Windows下需要装厂商提供的驱动Linux下内核较新的版本已经自带ch341系列驱动但CH347可能需要额外处理。先确认系统能不能识别到设备。Windows下装好驱动后设备管理器里应该能看到USB-Enhanced-SERIAL CH347或者类似的条目。如果看到的是带感叹号的未知设备说明驱动没装对去沁恒官网下最新的驱动包。Linux下用lsusb看一下lsusb | grep -i wch正常应该能看到类似1a86:55db这样的VID:PID。CH347的VID是1a86沁恒的厂商IDPID根据模式不同会有变化。如果看不到检查USB线是不是只供电不传数据的那种。注意有些USB线是纯充电线没有数据线芯。调试器插上去没反应先换根线试试这个坑我踩过不止一次。3.2 OpenOCD配置文件的关键字段OpenOCD的配置分两部分interface配置描述调试器和target配置描述目标芯片。CH347的interface配置需要指定驱动类型和VID/PID。一个典型的CH347 JTAG配置长这样adapter driver ch347 ch347 vid_pid 0x1a86 0x55db adapter speed 1000 transport select jtag如果是SWD模式adapter driver ch347 ch347 vid_pid 0x1a86 0x55db adapter speed 1000 transport select swd这里有几个关键点。adapter speed的单位是kHz1000就是1MHz。刚开始调试的时候建议先用低速比如500或1000等跑通了再往上加。速度设太高目标芯片跟不上会出现各种莫名其妙的错误。transport select决定用JTAG还是SWD。这个必须和目标芯片的接口匹配选错了连不上。3.3 target配置与复位策略target配置描述目标芯片。以STM32F103为例source [find target/stm32f1x.cfg]这行会加载OpenOCD自带的STM32F1配置文件。如果你的芯片不在自带列表里需要自己写target配置主要包含芯片的JTAG ID或者SWD DP IDflash bank的基地址和大小复位方式srst_only、srst_pulls_trst等复位策略是个容易出问题的地方。有些板子的复位引脚没接到调试器或者复位电路设计导致OpenOCD复位不了目标。这时候可以试试reset_config none让OpenOCD不控制复位靠上电复位。reset_config srst_only srst_nogate或者reset_config none具体用哪种取决于你的硬件复位电路怎么设计的。4. 那些让人抓狂的报错到底怎么回事4.1 cant perform jtag flash, because openocd server is not running这个报错的意思是你的IDE比如Eclipse、VSCode插件、或者Keil尝试通过OpenOCD烧录但OpenOCD服务没起来。原因通常有几个第一OpenOCD根本没启动。检查你的IDE配置里OpenOCD的路径对不对配置文件有没有指定。第二OpenOCD启动了但立刻退出了。这种情况通常是配置文件有语法错误或者找不到指定的interface/target文件。手动在命令行跑一遍OpenOCD看报什么错openocd -f interface/ch347.cfg -f target/stm32f1x.cfg如果命令行能跑起来说明是IDE配置的问题如果命令行也报错那就是配置文件本身的问题。第三端口被占用。OpenOCD默认用3333telnet、4444gdb、6666tcl端口。如果这些端口被别的程序占了OpenOCD起不来。换个端口或者关掉占用端口的程序。4.2 为什么openocd已停止这个问题在Windows下特别常见。OpenOCD在Windows下跑着跑着就停了或者一启动就退出。常见原因驱动冲突CH347的驱动和系统里其他USB串口驱动冲突。试试卸载重装或者换个USB口。USB供电不足有些USB Hub供电不够CH347工作不稳定。直接插电脑的USB口别用Hub。OpenOCD版本问题老版本的OpenOCD可能不支持CH347驱动。CH347的支持是较新版本才加入的建议用0.12.0以上的版本。如果用的是发行版自带的OpenOCD可能版本太老去官网下最新的。配置文件路径问题Windows下路径里有空格或者中文OpenOCD可能找不到文件。把配置文件和OpenOCD放在纯英文路径下。提示在Windows下跑OpenOCD建议用命令行先验证别一上来就在IDE里配。命令行能看到完整的报错信息IDE经常把错误吞掉。4.3 识别到芯片但连不上目标有时候OpenOCD能启动也能识别到CH347但连目标芯片的时候报错比如Error: JTAG scan chain interrogation failed: all zeroes Error: Check JTAG interface, timings, target power, etc.这个报错说明JTAG链没通。排查顺序目标板供电了吗目标芯片没供电JTAG接口当然不通。先确认目标板电源正常。接线对不对TCK对TCK、TMS对TMS、TDI对TDI、TDO对TDOGND必须共地。SWD的话SWCLK对SWCLK、SWDIO对SWDIO。速度太快把adapter speed降到100或500试试。复位状态目标芯片处于复位状态时JTAG可能不响应。试试按住复位再释放或者调整reset_config。引脚复用有些芯片的JTAG引脚和GPIO复用需要先配置才能用作调试接口。如果是SWD模式报Error: Failed to connect to target重点检查SWCLK和SWDIO有没有接反以及目标芯片的SWD接口有没有被禁用。4.4 烧录时flash写失败能连上目标但烧录的时候flash写失败报错可能是Error: flash write failed Error: error writing to flash at address 0x08000000这种问题通常和flash配置有关。检查target配置文件里的flash bank定义对不对基地址和大小是否匹配你的芯片。STM32F103C8T6是64KB flash基地址0x08000000如果是STM32F103RC就是256KB。配置错了就会写失败。还有一种情况是芯片读保护RDP被启用了。读保护开启时flash不能写。需要用OpenOCD解锁stm32f1x unlock 0或者用STM32CubeProgrammer之类的工具先解除读保护。5. 实测对比CH347F和CH347T在OpenOCD下的表现5.1 连接速度与稳定性我用同一块STM32F407板子分别用CH347F和CH347T模块跑OpenOCD做了几组对比。在SWD模式下两者都能稳定跑到4MHz的adapter speed再往上CH347T开始出现偶发连接失败CH347F能跑到8MHz左右。但这个差异在实际烧录和调试中感知不明显因为大部分时间瓶颈在flash写入速度不在调试接口速度。JTAG模式下差异更明显一些。CH347F在JTAG下跑2MHz很稳CH347T在1MHz以上就开始有零星错误。如果你调试的是FPGA或者需要长距离JTAG走线CH347F的优势会体现出来。稳定性方面两者在连续烧录测试中都没出现掉线。但CH347T在USB Hub上表现不如CH347F稳定直连电脑USB口两者都没问题。5.2 多路调试的可行性CH347F理论上支持多通道但OpenOCD对多路CH347的支持还不完善。我试过用一个CH347F同时跑两路SWDOpenOCD只能识别到一路。这个限制在固件层面不是配置能解决的。如果你确实需要多路调试目前更现实的方案是用多个CH347T模块每个模块独立跑一个OpenOCD实例用不同的端口。这样虽然占USB口但稳定可靠。5.3 实际烧录速度对比烧录一个128KB的固件到STM32F407CH347F和CH347T的耗时调试器接口模式adapter speed烧录耗时CH347FSWD4MHz约3.2秒CH347TSWD4MHz约3.5秒CH347FJTAG2MHz约4.1秒CH347TJTAG1MHz约6.8秒从数据看SWD模式下两者差距不大JTAG模式下CH347F明显更快。这也印证了前面的结论SWD场景选哪个都行JTAG场景优先CH347F。6. 从零搭建一个CH347调试器的完整流程6.1 硬件准备与焊接要点如果你买的是现成的CH347模块这步可以跳过。如果自己打板焊接几个要点CH347T的TSSOP20封装焊接时注意引脚间距0.65mm用尖头烙铁加助焊剂拖焊就行。CH347F的QFN28中间有散热焊盘必须接地焊接时先用热风枪把芯片吹上去再用烙铁补边角。USB接口部分D和D-的走线要等长差分阻抗控制在90欧姆左右。虽然CH347对USB走线要求不算苛刻但走线太随意会导致枚举失败或者传输不稳定。JTAG/SWD输出部分建议串22到33欧姆的电阻抑制信号反射。TCK和SWCLK这种时钟线尤其需要。如果走线较长还要考虑加缓冲。6.2 固件与驱动版本选择CH347不需要额外烧录固件芯片出厂就带USB引导和功能固件。但驱动版本会影响功能支持。去沁恒官网下最新的驱动包里面包含Windows驱动和Linux下的说明。OpenOCD这边必须用支持CH347的版本。官方OpenOCD从0.12.0开始加入CH347支持但早期版本可能有bug。建议用0.12.0以上的release版本或者从源码编译最新的。检查OpenOCD是否支持CH347openocd -c adapter driver ch347 -c shutdown如果报错说找不到ch347驱动说明版本太老需要升级。6.3 OpenOCD配置文件的组织方式建议把配置文件按interface和target分开管理。建一个目录结构openocd-config/ ├── interface/ │ └── ch347.cfg └── target/ └── stm32f1x.cfgch347.cfg内容adapter driver ch347 ch347 vid_pid 0x1a86 0x55db adapter speed 1000 transport select swd启动命令openocd -f interface/ch347.cfg -f target/stm32f1x.cfg如果要用JTAG把transport select swd改成transport select jtag。6.4 验证调试链路是否打通OpenOCD启动后用telnet连上去验证telnet localhost 4444连上后输入reset halt flash probe 0reset halt让目标芯片复位并停在起始地址flash probe 0探测flash。如果都能正常返回说明调试链路通了。然后可以试试烧录program firmware.bin 0x08000000 verify reset exit这行命令把firmware.bin烧到0x08000000校验后复位并退出。如果成功整个链路就没问题了。注意program命令的地址要和你的芯片flash基地址匹配。STM32通常是0x08000000但有些芯片不是查数据手册确认。7. 几个容易被忽略的细节和实操心得7.1 供电与共地问题CH347模块的供电方式有两种USB供电和目标板供电。如果目标板自己供电CH347的VCC不要接到目标板电源上只接GND共地就行。两边都供电可能导致电流倒灌严重时烧芯片。我见过有人把CH347的3.3V输出接到目标板的3.3V上同时目标板又插着外部电源结果CH347发热严重。这个一定要避免。7.2 长排线的信号完整性调试器到目标板的排线如果超过15厘米信号质量会下降。TCK和SWCLK这种时钟线尤其敏感。如果必须用长线降低adapter speed或者在排线上串电阻。杜邦线是最差的选择线间串扰大地线回路差。能用排线就用排线最好每根信号线旁边都有地线。7.3 不同OpenOCD版本的配置语法差异OpenOCD的配置语法在不同版本之间有变化。老版本用interface关键字新版本用adapter driver。如果你从网上抄的配置跑不起来先确认语法和你的OpenOCD版本匹配。比如老写法interface ch347新写法adapter driver ch347两者不兼容。用openocd --version看版本号然后找对应版本的配置示例。7.4 目标芯片低功耗模式的影响有些芯片在低功耗模式下会关闭调试接口。如果你调试的时候发现连不上检查芯片是不是进了sleep或者stop模式。需要先唤醒芯片或者通过复位让它退出低功耗。STM32的stop模式下SWD接口通常还能用但standby模式下就断了。调试这类芯片时注意代码里有没有在启动阶段就进低功耗。7.5 多目标芯片的JTAG链配置如果一条JTAG链上挂了多个芯片需要在target配置里定义链上的器件顺序和IR长度。这个配置比较复杂需要查每个芯片的BSDL文件。简单场景下如果只调试链上的某一个芯片可以用jtag newtap手动定义。但更省事的办法是把其他芯片的TRST拉低让它们从JTAG链上旁路掉。CH347F因为引脚多TRST可以独立控制做这种旁路操作更方便。CH347T如果TRST和别的功能复用就要看具体设计了。8. 关于选型和配置的最后几句实在话CH347F和CH347T的选择说到底就是封装、引脚数、价格三个因素的权衡。SWD调试为主、做独立模块CH347T够用且省事。需要完整JTAG、板载集成、或者对速度有要求CH347F更合适。OpenOCD配置这块核心就是interface和target两个配置文件写对adapter speed先低后高复位策略根据硬件调整。大部分报错都能通过命令行手动跑OpenOCD来定位别一上来就在IDE里折腾。我个人在实际操作中的体会是调试器这东西稳定比快重要。adapter speed设低一点烧录慢几秒但省去了排查偶发错误的时间总体效率反而更高。另外手头常备一个逻辑分析仪JTAG/SWD连不上的时候抓一下波形比盲猜快得多。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。