JTAG下载失败问题排查:驱动安装、电缆连接、电平匹配、目标板供电、链路上多器件扫描
JTAG下载失败,可以说是FPGA调试中最常见、也最让人头疼的问题之一。我记得刚入行那会儿,第一次拿到开发板,插上下载器,点击Program,结果弹出一个红叉——心里那个凉啊。后来才发现,其实大部分问题都出在那几个固定的点上。
说白了,JTAG下载失败的原因就那么几类:驱动没装好、线没接对、电平不匹配、板子没供电、或者链路上多个器件互相干扰。咱们一个一个来拆解。
1. 驱动安装:最容易忽略的第一步
很多人拿到下载器,插上电脑,系统提示“安装驱动成功”,就以为万事大吉了。其实不然。我遇到过好几次,Windows提示驱动装好了,但设备管理器里一看,黄色感叹号还在那儿挂着。
我个人习惯是:插上下载器前,先把驱动装好。然后打开设备管理器,看看有没有“Xilinx USB Cable”或者“Altera USB-Blaster”之类的设备。如果出现未知设备,右键更新驱动,手动指定到驱动目录。
这里有个小技巧:如果你用的是第三方下载器(比如盗版JTAG),驱动可能不兼容。我曾经在一个项目里折腾了整整一下午,最后发现是下载器芯片被仿冒了,驱动死活认不出来。
2. 电缆连接:别小看这根线
JTAG电缆看起来简单,但问题往往出在细节上。你想想看,一根线要传输时钟、数据、控制信号,还要供电,稍微有点接触不良,下载就会失败。
- 线序对不对? 标准的JTAG接口是2x5或2x7的排针,但不同厂家的定义可能不一样。我见过有人把VCC和GND接反了,结果下载器直接冒烟。
- 线长合适吗? 超过30厘米的JTAG线,信号衰减会很严重。尤其是高速下载时,更容易出错。
- 接触好不好? 杜邦线插上去松松垮垮的,稍微碰一下就断开。建议用带锁扣的JTAG连接器。
3. 电平匹配:1.8V和3.3V不能混
这是很多新手容易踩的坑。JTAG接口的电平必须和目标板上的FPGA IO电压一致。比如你的FPGA是1.8V供电,但下载器输出的是3.3V,那信号到了FPGA那边,要么识别不了,要么直接烧坏IO。
| FPGA供电电压 | JTAG推荐电平 | 常见下载器支持 |
|---|---|---|
| 3.3V | 3.3V | 大部分下载器默认支持 |
| 1.8V | 1.8V | 需要电平转换模块 |
| 2.5V | 2.5V | 部分下载器支持 |
我记得有一次调试一块Zynq板子,PS端是1.8V,PL端是3.3V。我直接用3.3V的下载器去连PS端的JTAG,结果死活连不上。后来加了个电平转换小板,问题就解决了。
4. 目标板供电:没电怎么干活?
这个听起来像废话,但真的有人会犯。JTAG下载器虽然能提供一点电流,但远远不够驱动整个FPGA板。尤其是大容量FPGA,上电瞬间电流能到几安培。
怎么判断板子有没有正常供电?
- 看板子上的电源指示灯亮不亮
- 用万用表量FPGA核心电压(一般是1.0V或1.2V)
- 听板子上有没有异常声音(比如电感啸叫)
另外,有些板子有上电时序要求。比如先给核心电压,再给IO电压。如果时序不对,FPGA可能无法正常进入JTAG模式。嗯,这里要注意,有些开发板设计得不好,上电顺序反了,JTAG就是连不上。
5. 链路上多器件扫描:谁在捣乱?
当JTAG链路上有多个器件时(比如FPGA + CPLD + 其他芯片),问题就复杂了。每个器件都有自己的IDCODE,软件需要扫描整个链路,识别出所有器件。
常见的故障现象:
- 软件只识别到部分器件
- 识别到的器件ID不对
- 扫描过程中报错“Chain broken”
为什么会这样?说白了,就是链路上某个器件没正常工作,导致TDI到TDO的信号通路断了。我遇到过最奇葩的一次,是链路上一个CPLD的JTAG引脚虚焊,导致后面的FPGA全部无法识别。
下面这张图展示了JTAG链路上多器件扫描的基本流程:
排查多器件链路时,我有个习惯:先把所有器件断开,只留第一个。确认它能被识别后,再逐个加上去。这样就能定位到是哪个器件出了问题。
可可精品资料库