抢救识别不出来的板卡
对一块 FPGA 卡来说,「变砖」到底意味着什么。为什么坏掉的比特流几乎总能通过 JTAG 救回来,以及板卡真正报废的那一小类情况。
简短回答
刷写后不再被识别的卡,几乎从来不是硅片坏了。上电时 FPGA 从 SPI Flash 载入比特流,镜像坏了就意味着配置永远无法完成,于是没有 PCIe 端点出现。但 JTAG 不依赖 Flash 里的内容,所以解决办法几乎总是重新刷写一遍。
这里说的「变砖」是什么意思
在这套系统里,这个词通常描述的是一个症状,而不是一个诊断。板卡不再作为 PCIe 设备出现,于是下游一切都不工作。这个症状有一个常见原因和几个罕见原因。常见原因是 Flash 里的镜像无法让 FPGA 顺利完成配置,于是器件停留在未配置状态,主机也就看不到它。未配置不等于损坏。一颗未配置的 FPGA 只是一颗在等待有效比特流的芯片,而给它一个有效比特流是再正常不过的操作。
上电时序,以及它卡在哪一步
五个阶段。知道自己在哪一步失败,就能判断这是刷写问题、插接问题,还是硬件问题。
- 1. 插槽供电
- 板卡从 PCIe 插槽取电。没电就没有 LED,别的什么都不会发生
- 2. 配置
- FPGA 读取 SPI Flash 并载入比特流。损坏或残缺的镜像卡在这一步
- 3. 配置完成(DONE)
- 配置完成,设计开始运行。在此之前不存在 PCIe 端点
- 4. 链路训练
- PCIe 链路与主机协商。已配置却始终训练不上的卡,是插接或插槽问题
- 5. 枚举
- 主机读取配置空间,设备出现。到这一步,Windows 里的程序才第一次能看到它
为什么坏比特流不影响 JTAG
JTAG 是硅片本身实现的一个测试和调试接口。芯片一上电,它就能用。它不在乎板卡被跳线设成了哪种配置模式,也不在乎 Flash 里装着什么。整个抢救路径就依赖这个特性。即使 FPGA 完全无法完成配置,依然可以通过 JTAG 访问。实际操作中,工具先通过 JTAG 往 FPGA 里载入一个中转用的小比特流,由它打通一条通往 SPI Flash 的路径,Flash 才得以被重写。板卡在 PCIe 一侧不可见,对这一切毫无影响。
抢救步骤
这就是普通的刷写流程,不是什么特殊模式。只要你曾经刷成功过这块卡,你就能再刷一次。
- 让游戏主机完全关机,确认板卡已插到位,然后重新开机
- 把 USB 线换到板卡的 JTAG 口,另一头插副机(第二台电脑)的后置 USB 口
- 关闭一切可能占用 USB 设备的程序——读取端软件、MemProcFS、以及其他任何刷写工具
- 打开刷写工具,在选文件之前先确认它能看到设备并能打开 JTAG 链
- 选择与板上芯片一致的 FPGA 型号
- 刷入一个确认良好、针对这块板卡和这个 DNA ID 的镜像,格式设为 BIN
- 让它一直运行到结束,中途别碰机器
- 冷启动游戏主机,把线换到数据口,重新跑一次连接测试
读懂症状
有用的问题不是「卡是不是变砖了」,而是「它走到了上电时序的哪一步」。下面这些行把症状对应到各个阶段。
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 游戏主机已开机,板卡却完全不亮 LED | 阶段 1。插槽没供电:没插到位、插槽坏了,或者板卡真的损坏 | 在机器彻底断电的情况下,换一个 PCIe 插槽重新插好。如果在一个确认好用的插槽里仍然不亮灯,那就是少数真正的硬件故障之一 |
| LED 亮,但主机里到处都找不到设备 | 阶段 2。FPGA 始终没有完成配置,说明 Flash 内容损坏或不完整 | 通过 JTAG 重新刷入一个确认良好的镜像。这是常见情况,能救回来 |
| 刷写工具打不开 JTAG 链 | 端口错了、缺 CH347 驱动、有进程占用设备,或者型号选错了 | 换到 JTAG 口、装好驱动、关掉其他工具、以管理员身份运行,并选对型号。JTAG 链能否访问与 Flash 内容无关,所以这不是变砖 |
| 设备出现了,但认成了别的东西,或者带一个错误代码 | 阶段 5。配置成功了,所以镜像正在运行——只是它不是你想要的那个镜像 | 确认你刷的是为这块板卡下发的文件,然后重新刷入正确的那个。板卡是好的 |
| 刷写完成,冷启动后卡仍然不可见 | 镜像与这块板卡或这个 DNA ID 对不上 | 对照订单核对文件名,确认 FPGA 规格。把工具输出发给客服,而不是把同一个文件刷第四遍 |
| 昨天还好用,今天什么都没有,中间没刷过 | 几乎从来不是固件问题。通常是插槽、线、USB 口的问题,或者板卡卡死了 | 让游戏主机完全关机十秒,然后冷启动。再重新插拔,再换线。这里重刷不是第一步 |
板卡真的报废是什么样
这种情况确实存在,但表现完全不同。常见原因是物理损坏:PCIe 金手指弯了、USB-C 座子撕裂、元件烧焦,或者板卡在带电插槽里被热插拔。它的特征是失败在阶段 1 而不是阶段 2——要么在一个你已经用另一块卡验证过好用的插槽里不亮 LED,要么 JTAG 链根本打不开。第二种情况只有在驱动正确、端口正确、型号选择正确、且板卡确实已通电的前提下才算数。Flash 内容损坏不会产生这些症状。
宣布一块卡报废之前
七项。大多数所谓的「变砖」,查到这份清单中途就不再是砖了。
- 游戏主机完全关机十秒,然后冷启动——不是重启
- 重新插好板卡,卡扣扣上,挡板贴平
- 换到第二个 PCIe 插槽试过
- 换一根确认支持数据传输的线,插后置 USB 口,中间不经过集线器
- 确认刷写时用的是 JTAG 口,读取时用的是数据口
- 已装 CH347 或 WCH 驱动,且读取端软件和 MemProcFS 都已关闭
- 用正确的镜像完整重刷过一次,中途没有打断,一直等到它跑完
提示
该给客服发什么
用上面的说法说明你走到了哪个阶段。LED 亮不亮。刷写工具能不能打开 JTAG 链。你刷的确切文件名和你选的型号。完整的工具输出,粘贴过来而不是概括。一张包含丝印和 FPGA 标记的板卡照片。你的订单号。有了这些,通常一次回复就能解决,不用来回五次。
抢救常见问题
我刷错镜像,是不是把 FPGA 搞坏了?
几乎肯定没有。写入一个坏镜像会让 FPGA 无法完成配置,表现为设备找不到。硅片毫发无损,JTAG 依然可达。
抢救时板卡必须在游戏主机里吗?
它需要供电。对大多数板卡来说,就是插在游戏主机上、且游戏主机开着。有些板卡只靠刷写口就能取电——按你板卡的说明来。
不用 JTAG 能救回来吗?
实际上不行。PCIe 通路之所以不可用,正是因为配置失败了,所以只能从 JTAG 下手。这也是为什么刷写口是一个单独的插口。
抢救性刷写需要重新读一次 DNA 吗?
不需要。DNA 在 eFUSE 里,不受你往 Flash 写入任何内容的影响,所以你已经拥有的镜像仍然和这块板卡匹配。
工具每次都报成功,卡还是不出现。现在怎么办?
别再刷了。成功写入一个为另一块板卡或另一个 DNA 编译的镜像,表现就和这一模一样。对照订单核对文件,把工具输出交给客服。
资料来源
阶段划分和症状对照表是我们自己整理的,来源是在我们测试台上和用户工单里出过故障的板卡。
- 01AMD/Xilinx UG910, Vivado Design Suite User Guide: Getting Started
通过 JTAG 给器件及其配置 Flash 编程,整个抢救流程都建立在这条路径上
docs.amd.com
继续阅读
仍然没有解决?在 Discord 提交工单
全部指南