1. 为什么你的设备突然失灵了最近有个做嵌入式开发的朋友找我吐槽说他的DAP-LINK调试器突然不能用了。我问他是不是用了zadig打驱动他一脸惊讶地问我怎么知道的。这种情况我见得太多了——很多开发者都是在设备正常工作的情况下手痒去折腾驱动结果把好端端的设备搞出各种奇怪问题。zadig这个工具本身是个好东西它能帮我们安装USB设备的通用驱动。但就像手术刀在医生手里能救人在外行手里可能伤到自己一样zadig用不好反而会带来麻烦。最常见的就是两种场景一种是HID设备比如鼠标键盘突然失灵另一种是DAP-LINK这类调试工具无法识别。先说HID设备的问题。很多键盘鼠标都是免驱的系统自带驱动就能正常工作。但有些开发者看到设备管理器里显示HID-compliant device就觉得不够专业非要用zadig打个专属驱动。结果打完驱动发现鼠标指针不动了键盘输入没反应了。这不是设备坏了而是你强行安装的驱动和系统自带的驱动冲突了。2. 设备管理器里的秘密遇到设备异常时设备管理器就是我们的第一战场。按WinX选择设备管理器你会看到所有硬件设备的树状列表。出问题的设备通常会显示黄色感叹号或者干脆被归类到其他设备里。对于HID设备异常的情况处理流程其实很简单找到有问题的设备可能在键盘、鼠标和其他指针设备或者人体学输入设备分类下右键选择卸载设备重要的一步勾选删除此设备的驱动程序软件拔掉设备重新插入这里有个细节很多人会忽略——USB接口的独立性。我遇到过在一个USB口卸载驱动后换到另一个USB口设备还是异常的情况。这是因为Windows会给每个USB接口单独保存驱动配置。保险起见最好在所有USB接口上都重复一遍卸载过程。3. DAP-LINK调试器的救赎DAP-LINK的问题稍微复杂些。正常情况下它应该被识别为CMSIS-DAP设备。但有时候会显示为WebUSB设备或者其他奇怪的名字。这时候就需要用到zadig来修复了。先说说最彻底的解决方案在设备管理器中找到所有与DAP-LINK相关的设备包括带感叹号的逐个右键选择卸载设备并勾选删除驱动拔插设备直到它显示为未知设备或者带问号的设备打开zadig在Options菜单里勾选List All Devices在下拉列表中找到你的DAP-LINK设备选择WinUSB或者libusb-win32驱动具体选哪个要看你的开发环境需求点击Install Driver这里有个坑要注意zadig有时候会显示多个相似的设备名一定要确认你选的是正确的那个。我有次不小心给USB集线器打了驱动结果所有接在上面的设备都不能用了。4. Keil环境下的特殊处理如果你是用Keil开发可能会遇到更棘手的情况设备管理器里显示DAP-LINK正常但Keil就是找不到调试器。这时候需要手动指定驱动在设备管理器中右键DAP-LINK设备选择更新驱动程序选择浏览我的计算机以查找驱动程序选择让我从计算机上的可用驱动程序列表中选取在硬件列表中找到通用串行总线设备在厂商列表中选择Keil - TOOLS by ARM在型号中选择ULINKplus CMSIS-DAP如果找不到Keil的选项那可能是你的MDK安装包不完整。需要重新安装Keil MDK软件包。我有个血泪教训有次折腾驱动把系统搞乱了重装Keil都不行最后发现是Windows自动更新把驱动又还原了。后来我学会了在设备管理器里禁用Windows自动安装驱动更新。5. 预防胜于治疗说了这么多修复方法其实最重要的还是预防。我总结了几个原则设备正常工作就别折腾驱动使用zadig前先备份当前驱动可以用DriverStore Explorer工具一次只改动一个设备的驱动方便排查问题记录下每次驱动改动的情况出问题时可以回溯对于团队开发环境我建议准备一个干净的虚拟机镜像。这样即使把驱动玩坏了也能快速恢复到初始状态。如果是个人电脑可以考虑使用系统还原点功能在折腾驱动前先创建一个还原点。最后提醒一点有些国产开发板会魔改DAP-LINK固件这类设备可能需要特定的驱动。遇到问题时先查查开发板厂商的文档不要盲目使用通用解决方案。我见过最离谱的情况是同一个厂家的不同批次开发板用的驱动都不一样。