新买的USB-Blaster到手,插上电脑,设备管理器瞬间多了一个黄色感叹号。右键看属性,多半是那句熟悉得不能再熟悉的提示:"Windows 无法加载这个设备的驱动程序。驱动程序可能已损坏或不见了。(代码 39)"。如果你还碰上老版本Quartus配新电脑,甚至会被"Windows 无法验证此设备所需驱动程序的数字签名"直接拒之门外。我这些年带FPGA相关的项目,发现很多新手还没摸到JTAG下载器,就先被安装USB-Blaster驱动程序这一步干趴下了。这篇文章我想把这套驱动安装的完整逻辑和所有坑位都拆一遍,包括标准安装步骤、代码39/代码31/数字签名失败的成因与处理思路,以及一些你在网上未必能一次搜全的实操细节。无论你用的是原厂Altera USB-Blaster还是几十块的兼容版,都能按着这套流程走通。
1. USB-Blaster到底是什么,为什么装驱动这么费劲
1.1 它本质上是一个JTAG下载器
USB-Blaster是Altera(后来并入Intel,现在又重新独立成Altera)FPGA/CPLD最常用的下载调试器。它的核心任务就是通过USB接口,把PC端的配置数据转换成JTAG协议信号,经过TDI、TDO、TMS、TCK这几根线烧到FPGA或者CPLD里。简单理解,这就是FPGA世界的"烧录器+调试探头":没有它,你写了Verilog代码、搭好了工程,最终也没法真正运行在芯片上。
但问题往往出现在"下载器"这个词上。操作系统不认识USB-Blaster,它需要一套对应的驱动程序,让Windows知道"这个USB设备是一个可以对外提供JTAG功能的编程器"。驱动文件一般随着Quartus软件一起发布,也就是安装目录下drivers文件夹里那个usbblaster.inf。问题在于,这套驱动和Windows之间的兼容关系,远比想象中敏感。老版本Quartus II 13.0那一代驱动,在Windows 10/11上经常因为数字签名校验失败直接报代码39;而大量兼容版下载器的硬件ID和原厂不一致,也会导致Windows找不到能匹配的驱动。这些东西叠加在一起,就形成了网上铺天盖地的求助帖。
1.2 原厂、兼容版与硬件ID的区别
这里先要划清一个关键概念:USB-Blaster原厂和兼容版,用的不一定是一颗芯片。原厂USB-Blaster使用的是Cypress FX2系列USB芯片(比如CY7C68013A),它的USB Vendor ID是0x09FB,产品ID一般是0x6001或者0x6010。插上电脑后,设备管理器里看到的硬件ID会带有VID_09FB,这种情况下用Quartus自带的usbblaster.inf基本都能对上。
兼容版则五花八门。有的质量好一点,直接照抄了原厂的VID和PID,装驱动时和原厂一模一样。有的则保留了Cypress芯片默认的VID_04B4,或者用了别的PID,Windows在inf文件里找不到匹配项,就会把它识别成"未知USB设备"或者干脆不给驱动。更麻烦的是,有些兼容版用的是FTDI方案的芯片,硬件ID变成VID_0403,那就是另一套驱动逻辑了。所以你在开始装驱动之前,第一件事不是急着点"更新驱动程序",而是先打开设备管理器看硬件ID。这一步能帮你判断手上这个下载器到底是什么方案,省掉后面大量试错时间。
提示:打开设备管理器的方法是按Win+R输入devmgmt.msc后回车,或者右键开始菜单直接选"设备管理器"。找到带黄色感叹号的设备,右键->属性->详细信息->硬件ID,就能看到VID和PID。
2. 安装前的准备:版本、驱动文件和系统环境
2.1 驱动文件从哪里拿
最常见的方式是装好Quartus之后,从安装目录里找驱动。以Quartus II 13.0sp1为例,默认路径是:
C:\altera\13.0sp1\quartus\drivers\blaster里面一般会有x32和x64两个子目录,分别对应32位和64位系统,安装时要根据系统位数选择对应的文件夹,别一上来就选错。不然inf文件虽然存在,但设备安装时匹配不上,一样会报找不到兼容驱动。
新版Quartus Prime Lite 20.1的路径类似:
C:\intelFPGA_lite\20.1\quartus\drivers\blaster如果你还没装Quartus,也可以单独去官网下载USB-Blaster驱动包。在搜索引擎里搜"USB-Blaster Windows driver",或者在Altera/Intel的下载页面里找"USB-Blaster driver",会有一个独立的驱动安装包,里面同样包含usbblaster.inf。不过我的建议是:既然驱动最终是给Quartus用的,那你大概率早晚要装Quartus,不如直接装完Quartus再来处理驱动,反正Quartus也离不开这个下载器。尤其是新版本Quartus Prime自带的驱动,对Windows 10/11的数字签名支持要好很多,能省掉不少麻烦。
还有一个细节:Quartus版本和Windows版本的匹配问题。如果你手里只有老电脑上的Quartus II 13.0安装包,而你要在新电脑上安装USB-Blaster驱动,那装不上的概率非常高,特别是Windows 11。我个人的经验是:要么换新版本Quartus Prime Lite,要么老老实实按照后面第4节的方法处理数字签名问题,二选一,没有第三条捷径。
2.2 设备管理器怎么看硬件ID
在开始操作前,先把USB-Blaster插上电脑。正常情况下,你会看到设备管理器里多了一个带黄色感叹号的设备,名字可能是"未知设备"、"USB Serial"、"Altera USB-Blaster",或者干脆显示为一个宽泛的USB控制器类别。右键这个设备,选"属性",切到"详细信息"页签,把属性下拉框切到"硬件ID",你会看到类似下面的内容:
USB\VID_09FB&PID_6001&REV_0001 USB\VID_09FB&PID_6001重点看VID和PID。如果VID是09FB,说明设备使用的就是Altera原厂(或按原厂方案兼容)的硬件ID,后面用Quartus自带的inf就能直接对上。如果VID是04B4或者其他值,那就说明这个兼容版保留了Cypress默认ID,此时无脑装原厂驱动大概率会失败。这种情况下的处理方案,我在3.3节里会具体讲。
另外我要提醒一下:有时候插上USB-Blaster,设备管理器里压根不显示任何未知设备,也没有感叹号,就好像USB完全没被识别。这种情况先别急着怀疑驱动,先换一个USB口、换一根数据线试试。USB-Blaster对线材质量有一定要求,有些USB线只能充电不能传数据,插上去当然没反应。我见过至少两个朋友卡在这个低级问题上,排查了半天驱动,最后换了一根线就好。
3. 标准安装流程(一步一步来)
3.1 推荐安装顺序与操作细节
如果你用的是原厂或者VID匹配的兼容版USB-Blaster,最标准的安装驱动操作顺序是这样:
- 先装好Quartus,确认安装目录下有drivers/blaster文件夹。
- 插入USB-Blaster,在设备管理器里找到带感叹号的设备。
- 右键设备,选择"更新驱动程序"。
- 在弹窗里选择"浏览我的电脑以查找驱动程序"。
- 点击"让我从计算机上的可用驱动程序列表中选取"。
- 在列表界面点"从磁盘安装",再浏览到usbblaster.inf所在位置。
- 选中inf后,列表里会出现"Altera USB-Blaster",选中它,点"下一步"。
- 如果出现类似"Windows 可以更新你的驱动程序"的弹窗,选择"否,不更新"。
- 等待安装完成,设备管理器里的感叹号消失。
第5步是很多教程没讲清楚的地方。不少教程会直接让你浏览到drivers/blaster目录,让系统自动搜。这样不是不行,但有时候Windows会因为安全策略直接提示"指定的文件夹没有包含设备的兼容软件驱动程序"。从"可用驱动列表"这一步进去,本质上是绕过了系统对驱动目录的自动匹配校验,把选择权完全交到你手上,成功率会高很多。
还需要注意一个细节:浏览inf时一定要选对位数。64位系统进x64目录,32位系统进x32目录。如果你装的驱动文件夹下只有一个子目录(比如只有win64),那就直接选它。选错了Windows不会明确告诉你"位数不对",只会以找不到兼容驱动的形式拒绝,容易浪费大量时间。
3.2 在Quartus Programmer里验证
驱动装好之后,怎么确认真的能用?打开Quartus,点击菜单栏Tools->Programmer,然后在打开的窗口左上角点"Hardware Setup"。正常情况下,在"Currently selected hardware"下拉框里会出现"USB-Blaster [USB-0]"选项,选中它,然后关闭设置窗口。如果这一步能看到USB-Blaster,说明驱动层面已经通了。
接下来就可以做烧录验证了。在Programmer界面点"Auto Detect",选择你实际使用的FPGA或CPLD芯片型号,软件会自动识别JTAG链上的芯片。如果自动识别成功,说明不只是驱动通了,下载器和板子之间的JTAG连接也没问题。
我遇到过一种情况:驱动装好了,设备管理器里也显示"Altera USB-Blaster"没有感叹号,Hardware Setup下拉框里也有"USB-Blaster [USB-0]",但一Auto Detect就提示"JTAG chain broken"。这里90%的原因不在驱动,而在硬件连接:要么是TDI/TDO/TMS/TCK接线有误,要么是目标板没上电,要么是下载线太长导致信号质量差。排错思路是先用万用表确认JTAG引脚电平和连接关系,再检查板子供电,最后才考虑是不是下载器本身坏了。
3.3 兼容版USB-Blaster的PID不匹配怎么办
如果硬件ID里VID不是09FB,而是04B4或者别的值,直接装Quartus自带驱动大概率会提示"指定的文件夹没有包含设备的兼容软件驱动程序"。这时候有两个选择。
第一个选择是修改inf文件。用记事本打开usbblaster.inf,找到里面类似下面这样的段落:
[Altera.NTamd64] %USBBlasterName% = USBBlaster_Driver, USB\VID_09FB&PID_6001 %USBBlasterName% = USBBlaster_Driver, USB\VID_09FB&PID_6810把里面的VID和PID替换成你自己设备的硬件ID值。比如设备管理器里查到的是VID_04B4&PID_8613,就把其中一行改成这样:
%USBBlasterName% = USBBlaster_Driver, USB\VID_04B4&PID_8613保存后重新走一遍3.1的安装流程,选择修改过的inf。这个方法本质上就是"告诉Windows,这个设备就是USB-Blaster",让系统按USB-Blaster的驱动来加载。需要注意,修改inf文件后,如果Windows提示数字签名相关的错误,那就又回到第4节的数字签名问题上了。
第二个选择是直接用别人做好的兼容版驱动。网上搜"USB-Blaster 兼容版 驱动"或者"USB Blaster clone driver",能找到一些整合好的驱动包,里面已经预先加好了常见兼容版的PID/VID。不过这种驱动来源不透明,有安全风险,装之前最好确认一下文件的来源可靠,杀毒软件不报警再使用。我个人更倾向于自己改inf,至少你知道自己改了什么。
4. 代码39、代码31、数字签名问题:原因与排查
4.1 代码39:驱动加载失败的三种可能
代码39的完整提示是"Windows 无法加载这个设备的驱动程序。驱动程序可能已损坏或不见了。"这句话的坑在于,它把"驱动损坏"和"驱动加载失败"混在一起说,实际原因五花八门。根据我的排查经验,USB-Blaster安装驱动时报代码39,十有八九是下面三种情况之一。
第一种是数字签名验证失败。这是老Quartus版本在Windows 10/11上最常见的问题。系统要求驱动文件的数字签名必须受信任,但老的usbblaster.inf和配套的.sys文件用的还是旧签名,Windows不认,于是拒绝加载。这种情况下驱动文件本身没坏,纯粹是系统信任链的问题。
第二种是驱动残留冲突。你之前可能装过一个坏的驱动、手动删除过设备,或者被Windows Update自动更新过一次通用驱动,导致注册表里残留了一条错误记录。新的驱动装上去,折腾半天还是代码39。这种情况最简单的办法是:设备管理器里右键设备->卸载设备,弹窗里勾选"删除此设备的驱动程序软件",然后重新扫描硬件改动,再按前面3.1的流程重装一次。
第三种是64位系统和32位驱动的错配。这个我前面已经提过,如果inf位置选错,系统会提示找不到兼容驱动,但也可能以代码39的形式出现。检查方式很简单,确认你安装时浏览的是x64还是win64目录。
4.2 代码31:依赖缺失或设备状态异常
代码31的提示是"由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常。"和代码39相比,代码31更偏向"驱动文件存在但依赖条件不满足"。
在USB-Blaster的场景里,代码31通常有几个诱因:一是系统中和USB相关的底层服务状态异常(比如Plug and Play服务),二是之前用第三方工具清理过系统导致inf缓存损坏,三是Windows更新后驱动的加载状态没有刷新。我的排查建议是:先在设备管理器里把这个设备卸载掉,勾选删除驱动程序软件,然后直接重启电脑,重启后再插入下载器,让操作系统从零开始识别一次。如果重启后依然报代码31,可以试着用管理员权限打开命令提示符,执行:
pnputil /enum-drivers看看系统里是不是已经存在多个版本的USB-Blaster相关驱动。如果有旧版本残留,用pnputil把不相关的旧驱动删掉,再重新安装驱动。这个方法我在处理代码31时用过很多次,比右键卸载干净得多。
4.3 数字签名验证失败:三种处理路径
如果你看到的错误是"Windows 无法验证此设备所需驱动程序的数字签名(代码52)",或者是在安装过程中弹出"Windows 无法验证此设备所需的驱动程序的数字签名。最近的硬件或软件更改安装的文件可能未正确签名或已损坏"的提示,那基本可以确认是数字签名问题。处理手段有三条路。
第一条路:临时禁用驱动程序强制签名。适用于长期不折腾系统、只想把驱动装上就完事的场景。做法是:先拔掉USB-Blaster,然后按住Shift键点开始菜单里的"重启",进入高级启动界面。依次选择"疑难解答"->"高级选项"->"启动设置"->"重启",重启后会进入一个蓝色的启动选项菜单,按7或者F7选择"禁用驱动程序强制签名"。进入系统后,马上执行3.1的安装流程,把驱动装上。装完再正常重启,驱动一般就能用了。
第二条路:开启测试模式。这个适合需要反复调试驱动、不想每次重启都进高级启动的场景。管理员权限打开命令提示符,执行:
bcdedit /set testsigning on重启后系统进入测试模式,桌面右下角会出现"测试模式"水印,此时驱动签名校验被放宽。装好USB-Blaster驱动、确认烧录正常后,再执行:
bcdedit /set testsigning off重启恢复。注意,测试模式只建议在开发机上临时用,不要在长期使用的生产环境或工作电脑上一直开着,有安全隐患。
第三条路:换用新版驱动。这是治本的方法。新版本Quartus Prime Lite自带的驱动已经拿到了微软的签名,在Windows 10/11上安装时不会再被卡签名。如果你的项目开发需求不依赖老版本Quartus特有的功能,直接用新版Quartus肯定是最省心的选择。如果非要保老版本Quartus,也可以尝试把新版Quartus里的drivers/blaster文件夹整体拷出来,覆盖到老版本Quartus对应目录,再手动安装新inf驱动。这个方法我只在部分组合下实测成功过,不是所有版本都能通用,但值得一试。
注意:无论用哪条路,都不要直接关闭系统的Secure Boot来绕过签名验证。Secure Boot是系统底层安全机制,关掉它可能让你的电脑更容易被恶意软件攻击,尤其是工作电脑。
5. 实操避坑清单与经验笔记
5.1 常见错误速查表
整理了这段时间遇到过的、以及朋友们反复问到的错误现象和处理方案,方便你直接照着排查:
| 错误现象 | 错误代码/提示 | 根本原因 | 处理方案 |
|---|---|---|---|
| 设备管理器感叹号 | 代码39 | 驱动签名失败、驱动残留、位数选错 | 卸载设备并删除驱动软件,按3.1重装;必要时进入高级启动禁用强制签名 |
| 设备管理器感叹号 | 代码31 | 系统服务异常、驱动依赖缺失 | 卸载设备后重启,用pnputil清理旧驱动,再重装 |
| 安装时提示无法验证数字签名 | 代码52 | Windows签名校验不过 | 高级启动禁用强制签名,或testsigning,或换新版Quartus驱动 |
| 找不到兼容驱动 | 指定的文件夹中没有包含设备的兼容软件驱动程序 | 硬件ID和inf不匹配 | 查看硬件ID,修改inf或使用兼容驱动包 |
| Hardware Setup无设备 | No Hardware | 驱动没装好,或下载器未识别 | 回到设备管理器检查状态,确认USB口和线材正常 |
| Auto Detect失败 | JTAG chain broken | 板子未供电、接线错误、线缆过长 | 检查JTAG接线和电信号,缩小排查范围 |
这张表基本覆盖了USB-Blaster从设备识别到烧录验证的完整链路。建议你把表保存下来,遇到问题时先对号入座,别一上来就重装系统。
5.2 我踩过的坑和几条建议
先说一个我自己的真实经历。最早我在Windows 10上装Quartus II 13.0带的驱动,折腾了整整一个晚上,一直卡在代码39。当时试遍了网上说的"禁用强制签名"、"换个USB口"、"重装驱动",一度怀疑下载器本身坏了,最后在设备管理器里对比硬件ID时发现,其实是驱动残留冲突。把那几条老的USB-Blaster记录全部卸载干净,再装一次就好了。所以每次遇到安装问题,我的第一反应永远是"先把旧的卸载干净,再重装一次",而不是在原有错误基础上反复点更新驱动。这个思路适用于绝大多数驱动类故障,不光是USB-Blaster。
另外给你几个长期建议:
- 买兼容版USB-Blaster时,开口就问一句"VID是不是09FB,能不能直接适配Quartus"。靠谱的商家会直接告诉你,不靠谱的说不出所以然,那就别买。
- 驱动安装最好按"先装Quartus,再插下载器"的顺序来。如果反过来先插下载器,系统可能会自动装一个Windows Update带来的错误驱动,后面又要多一步清理。这个顺序问题在Windows 10/11上尤其明显。
- 如果你只是学习或者做原型验证,兼容版下载器够用了;但如果是在做量产或者对稳定性要求高的项目,还是建议用原厂或者授权第三方的正品。下载器出问题排查起来真的很头痛,省下的钱不够耽误的时间。
- 线材和数据线一定要用短而粗的。JTAG信号本身频率不高,但线太长或者质量差会引入噪声,导致明明驱动没问题却老是烧录失败。
最后再分享一个小技巧:如果手头有多个版本的Quartus,建议优先用新版本带的驱动。新驱动不一定能向下兼容所有芯片的烧录功能,但至少能解决你眼前这个装不上驱动的问题。装好之后,如果老版本Quartus有特定的IP核或工程兼容需求,再在老版本里手动指定inf文件调用新驱动路径就行。我自己现在的工作环境就是用新版Quartus的驱动文件配合老版本开发环境使用,这样既保住了老工程,又绕开了Windows新版本的签名校验问题,算是一个比较实用的折中方案。