CMSIS-DAP使用说明与驱动资源包:从驱动安装到Keil/OpenOCD调试的完整指南 这几天群里又有人在问同一个问题CMSIS-DAP插上电脑没反应设备管理器里连个影子都看不到。这个问题我前前后后回答过不下五十次每次都要从“换一根数据线试试”讲起。CMSIS-DAP本身是个好东西——便宜、开源、通用烧STM32、GD32、NXP甚至树莓派都能用但驱动这块的坑是真的多。所以我把手头的驱动、固件、使用说明整理了一份取名CMSIS-DAP使用说明及驱动资源包免费放了出来。这篇文章就是把资源包里的干货摊开讲一遍从为什么选它、包里的文件怎么用到驱动安装、Keil/IAR/OpenOCD配置再到排查那些“识别不到”“烧录失败”的经典问题一次说清。第一次用DAP的朋友建议先看完第一章再动手。1. 为什么我一直在用CMSIS-DAP而不是J-Link和ST-Link1.1 CMSIS-DAP到底是什么CMSIS-DAP是ARM官方定义的一套调试接口标准它既可以指固件也可以指整合了这套固件的整块调试器硬件。核心思路是调试器板子上有一颗MCU跑着CMSIS-DAP固件USB的请求会被固件翻译成SWD或者JTAG时序送到目标芯片的调试端口上。说白了它就是个“翻译官”把你电脑上Keil、IAR、OpenOCD发出的调试指令翻成目标芯片硬件能明白的电平信号。因为协议是公开的这东西几乎没有专利门槛。你拿一颗STM32F103C8T6再加几个电阻电容和一颗LDO就能焊出一个可用的调试器。淘宝上十几块的DAP绝大多数就是这么来的。有些做得好一点的还会在板子上多加一颗USB转串口芯片让DAP同时扮演USB转TTL的角色调试和日志输出一根线全搞定。这也就意味着CMSIS-DAP的价格天花板很低。同样功能正版J-Link要几千块国产仿版也要上百ST-Link虽然便宜但被官方软件锁了支持范围而CMSIS-DAP十几块钱就能干活。我当初从J-Link转过来最大的原因就是便宜加不受限制不管目标是STM32F1还是GD32、NXP的LPC还是瑞萨的RA插上就能用不用像某些调试器那样还得看芯片厂家的脸色。1.2 和J-Link、ST-Link的对比对比项CMSIS-DAPJ-LinkST-Link价格十几块到几十块正版几千块仿版几十块二十几块到一百多驱动与授权协议开源任意电脑使用正版有授权仿版受软件更新限制需ST官方驱动支持目标芯片范围无限制无限制仅限ST产品调试速度V1慢V2中等高速段强中等社区支持好工具链广泛官方工具链强一般可折腾性固件开源可DIY基本封闭封闭这里要说清楚一点ST-Link“仅限ST产品”指的不是硬件连不上非ST芯片而是ST官方工具链对非ST芯片做了限制OpenOCD这类第三方工具绕开限制之后稳定性也差一些。而CMSIS-DAP因为协议完全开放任何芯片、任何工具链都能直接对接不用担心厂家锁区。1.3 为什么选它在绝大多数MCU开发场景里我们只需要烧录、断点、单步、查看寄存器这些CMSIS-DAP全都能给。J-Link那些“无限断点”“高速烧录”之类的花活对于单芯片裸机开发来说基本用不上。更重要的是CMSIS-DAP的协议简单、固件开源万一调试器坏了或者你想研究一下SWD协议到底是什么原理都有地方下手。这也是为什么我特别推荐入门嵌入式的新手直接上DAP而不是一上来就买J-Link——先把标准调试流程走通再谈别的。2. 资源包解压之后里面每一份文件都是干什么用的2.1 整个压缩包的目录长什么样我整理资源包的时候特意按“驱动、说明、固件、工具”四个维度分好了文件夹拿到手之后不会一脸懵。解压之后大概是这样的CMSIS-DAP_使用说明及驱动资源包/ ├── 00_README.txt ├── 01_使用说明/ │ ├── CMSIS-DAP_使用说明_v1.2.pdf │ ├── Keil5_调试配置图解.md │ ├── OpenOCD_命令行速查.md │ └── 驱动安装进度自查表.md ├── 02_驱动/ │ ├── WinUSB_Driver/ │ │ ├── CMSIS-DAP_v2.inf │ │ └── Zadig_2.8.exe │ └── 串口驱动/ │ ├── CH340_Win10_Win11/ │ ├── CP210x_VCP/ │ └── FTDI_VCP/ ├── 03_固件/ │ ├── cmsis_dap_v1_firmware.hex │ ├── cmsis_dap_v2_firmware.hex │ ├── DAPLink_firmware.bin │ └── 固件烧录说明.txt └── 04_工具/ ├── pyOCD_关联说明.txt └── USB设备描述查看工具.txt00_README.txt是我建议第一个打开的文件里面写了资源包适用哪些系统、哪些典型芯片以及哪三个最容易踩的坑。很多人下载资源包之后习惯性跳过说明直接翻驱动文件夹结果装了半天没效果回头一问问题往往在包里的说明文件里已经写明白了。2.2 驱动文件夹里为什么要放两套驱动这是DAP驱动问题里最常见的一个误区。CMSIS-DAP的驱动严格来说分成两套一套是调试器本身的USB驱动另一套是它附带串口芯片的驱动。很多DAP板子上面同时存在两个设备一个USB调试口一个虚拟串口对应不同的设备节点。调试口走CMSIS-DAP协议管烧录和调试串口管printf输出、AT指令交互两者不能混用。所以在02_驱动下面我放了WinUSB_Driver和一个串口驱动目录。WinUSB_Driver管的是CMSIS-DAP核心功能串口驱动则负责CH340、CP210x、FTDI这三类最常见的USB转串口芯片。你插上DAP设备管理器里出现两个未知设备是正常的一个要用WinUSB驱动另一个要用对应的串口驱动别想着“一个驱动通吃”。2.3 使用说明和固件文件夹存在的意义使用说明PDF不是网上一抓一大把的那种泛泛而谈而是按场景分开写Keil里的配置图文步骤、OpenOCD命令行示例以及一张驱动安装进度自查表——每个阶段设备管理器应该长什么样、哪些字符是关键标志都列得很清楚。固件文件夹很多人不太注意其实很重要。市面上DAP硬件五花八门但固件核心就几种CMSIS-DAP V1、CMSIS-DAP V2、DAPLink。V1老但稳定V2速度快DAPLink是Keil官方那边发展出来的版本兼容性好。如果你的DAP是那种能调模式的小板子或者你想把手头DAP刷成更“标准”的版本这个文件夹里的hex和bin就起作用了。烧录方法我也写了不复杂用另一个调试器按住Boot引脚烧就行。3. 驱动安装的完整过程从插上USB到设备管理器出现“CMSIS-DAP”3.1 先搞清楚你的DAP是V1还是V2驱动安装之前最重要的一件事是确认你的DAP固件是V1还是V2。CMSIS-DAP V1走的是HID协议Windows、Linux、macOS基本都自带HID驱动插上去免驱就可以用但传输速度很慢实际烧录大固件时能感觉到明显的卡顿。CMSIS-DAP V2走的是WinUSB协议传输速度大幅提升但Windows 10/11下通常需要装一个WinUSB驱动才能被识别成“CMSIS-DAP”否则设备管理器里就是一个带问号的未知设备。判断方式并不难。插上DAP后打开设备管理器如果是“符合HID标准的厂商定义设备”大概率是V1如果显示“CMSIS-DAP”或者“调试器”字样多半是V2。更准确的办法是看USB设备描述符用Zadig打开如果列表里显示的是“CMSIS-DAP”的名字基本就是V2。有些便宜的板子外壳印着“V2”插上电脑却是HID设备这种不用奇怪先按V2驱动安装装不上再按V1免驱处理就行。如果你还在用Win7那我的建议是直接用V1固件。Win7对WinUSB的兼容性比较差CMSIS-DAP V2在Win7下经常需要手工折腾inf文件还会遇到签名问题得不偿失。V1虽然慢胜在稳定老系统上老老实实跑V1是最省心的方案。3.2 Windows 10/11环境下安装WinUSB驱动的具体步骤在Windows下给V2的DAP装驱动我最常用的方法是用Zadig。步骤如下把DAP插上电脑USB口打开设备管理器确认有一个带黄色感叹号的未知设备。打开Zadig在Options里勾选List All Devices这样能看到所有USB设备。在下拉列表中选中你的DAP设备。注意看USB ID别选成键盘、鼠标或者其他系统设备。右侧驱动选择框里选WinUSB新版本Zadig里可能会显示为“WinUSB v6.x”。点击Replace Driver等待替换完成。替换成功之后设备管理器里会多出一个“USBSerial”或者“CMSIS-DAP”设备名字可能还带感叹号但驱动已经是WinUSB了。这时候再打开Keil调试器列表里通常就能看到CMSIS-DAP了。除了Zadig也可以用inf文件手动安装右键未知设备选择更新驱动指向资源包里的CMSIS-DAP_v2.inf让系统从磁盘安装。但说实话inf手动安装比Zadig更容易遇到签名校验的问题我个人更推荐Zadig尤其在Win11新版本上Zadig绕过的麻烦少很多。对了不建议使用那种“一键更新驱动”的第三方工具来装DAP驱动它们很容易把设备识别成别的类型装上之后反而更神秘。3.3 虚拟串口驱动别装错插上DAP如果设备管理器里出现两个未知设备其中一个就是虚拟串口。这时候要在串口驱动文件夹里找对应芯片的驱动。怎么判断是CH340还是CP210x还是FTDI呢看板子上的芯片丝印。大部分DAP板子用CH340丝印是“CH340G”或“CH343G”有些蓝色小板用CP2102丝印是“CP2102”还有个别的是FT232丝印是“FT232RL”。对应装好驱动后设备管理器会出现“COMx”端口。这里我要提醒一句虚拟串口驱动跟调试器能不能识别是两码事经常有人把“串口驱动装好了”当成“DAP驱动装好了”结果在Keil里还是找不到调试器急得团团转。你在排查的时候先分清设备管理器里那个没装驱动的设备到底是“调试器”还是“串口”方向对了剩下的问题都好办。3.4 Linux和macOS基本不用折腾如果你是在Linux下开发CMSIS-DAP V1插上就能用V2在多数发行版上也被内核原生支持。唯一可能要处理的就是权限普通用户默认访问不了USB设备需要在udev规则里加一行把当前用户加入dialout组或者写一条rule把DAP设备的权限设为0666。macOS上我的使用经验是即插即用OpenOCD和pyOCD都能直接认出来基本没遇到驱动问题。4. 让CMSIS-DAP真正开始干活Keil、IAR、OpenOCD三平台实战4.1 接线别接反SWD四根线是底线驱动弄好之后接着就是接线。CMSIS-DAP接目标芯片常规模块是SWD四线SWDIO、SWCLK、GND、3V3。SWDIO是数据线SWCLK是时钟线GND必须和目标板共地3V3是目标板的供电参考不是给目标板供电用的这一点最容易误解。以最常见的STM32F103C8T6蓝色板子为例DAP的SWDIO接PA13SWCLK接PA14GND接板子GND3V3接板子3V3。杜邦线建议越短越好超过20cm长度后在高速模式下很容易出现信号完整性问题表现为能连上但烧写不稳定、时不时报错。如果你要用排线连接尽量用带屏蔽或绞合的那种别用一堆乱糟糟的飞线。很多DAP板子上还有一个VCC引脚写的是给目标板供电的但我不建议用它给STM32核心板供电。核心板自己用USB线供电最省事DAP的VCC只用来做电平匹配确保调试器的IO电平跟目标板一致。如果目标板是5V系统DAP的VCC就不能直接接3V3要先确认DAP有没有电平转换能力没有的话老老实实加个逻辑电平转换器不然调试时偶尔正常偶尔抽风。4.2 Keil MDK里的配置步骤Keil MDK是最常见的开发环境。装好驱动并确认设备管理器识别之后配置步骤如下打开工程进入Options for Target切到Debug选项卡。右侧调试器列表选择CMSIS-DAP Debugger注意不是ULINK不是ST-Link也不是J-Link。选好之后点旁边Settings在Debug选项卡里确认Port是SWMax Clock可以先设在1MHz等证明连接稳定以后再往上加。接着切到Flash Download选项卡勾选Reset and Run然后确认Programming Algorithm里有目标芯片对应的Flash算法。比如STM32F103C8T6就是STM32F1xx Flash 128kB。如果没有这个算法从Pack Installer里装好对应的Device Family Pack再回来就有了。配置完点OK然后在Debug菜单里点Start Debug Session。正常的话左下角会显示芯片ID然后进入仿真界面单步、打断点、读寄存器都没问题。我第一次配置的时候卡在“找不到CMSIS-DAP”后来才发现是Debug选项卡右侧选成了ST-Link Debugger改过来重启工程就好了。这类选择错调试器的问题比驱动问题更常见。4.3 IAR下只需要改一处IAR for ARM的配置更简单。Project - Options找到Debugger分类右侧Driver下拉框里选CMSIS-DAP然后下面还有个Extra Options一般不需要动。如果你的IAR版本比较老列表里可能不叫CMSIS-DAP而是叫“TI XDS”或者“ST-LINK”那就需要升级一下IAR版本或者确认一下驱动是不是装好了。IAR对WinUSB驱动的兼容性比Keil略挑剔遇到识别不到的情况优先确认设备管理器里的设备名如果显示的是“USBSerial”而不是“CMSIS-DAP”得先回去用Zadig重新替换驱动。4.4 OpenOCD和pyOCD命令行才是跨平台通用方案如果你用VS Code插件Embedded IDE做开发或者干脆喜欢命令行那OpenOCD是绕不开的。最常用的命令是openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg-f指定的是调试器接口配置和目标芯片配置这两步不能少。openocd启动后会在终端打印连接信息看到“target halted”之类的内容就说明已经连上目标芯片了。这时候可以另开一个终端连本机的telnet端口输入halt、flash write_image、reset之类的命令做烧录。pyOCD是另一种选择它由Arm官方在维护命令更简洁pyocd list pyocd flash -t stm32f103c8 firmware.hexpyOCD的优势是可以直接通过配置文件管理多个DAP做自动化的批量烧录特别方便。我在产线测试那会儿就是靠pyOCD脚本一次性烧录三块板子的比一个个用Keil点要省太多事。5. 我在实际项目里踩过的坑识别不到、烧录失败、速度异常的完整排查链路5.1 插上USB后设备管理器里毫无反应的排查链路这是问得最多的一个问题。DAP插上电脑设备管理器里什么都没有甚至USB设备列表里连“未知设备”都不显示。遇到这种情况我的排查顺序是固定的第一步换线。别用一根看起来能充电的数据线很多USB线只有电源线没有数据线插上之后电脑只知道耗电不知道设备。这一步能解决大概三成的问题。第二步换口。电脑主机前面的USB口经常供电不足尤其DAP板载了串口电路的情况下峰值电流一上去就掉线。换到机箱背面直连主板的USB口或者换个带独立供电的HUB再试。第三步看设备管理器里的“USB控制器”是不是有感叹号。如果这里出现“未知USB设备(设备描述符请求失败)”说明USB枚举这关没过问题多半在DAP的USB接口或者固件上。用万用表量一下USB口的D和D-对地电阻再考虑重刷固件。如果设备管理器里出现的是“符合HID标准的厂商定义设备”恭喜至少USB层面是通的这时候问题已经不在驱动而在调试器固件和上层软件配合上。5.2 设备识别正常但连不上目标芯片USB层面通过了Keil里也能看到CMSIS-DAP但一连接目标芯片就报错“Error: Flash Download failed”或者“RDDI-DAP Error”这种我遇到得最多。从接线开始查先把DAP的SWDIO、SWCLK、GND、3V3四根线拔下来重新插一遍。特别注意共地GND不牢是SWD连接失败的第一大原因。然后检查目标板是否单独供电有些时候目标板靠DAP的3V3带不动整个芯片都没跑起来当然连不上。接着降低速度。在Keil的CMSIS-DAP Settings里把Max Clock从1MHz降到100kHz很多在线调试不稳定的问题纯粹就是速度太快。我之前遇到过一块走线很乱的PCB1MHz下死活连不上降到100kHz后不仅能连烧录也稳定了速度再慢慢调回去。还有一个我记忆深刻的坑STM32F103C8T6最小系统板上那颗100nF的复位电容。目标芯片的复位脚如果被大电容拖着电气复位信号波形不陡DAP在复位序列中抓不住芯片就会出现“时好时坏”的诡异现象。解法是把DAP的NRST和板子的NRST之间断开也就是不接NRST线或者把复位电容换成10nF以下再不行就在RST脚上加个上拉电阻。5.3 烧录到一半报错的几种典型情况烧录过程中段报错跟完全连不上是另一类问题。我见过最多的几种报错基本可以按下面的表格对号入座报错信息常见原因处理办法Cannot access Memory连接不稳定或速度太高降速、检查接线Flash Download failed - Target DLL has been cancelledFlash算法不对或芯片读保护重选算法、解除读保护RDDI-DAP Error供电波动或目标芯片复位异常补焊SWD焊点、查供电电容其中读保护是个很容易忽略的点。STM32如果开了读保护默认情况下调试器是无法直接擦除烧录的。解决办法是先用一个能执行解锁的调试器把读保护等级降到0级或者按照芯片手册用特定的方式擦除全片。这个操作要小心如果设置成了最高等级芯片就直接变砖了没有任何办法解锁。5.4 速度调优的一个反直觉建议很多人拿到DAP之后第一件事就是把Keil里的速度调到最大觉得越快越好。我的建议是不要。调试速度受两个瓶颈限制一个是DAP固件本身一个是连接线缆和目标板布局。V1固件的DAP在理论上限就摆在那里你调再高也没用V2固件如果用的是优质杜邦线8MHz到10MHz通常没问题但一旦线缆质量差一点比如用了那种十几块钱一堆的排针线高速下就经常随机报错。最稳的做法是先以1MHz跑通整个烧录和调试流程然后记下从点击Download到烧录完成的时间再逐步往上调直到出现第一个错误再退回一档。这个“最优速度”才是属于你的实际速度而不是参数表上的最大值。6. 关于这套资源包再说几句实在话6.1 V1还是V2不要只看外壳印刷市面上很多DAP都自称“CMSIS-DAP V2”到手一测却是HID设备。这倒不一定是骗人很多低成本的V2固件只改了USB描述符没有做底层传输优化实际速度还不如V1改为高速模式。想验证的话插上电脑后在Zadig里看设备名显示CMSIS-DAP的是V2显示“符合HID标准厂商定义设备”的是V1或者“伪V2”。真较真的话可以用pyOCD跑一次带宽测试或者直接烧一个100KB以上的固件看时间差。如果只是为了普通开发调试V1其实也够用只是烧录稍慢没必要为了“V2”两个字多花钱。6.2 用资源包之前先做个“设备登记”我一直建议别人拿到资源包之后先按里面的进度自查表走一遍每次排查完一个环节就把状态记录下来。这听起来很繁琐但真的能避免重蹈覆辙。特别是同一个工程里既有DAP又有串口、还有ST-Link、J-Link都插着的时候设备管理器里的名字穿插到一起没有一份记录很容易把驱动张冠李戴。我的习惯是每次接上新调试器先用便签记下它的PID、VID和当前设备管理器显示名称换驱动之前截图存档。之前折腾一个识别不到的设备来回装了三遍驱动都没好最后翻截图才发现一开始设备管理器里的名字和后来不一样其实第一次手动装驱动时名字已经被带偏了。6.3 获取方式与开源致谢这套CMSIS-DAP使用说明及驱动资源包是免费分享的想获取的朋友按标题在平时找资料的渠道搜一下就能找到。里面的驱动文件我都标注了来源建议下载后先和原厂官网的版本比对一下校验值避免拿到被改动过的文件。CMSIS-DAP能流行起来靠的是ARM把协议公开、社区把固件开源所以这份资源包里也保留了开源项目的出处用的时候记得给原作者点个Star。最后再说一句DAP的驱动装不上、识别不到九成不是硬件坏了而是线材、供电、速度这三件套的问题。把这篇文章里的排查链路从头走一遍大多数问题都能解决。真正需要重刷固件的反而是少数。