玩单片机开发的人,应该都跟我一样在Win10上被USBasp的驱动折磨过。插上设备,系统提示安装驱动,结果下一秒就弹出“INF不包含数字签名信息”,或者设备管理器里黄色感叹号写着“Windows 无法验证此设备所需的驱动程序的数字签名”。这个报错看着吓人,其实解决办法就那么几种,关键是搞懂系统为什么要拦你、以及用什么姿势绕过它最省事。今天就把这个问题掰开揉碎讲清楚,顺便把CH340、ST-Link、J-Link这些同类驱动问题一并收拾了。
1. 先搞明白:为什么Win10死活不让装这个驱动
1.1 “INF不包含数字签名信息”到底在说什么
先解释一下背景。Windows从Vista 64位开始引入了强制驱动签名机制,Win10 32位和64位都默认开启。驱动的本质是一段能运行在系统内核层的代码,权限极高,一旦跑起来可以访问任何硬件资源和内存地址。如果这段代码被恶意篡改,后果等同系统被完全控制。所以微软要求:凡是进入内核的驱动,必须携带一份由受信任机构颁发的数字签名,系统在安装时会校验签名是否完整、颁发者是否在信任列表里。签名校验不通过,系统直接拒绝安装。
你双击usbasp.inf时看到的“INF不包含数字签名信息”,翻译成人话就是:这个INF文件里没有声明任何数字签名配套信息,系统无法确认这个驱动“到底是谁写的、有没有被改过”。这种情况下,驱动包里即便有sys文件,系统也不会把它加载到内核。
1.2 USBasp这个老古董为什么没签名
USBasp是开源的AVR ISP下载器方案,作者Thomas Fischl在2008年左右发布的,硬件核心就是一颗ATmega8或者ATmega48,成本极低、电路极其简单。问题是,这个项目从诞生起就没打算做商业驱动分发,驱动只以源码和预编译INF方式提供,从来没有购买过EV代码签名证书。在当年WinXP、Win7时代,系统对驱动签名没有强制要求,所以插上就能用。
到了Win10时代,事情就变了。微软把驱动签名校验从“可选”变成了“强制”,而USBasp的驱动文件还是十几年前的老样子,没有签名,自然过不了关。类似情况在开源硬件圈特别普遍,比如某些USB-Blaster仿品、老版本FriendlyARM开发板自带的串口驱动,都会遇到同一个问题。这跟驱动本身好不好用没关系,纯粹是“时代变了,证件没跟上”。
设备管理器里看到的典型表现有这么几种:
| 错误现象 | 错误代码 | 含义 |
|---|---|---|
| 设备黄色感叹号 | 52 | Windows无法验证此设备所需驱动程序的数字签名 |
| 未知设备 | 28 | 未安装驱动 |
| 手动安装提示INF不包含数字签名信息 | 无 | INF签名校验不通过 |
2. 最省事的方案:临时关闭驱动签名强制
2.1 重启到启动设置,按一次F7
如果你只是想赶紧把USBasp用起来,不需要长期调试内核驱动,那用Win10自带的“高级启动”功能最方便,全程不需要敲任何命令。
操作路径如下:
- 打开“设置 → 更新和安全 → 恢复”,在“高级启动”下点击“立即重新启动”。
- 电脑重启后会进入蓝色菜单,依次点“疑难解答 → 高级选项 → 启动设置”。
- 点击右下角的“重启”按钮,系统再次重启。
- 重启后会出现一列启动选项,按数字键“7”或者功能键“F7”选择“禁用驱动程序强制签名”。
这个选项是“一次性”的,只对本次开机生效。系统正常进入桌面后,你再去设备管理器手动更新驱动,选择usbasp.inf所在目录,这回就能正常装上了。
2.2 装完之后如何确认驱动真的生效
驱动装完后,不能只看设备管理器里没有感叹号就完事了。我的习惯是用两个手段验证:
- 设备管理器里找到“USBasp”或“LibUSB-Win32 Devices”分类下的设备,右键属性,看到“此设备运行正常”才算是系统层面认了。
- 打开ProgISP或者avrdude,尝试连接目标芯片。比如用avrdude命令行验证:
avrdude -c usbasp -p m328p,如果输出显示“Device signature = 0x1e950f”,就说明下载器已经能正常跟单片机通信了。
有一点要注意:如果设备管理器里识别到的是“未知设备(Unknown Device)”,说明USBasp的固件没有正常跑起来,或者USB线有问题,这时候跟驱动签名无关,先去解决硬件识别问题再说。
2.3 这个方法有什么坑
这个方法最大的缺点是“一次性”。你今天用F7启动装好了驱动,明天正常开机,如果设备被拔掉重插或者系统更新重置了驱动状态,系统还是会拒绝加载未签名驱动。频繁重启到启动设置比较耗时,但好在不需要改动系统配置,适合临时救急和帮朋友处理问题。
另外提醒一句:禁用签名强制只是让你“能安装未签名驱动”,并不等于系统安全防护被关闭。装完驱动后建议正常重启一次,让系统回到签名强制状态,不影响已安装驱动的正常使用。
3. 长期方案:开启测试模式跑未签名驱动
3.1 用bcdedit开启测试模式
如果你要长期使用USBasp,或者日常要调试各种开发板工具,每次开机F7不现实。这时候可以开启Windows的“测试模式”。测试模式是微软给驱动开发者准备的,允许加载未签名驱动,但系统桌面右下角会常驻一个“测试模式”水印,提醒你当前系统处于非正式状态。
开启方法很简单,管理员身份打开命令提示符,执行:
bcdedit /set testsigning on重启电脑后,桌面上会出现“测试模式 Windows 10 专业版”之类的字样,这时候再去设备管理器装USBasp驱动,不会再有签名拦截。安装完成后驱动会一直有效,不再需要每次开机设置。
3.2 测试模式的关闭方法
用完想恢复正常,管理员命令提示符执行:
bcdedit /set testsigning off然后正常重启,水印消失,系统恢复常规签名校验。注意,关闭测试模式后,之前安装的未签名驱动可能还能继续工作,也可能不行,具体看驱动类型和系统版本,所以不要觉得“关了就万事大吉”。
3.3 哪些场景适合用测试模式
测试模式适合你“确定要长期使用某个未签名驱动”的场景,比如USBasp、某些国产串口芯片的老版本驱动、MCU调试工具的自制驱动等。
但我不建议把测试模式当成永久方案。原因很简单:测试模式会把内核签名校验整体放开,这意味着一旦系统被病毒或恶意软件拿到权限,它可以加载自己不签名的内核驱动,防护能力大打折扣。安全软件在某些版本下也会因为测试模式而报黄色警告。个人经验是只在需要的那几天开着,用完立刻关掉,别图省事。
4. 更优雅的思路:用Zadig给USBasp换个带签名的驱动
4.1 为什么USBasp能换驱动
USBasp设备本身用的是ATmega8的USB接口,属于HID或自定义设备,它的VID/PID是十六进制的16c0:05dc。这个VID是“open hardware”项目共用的,PID 0x05dc对应USBasp。巧的是,这类开源设备通常都不挑驱动,可以使用libusb-win32或WinUSB通用驱动。avrdude这些烧写工具本身就是基于libusb库开发,走libusb-win32驱动完全兼容,甚至比原版驱动更稳。
所以思路就是:与其跟微软的签名策略死磕,不如让系统换一个“有签名”的通用驱动来接管USBasp。这个方案不需要重启进高级启动,也不用开测试模式,对新手来说最干净。
4.2 Zadig安装驱动的步骤
Zadig是一个开源驱动安装工具,专门用来替换USB设备的驱动程序,我给它定位是“驱动界的瑞士军刀”。
下载地址是zadig.akeo.ie,一般选最新的2.x版本就行。
操作步骤:
- 把USBasp插到电脑上,打开设备管理器,确认设备出现在“未知设备”或“USBasp”分类下。
- 打开Zadig,在菜单栏选择“Options → List All Devices”,把列表显示所有USB设备。
- 在下拉框里找到“USBasp”(如果显示未知设备,名字可能是“Unknown Device”),选中它。
- 在右侧驱动选择区域,把目标驱动换成“libusb-win32”或“WinUSB”。我个人推荐libusb-win32,avrdude对它的兼容性最好。
- 点击“Install Driver”或“Replace Driver”,等待进度条走完。
装完之后,设备管理器里会多出一个“LibUSB-Win32 Devices”分类,下面就是USBasp设备。这时候打开avrdude烧录,通常直接就能用。
4.3 Zadig方案的注意事项
有几个细节容易翻车,我踩过坑,给你们排掉:
- 如果Zadig列表里找不到USBasp,先检查系统是不是已经装过原版USBasp驱动,装过的话要在设备管理器里先“卸载设备”并勾选“删除此设备的驱动程序软件”,把旧驱动清干净再让Zadig接管。
- 如果设备显示为“Unknown Device”且VID/PID全是0,说明USBasp硬件没被正确识别,大概率是USB线质量差或者供电不稳,换根短线直接插主板后置USB口试。
- 换驱动之后,ProgISP这类老软件可能找不到设备,这是因为它只认自带驱动接口。但avrdude、khazama、AVRDUDE_PROG等新工具完全兼容,不用担心。
这个方法还有个额外好处:对于ST-Link、J-Link、CH340这些设备,如果官方驱动出问题,同样可以用Zadig换WinUSB驱动来救急,尤其在一些奇怪的克隆版本设备上特别管用。
5. 同场加映:CH340、ST-Link、J-Link、CP2102、FT232R同类问题怎么处理
5.1 分清楚“有官方新驱动”和“只能换通用驱动”
USBasp只是冰山一角。很多玩嵌入式的朋友问驱动问题,其实是这些常见的工具链设备:
| 设备 | 典型问题 | 最优解 |
|---|---|---|
| CH340 | Win10可能自动装错或装不上 | 官网下载最新版CH341SER驱动,老版本容易触发签名问题 |
| CP2102 | 设备显示未知设备 | 安装Silicon Labs官方CP210x VCP驱动 |
| FT232R | 无法识别或过期 | FTDI官方VCP驱动,新版已带签名 |
| ST-Link | 设备管理器显示感叹号 | 安装ST官网的ST-Link驱动,或装完STM32CubeProgrammer后自动带驱动 |
| J-Link | 驱动版本不匹配 | 安装Segger官方J-Link Software Pack,它会接管驱动 |
| USBasp | INF无签名信息 | 优先用Zadig换libusb-win32,或临时禁用签名强制 |
这些设备的驱动如果遇到数字签名报错,首先看官方是否发布了新版本驱动。CH340、CP2102、FT232R这些商业芯片厂商,后来都补交了签名证书,新驱动不会再有签名问题。ST-Link和J-Link更不用操心,官方一直在更新。真正会卡在签名坑里的,主要是那些停产、闭源、作者放弃维护的老设备,这时候Zadig是最优解。
5.2 手动指定驱动路径时报“指定的路径不包含适用的设备inf”
这个错误很多人遇到过,原因跟签名无关,是INF文件里声明的硬件ID跟实际设备不匹配,或者驱动包本身缺文件。排查思路:
- 确认INF文件跟sys、cat文件在同一个目录,别只拷一个INF过去。
- 右键INF文件,选择“安装”,看系统有没有给出更具体的错误提示。
- 在设备管理器里点“更新驱动”时,选择“让我从计算机上的可用驱动程序列表中选取”,再点“从磁盘安装”,浏览到INF所在目录。
- 如果还是报错,用记事本打开INF文件,查看
[Manufacturer]和[Models]段里声明的VID/PID,跟设备管理器中“详细信息 → 硬件ID”里显示的对比一下,对不上就是驱动包不对。
6. 实操中容易踩的坑,给你排掉
6.1 装了驱动但avrdude报“cannot find usb device”
这种情况多半是驱动类型不匹配。USBasp设备在不同的驱动下,API接口不一样。avrdude的usbasp编程器后端默认走libusb-win32或libusb 0.1接口,如果你用Zadig装了WinUSB驱动,部分老版本avrdude可能不识别。解决办法:一是换用Zadig重新安装libusb-win32驱动;二是把avrdude升级到较新版本,新版对WinUSB支持更友好。
另外一个容易被忽略的点:多块USBasp同时插入电脑时,avrdude会因为设备枚举不唯一而找不到目标,拔掉多余的下载器再试。
6.2 Win11下同样适用
Win11的驱动签名强制策略跟Win10一脉相承,操作路径稍有变化。Win11下禁用驱动签名强制是:设置 → 系统 → 恢复 → 高级启动,之后的步骤和Win10一致。Zadig方案在两个系统下完全通用。所以你照着这篇文章处理Win11的问题,逻辑上没有任何障碍。
6.3 关于驱动的几个认知误区
第一,驱动装了不等于就能烧录。USBasp只是个USB转SPI/ISP的桥梁,烧录软件(比如avrdude)必须通过正确的驱动接口访问它。驱动类型不匹配,虽然设备管理器看着正常,但软件依然找不到设备。
第二,不要为了装驱动去关掉Windows安全中心或者使用各种系统优化工具。驱动签名问题完全可以用正规途径解决,关安全中心属于杀鸡用牛刀,反而把系统暴露在风险中。
第三,USBasp固件版本也会影响兼容性。早期固件版本(比如2008年左右的1.0)在高速USB 2.0下可能出现识别不稳定,有条件的话先用另一块AVR开发板给USBasp重新刷一遍最新固件(2012年后的版本),能减少很多莫名其妙的问题。
6.4 一个小习惯
我自己的习惯是:每拿到一块新的USB设备(USBasp、ST-Link、CH340等),先不急着装驱动,打开设备管理器看一眼硬件ID和当前状态。这个习惯帮我躲过了不少坑,因为很多时候驱动装不上是硬件本身没被识别,而不是驱动签名问题。硬件ID里如果VID是1A86,是CH340;10C4是CP2102;0403是FT232。看到VID和PID,基本就能判断该去哪个官网找驱动。
回到USBasp这个老古董,我个人的最终建议是:别再用系统自带驱动那一套了,直接Zadig换libusb-win32,一劳永逸,avrdude用得飞起。如果哪天你换了电脑,只要记住“USBasp → Zadig → libusb-win32”这个组合,就再也没有签名报错能拦住你。