ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Vivado识别不到开发板?从驱动到JTAG的完整排查指南

Vivado识别不到开发板?从驱动到JTAG的完整排查指南 先把话说在前面如果你打开 Vivado 的 Hardware Manager发现开发板死活不出现或者显示“No hardware target”别急着上论坛发帖求重装软件。我前前后后帮人处理过上百次这类问题八成以上根本不是 Vivado 本体坏了而是驱动、线缆、连接顺序这些看似不起眼的小环节在捣乱。这篇内容我按自己的排查习惯整理了一遍从现象定位到根因分析再到具体操作和坑点总结都给你写清楚照着走一遍绝大多数情况下都能让板子“现身”。我默认你手上是常见的 Xilinx 平台开发板比如 Artix-7、Kintex-7、Zynq-7000 或 Zynq UltraScale 系列调试接口走 JTAG连接电脑一头是 USB 线Vivado 版本从 2019.1 到 2024.1 都有覆盖。如果你的情况跟这里不完全一样也能在常见问题部分找到思路。1. 先别急着重装 Vivado先搞清楚“无法识别”到底是哪种现象1.1 设备管理器里压根没有新硬件出现这是最常见的一种。你把开发板通上电USB 线通常是 USB Type-C 或 Micro USB插到电脑上然后打开 Windows 的设备管理器刷新半天什么变化都没有。要么是线材问题要么是板子上的调试芯片没工作要么是驱动完全没装上导致系统连设备 ID 都读不到。判断方法很简单拔掉 USB 线再看设备管理器插上 USB 线再看设备管理器反复对比。如果插拔后完全没有新增设备或未知设备那基本可以排除驱动签名问题重点检查线材和板子供电。我遇到的情况里有一小部分人是用错了线。开发板调试口附近写的“UART”或“PROG”字样有的板子那个接口只支持下载 Bitstream不支持 JTAG 调试你要插到标着“JTAG”的那个口或者板上丝印标着“USB JTAG”的口。更坑的是有些 Type-C 线只支持充电不支持数据插上去板子能亮灯但电脑端完全无反应。换一根至少能传数据的线再试很多时候问题就解决了。1.2 Vivado 识别不到但设备管理器里能看到硬件设备管理器里能看到东西比如“USB Serial Converter”或者带黄色感叹号的“Xilinx USB Cable”但双击打开 Vivado Hardware Manager板卡列表就是空的。这里又可以细分两种情况。第一种是设备管理器里的设备带了感叹号说明驱动不对或驱动没装上。第二种是设备管理器里一切正常没有感叹号但 Vivado 的 Hardware Server 或 Hardware Manager 里扫描不到目标。如果是第二种问题往往出在 Vivado 的 cable 驱动没有正确加载或者板子上电时序不对导致 JTAG 链没有被正确枚举。还有一种容易被忽视的情况你同时插了多块开发板Vivado 通过 hw_server 去枚举 JTAG 链时如果其中某块板子的 JTAG 信号线虚焊或电平不匹配整个链都会扫不出来表现就是“哪块板子都看不到”。1.3 Linux 或虚拟机上开发板挂载了但 Vivado 就是不认很多人的开发环境装在 Ubuntu 虚拟机里或者直接用 Ubuntu 物理机。这种情况下系统里可能已经能看到 /dev/ttyUSB0 或 /dev/ttyUSB1lsusb 也能看到 FTDI 芯片但 Vivado 的 Hardware Manager 就是认不出板子。这涉及 Linux 下 USB 设备权限、ftdi_sio 驱动绑定、以及 Vivado 的 cable 驱动是否编译安装的问题。所以解决问题之前先花 30 秒确认你是哪种情况。不要一上来就卸载重装 Vivado那是最后手段不是第一选择。2. 根因分析为什么 Vivado 总是“装好了却认不出板子”2.1 相当一部分人没安装 Cable DriversVivado 安装到最后一步时安装器会问你要不要安装“Install Cable Drivers”。这个选项一般是勾选的但很多人安装时根本不看一路 Next / Yes到最后一个界面也没注意勾选状态。还有的人是只装了 Vivado 本体在安装时跳过了这一步后面用到 Hardware Manager 时才发现驱动根本没装上。实际上Vivado 的线缆驱动也就是 xilinx cable driver主要支撑 Xilinx Platform Cable USB 和 Digilent 系列调试器。它在你安装 Vivado 的目录底下有个专门的子目录比如C:\Xilinx\Vivado\2023.2\data\drivers\xilinx_cable_driver\如果你打开这个目录里面有 Windows 用的安装程序有 Linux 下的源码或预编译模块。很多人不知道设备管理器里的“Digilent USB Device”或“Xilinx USB Cable”实际上是靠这个驱动工作的。安装 Vivado 时即使勾选了驱动也未必真的成功装上。Windows 的驱动签名策略经常拦截掉某些版本的数字签名导致安装器提示成功但设备管理器里还是黄叹号。这种“装没装”的判断不能只看安装日志必须以设备管理器状态为准。2.2 Windows 驱动签名与老版本驱动不兼容Vivado 2020.1 及更早版本里的 cable 驱动在 Windows 10 和 Windows 11 的高版本补丁下经常因为驱动签名问题被系统拒绝加载。这类问题的典型表现就是设备管理器里出现“Windows 无法验证此设备所需驱动程序的数字签名”的提示或者设备状态码是 10设备无法启动。如果要彻底解决最具可操作性的是启动 Windows 的“禁用驱动程序强制签名”模式然后手动安装驱动。具体方法我在后面的实操部分写清楚了这一步操作一次之后后续驱动就能稳定加载。另外如果你用的是 2023.2 及以上版本新版本自带驱动基本都签过名了遇到签名问题反而少。但如果你是公司内网环境安全策略强制开启驱动签名校验那就得让管理员在组策略里例外处理或者换一个带有效签名的更新版本驱动。2.3 FPGA 板上的调试器芯片需要正确识别现在大多数 Xilinx 开发板板载调试器都是 Digilent 方案的芯片常见 FTDI FT2232H / FT232H通过 USB 枚举成一个或者两个串口和 JTAG 口。Vivado 的 Hardware Manager 在与板卡通信时需要识别到这个芯片的 VID/PID。Xilinx/FTDI 的 VID 一般是 0x0403Digilent 产品的 PID 可能是 0x6010 或 0x6014。如果你在设备管理器里把这个设备识别成了“COM 端口”而不是“Digilent USB Device”Vivado 往往也不认。因为 Vivado 在 Windows 下不是简单通过 COM 口访问而是通过 WinUSB / libusb 方式直接访问 USB 设备。驱动绑定错了设备就到了 COM 口下面Vivado 自然找不到目标。这种情况在 Windows 下很常见但很多人不知道。Linux 下也有类似问题FTDI 芯片默认被 ftdi_sio 驱动接管变成 /dev/ttyUSB0但 Vivado 需要的是 ftdi_sio 以特定 vendor/product 绑定或者改用 libusb。后面我会给出具体命令。3. 从零到一让 Vivado 正常识别开发板的标准操作3.1 Windows 下重装线缆驱动完整流程第一步确定你的 Vivado 版本对应驱动目录。比如 2023.2 版本默认安装目录是C:\Xilinx\Vivado\2023.2\进入后找到data\drivers\xilinx_cable_driver\我强烈建议你打开这个目录先看看里面有哪些文件。常见结构是nt64或win10子目录里面有xusbdrv.inf也有install.bat或install.bat的变体。第二步卸载当前已经装坏的驱动。打开设备管理器找到带感叹号的设备右键“卸载设备”勾选“删除此设备的驱动程序软件”。这一步一定要做很多人直接覆盖安装结果旧驱动残留新驱动又被拦截现象依旧。第三步启动“禁用驱动程序强制签名”模式。Windows 10 / 11 的通用做法按住 Shift 键点击“开始”菜单里的“重启”进入蓝色屏幕的恢复环境。依次点击“疑难解答” → “高级选项” → “启动设置” → “重启”。重启后会出现一个选项列表按数字键 7 或者 F7选择“禁用驱动程序强制签名”。系统进入桌面的那一轮所有未签名驱动都会被允许加载。第四步进入驱动目录右键install.bat选择“以管理员身份运行”。如果没有 install.bat就直接在设备管理器里手动更新驱动。手动更新驱动的方法设备管理器里找到未知设备或黄叹号设备右键“更新驱动程序” → “浏览我的计算机以查找驱动程序” → “让我从计算机上的可用驱动程序列表中选取” → “从磁盘安装” → 浏览到xilinx_cable_driver目录下的nt64目录选中xusbdrv.inf确定。系统如果弹出安全警告选择“仍要安装”。装完之后拔掉 USB 线重新插一次看看设备管理器里是否出现了不带感叹号的“Digilent USB Device”或“Xilinx USB Cable”。我实测下来这一步能解决 Windows 下 70% 以上的“Vivado 无法识别开发板”问题尤其是老版本 Vivado 配新系统的情况。3.2 用 Zadig 手动把设备绑定到 WinUSB如果你设备管理器里能看到 USB 设备甚至能看到 FTDI 芯片的 VID/PID但设备被“USB Serial Converter”这类驱动占用了Vivado 也认不出来。这时候我建议用 Zadig 这个免费工具强制把设备驱动切换成 WinUSB。Zadig 的使用逻辑很简单打开软件在菜单 Options 里勾选“List All Devices”下拉菜单里找到你要处理的 USB 设备一般是带 Digilent 或 FTDI 字样的那个然后把目标驱动改成 WinUSB点“Replace Driver”或“Install Driver”。换完驱动之后再回到设备管理器你会发现设备不再出现在“端口(COM 和 LPT)”下而是出现在“通用串行总线设备”下名称变成“WinUSB Device”。这时候再打开 Vivado Hardware Manager基本就能扫到板卡了。需要提醒的是Zadig 操作的是 USB 设备全局驱动如果你这块板子的调试口和 UART 口是同一个物理口换驱动后可能会影响串口功能。稳妥起见先把板子的 Pmod 口、UART 口和 JTAG 口在原理图或手册里看清楚再决定换不换驱动。对于大多数板载 Digilent 调试器的开发板JTAG 端口和 UART 端口是同一个 USB 控制器枚举出的两个接口Zadig 里你会看到两个设备只需要把那个带“Digilent”或“DAP”字样的设备换成 WinUSB另一个留着当串口用就行。3.3 VMware 虚拟机里挂载开发板到 Ubuntu 的方法先说清楚如果你是在 Windows 上装 VMware然后虚拟机里跑 Ubuntu并且 Ubuntu 里装了 Vivado要识别开发板有一个前提必须把 USB 设备切换到虚拟机而不是留在 Windows 宿主机里。具体操作开发板用 USB 线连电脑后VMware 右下角会弹出一个 USB 图标点一下在里面找到你的开发板设备选择“连接(Disconnect from host / Connect to Virtual Machine)”。如果没弹出来可以通过菜单“虚拟机” → “可移动设备” → 选择对应的 USB 设备点“连接”。连接之后在 Ubuntu 终端里执行lsusb确认能看到类似Bus 001 Device 003: ID 0403:6010 Future Technology Devices International, Ltd FT2232C/D/H Dual UART/FIFO IC这说明 USB 已经映射到虚拟机里了。但这时 Vivado 还不一定能认因为你还需要处理驱动绑定。Ubuntu 下Vivado 的 cable 驱动不一定默认编译安装。我常用的方式是打开终端先确认 ftdi_sio 是否加载lsmod | grep ftdi_sio如果 ftdi_sio 已经加载默认会把 FT2232H 识别成两个 ttyUSB 设备。Vivado 的 hw_server 访问它需要用到 ftdi_sio 的 vendor/product 参数。不开心的是一部分发行版的默认 udev 规则会把权限限制住导致普通用户无法访问。解决权限问题最简单的方法是先把用户加入 dialout 组sudo usermod -aG dialout $USER然后重新登录或者重启 Ubuntu。之后再执行sudo modprobe ftdi_sio vendor0x0403 product0x6010如果 lsusb 里的 PID 不是 0x6010就改成你看到的 PID。执行成功后Vivado 的 Hardware Manager 大概率就能扫到板子。如果你用的是较新的 Ubuntu20.04 及以上可能还要安装 libusb 相关的运行库Vivado 安装包里通常带了依赖说明进入Vivado/2023.2/data/xicom/cable_drivers/lin64/install_script/install_drivers/目录执行sudo ./install_drivers也行。3.4 物理机 Ubuntu 下的 udev 规则配置物理机上跑 Ubuntu 比虚拟机更省心不用处理 USB 映射但 udev 权限规则还是要配。不配的话普通用户打开 Vivado在没有 sudo 的情况下是扫不到设备的。推荐做法新建一个/etc/udev/rules.d/99-digilent.rules文件写入以下规则SUBSYSTEMusb, ATTR{idVendor}0403, ATTR{idProduct}6010, MODE0666 SUBSYSTEMusb, ATTR{idVendor}0403, ATTR{idProduct}6014, MODE0666保存后执行sudo udevadm control --reload-rules sudo udevadm trigger拔掉 USB 线重新插一次再打开 Vivado就能在不加 sudo 的情况下正常识别了。如果你用的是别的调试器比如 Xilinx Platform Cable USB它的 VID/PID 可能不同可以用lsusb先查一下。4. 高版本 Vivado 识别到的板子列表为空还有一个容易被忽视的点4.1 打开 Hardware Manager 的方式决定你能不能看到板卡很多人的习惯是先点“Open Hardware Manager”然后直接点“Open Target”结果等了半天也没反应或者提示“No hardware target”。这里有个细节Hardware Manager 有两种连接方式一种是本地服务器(local server)一种是远程服务器(remote server)。默认情况下Vivado 启动 Hardware Manager 时会自动在本机启动一个 hw_server 进程。如果你之前手动启动过 hw_server或者有其他进程占用端口新启动的 Hardware Manager 可能会连接失败表现就是扫描不到设备。建议在启动 Vivado 之前先手动打开一个终端切到你的 Vivado 版本目录下执行hw_server让它在前台跑着然后再打开 Vivado Hardware Manager。这时候 Hardware Manager 会自动连接这个已经运行的 hw_server。如果设备管理器里能看到设备但列表还是空可以试试在 Hardware Manager 里点击“Open Target” → “Open New Target”在向导里选择“Connect to local server”端口默认 3121不到万不得已不要改。4.2 板卡上电顺序与 JTAG 引脚不足绝大多数 FPGA 开发板的 JTAG 链在上电后才会稳定。正确的顺序是先给开发板上电等电源指示灯稳定再插入 USB 线到电脑。反过来如果先插 USB 线再上电板子JTAG 链上的器件比如 FPGA、CPLD、调试器芯片可能在上电瞬间产生毛刺导致枚举不稳定。我自己遇到过一块 Zynq 开发板只要先上电再插 USB 就没问题反过来就大概率识别不到。后来在原理图里看到调试器的 TRST 引脚和板子电源监控电路有耦合先插 USB 会导致调试器先复位但 FPGA 还是没电JTAG 链状态不对。所以这个顺序不是玄学确实会影响识别。另外如果你的板子有多个 JTAG 菊花链器件比如 FPGA PROM 外部调试器请确认板卡上有没有 JTAG 使能跳线。有些板子在出厂时默认把某个器件的 JTAG 使能拉低了导致整个链扫描不出目标。正确做法是查阅板卡原理图或用户手册找到 JTAG chain 相关的跳线说明确保 FPGA 的 TDI/TDO/TCK/TMS 都在链上。4.3 检查 Vivado 版本与板卡支持包如果你的板卡是老型号而 Vivado 版本太新板级支持文件board files可能没有被默认包含。这时候板子没出现在 Board 列表里是正常的但扫描不到 JTAG target 就不太正常了。排查思路是在 Hardware Manager 的 Target 列表里如果能看到类似xc7a35t或xczu7ev的器件型号说明 JTAG 链已经枚举成功只是你还没点加号展开。如果你用的是定制板或者非常小众的开发板FPGA 型号不在当前 Vivado 版本支持的列表里Hardware Manager 也可能会报“Unknown device”。这种情况下的解决方法是升级 Vivado 到支持该器件的版本或者手动安装对应的器件支持包。绝大多数主流的 Xilinx 开发板比如 ZedBoard、PYNQ-Z2、VCU118、Alveo 板卡在近几年的 Vivado 版本里都有官方支持不需要额外处理。5. 常见问题速查表排查这一步比重装快 10 倍现象大概率原因解决动作设备管理器插拔无新设备USB 线只有充电功能 / 插错口换数据线换到板上标 JTAG 的口设备管理器出现黄叹号驱动未正确安装 / 驱动签名拦截进入禁用驱动签名模式手动安装 xusbdrv设备被识别成 COM 口驱动绑定错误用 Zadig 换成 WinUSB设备管理器正常但 Vivado 空hw_server 未启动或端口占用手动启动 hw_server再开 Hardware ManagerVMware 挂载后 Ubuntu 认不到USB 没切到虚拟机 / ftdi_sio 未绑定确认 USB 连接状态modprobe 指定 VID/PID多块板子一起插全部扫不到某块板 JTAG 链异常拖垮整条链一次只插一块板子逐个排查Windows 能看到Ubuntu 看不到udev 规则缺失写入 99-digilent.rules 并 reload5.1 一个容易忽略的“电源兼容性”问题开发板电源适配器建议用原装或者规格一致的尤其是电流。有的板子功耗高比如挂了大功耗的 PCIe 卡或 HDMI 输出模块USB 口供电不够FPGA 能亮灯但 JTAG 链不稳定导致时好时坏。这种故障很难一次定位你可能折腾半天驱动结果换了个足安数的电源就好了。判断方法看开发板上的电源指示灯如果上电瞬间灯闪了一下又暗了或者板载调试器灯不亮多半是供电不足。还有一种表现是 USB 设备在 Windows 里反复断开重连声音“叮咚”响个不停。这种情况下先换独立电源给板子单独供电USB 只负责 JTAG 通信别指望 USB 口同时供电和调试。5.2 我踩过的坑和习惯用 Vivado 这些年我总结出一个排查强制顺序先线再电后驱动重软件。这四个字帮我省了无数时间。线是数据线电是电源和上电顺序驱动是设备管理器状态软件是 Vivado 配置和版本。绝大多数问题在“线”或“电”两步就能解决不需要动软件环境。还有一个习惯值得分享每次打开 Hardware Manager 之前我会手动执行一次hw_server -e set auto-open-server false或者直接关掉之前残留的 hw_server 进程。Windows 下可以在任务管理器里找找Linux 下用pkill hw_server。因为残留进程经常会让新的 Hardware Manager 连接不上表现就跟“无法识别开发板”一模一样。另外Windows 设备管理器里如果出现了两个“Digilent USB Device”一个正常一个黄叹号那是你之前多次插拔造成的虚拟设备残留。右键把带叹号的设备卸载掉然后重新插拔一次问题多数能解决。别急着重装系统重装系统并不会让驱动签字问题消失。最后再分享一个小技巧调试时尽量打开 Vivado 的 Tcl Console手动执行open_hw refresh_hw_server get_hw_targets这个命令序列会强制触发一次重新扫描。很多时候 Hardware Manager 图形界面卡住不刷新但 Tcl 命令行重新扫描一遍就正常了。如果有多个 target还能用current_hw_target指定具体目标省得点鼠标点到怀疑人生。
返回列表