我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

ALINX黑金FPGA下载器维修调试全攻略:从原理到实战

ALINX黑金FPGA下载器维修调试全攻略:从原理到实战 ALINX黑金这块牌子在研究FPGA的圈子里不陌生配套的XILINX FPGA下载器几乎是每个用Vivado的人桌上都有一台的小玩意儿。它的工作很不起眼电脑那头跑着ISE或VivadoUSB线连到下载器下载器再拖一根JTAG线到开发板把比特流文件填进FPGA或者SPI Flash。可一旦它坏了整个调试流程就卡死在第一步。尤其项目做到一半卡住你会发现这小东西居然这么重要。我这些年在FPGA入门带项目和项目实战上折腾过不少板子见到的下载器故障没有一百也有八十。多数故障不是主控芯片烧死而是线断、座松、供电异常这类小毛病。这篇文章就把ALINX黑金XILINX FPGA下载器的原理、拆解、维修和调试技巧一次讲透。看完你至少能自己判断下载器是真坏了还是驱动、线缆、目标板电源的锅省下寄修等待的几天时间。先声明一点文中提到的排查方法不限于ALINX黑金这一家很多基于FT2232H方案的下载器都通用。适合刚接触FPGA的、卡在“下载失败”的、手里有坏下载器想修的都可以参考。1. 为什么一个下载器能卡住整个FPGA调试流程如果只把下载器当成一根“USB转JTAG线”那后面修起来会走很多弯路。它本质上是一个协议转换器而且是在整个配置链路里最容易出问题的一环。1.1 配置、JTAG和比特流下载器到底在传什么FPGA和单片机最大的区别在于它没有固化在片内的程序存储体。每次上电SRAM工艺的逻辑单元处于空白状态必须由外部把配置数据填进去才有功能。这个“填数据”的动作叫配置下载器干的就是这件事。配置方式有很多种SPI Flash主模式、BPI、SelectMAP、JTAG等但调试阶段最常用的是JTAG。JTAG全称Joint Test Action Group最早是IEEE 1149.1边界扫描测试标准后来被FPGA厂拿来当作配置和调试的万能入口。计算机端的Vivado或ISE把编译好的bit流文件解析成JTAG时序通过下载器发送给FPGA。所以下载器在这个链路里是一个“翻译官”电脑USB口出来的是USB协议FPGA或配置Flash要的是JTAG协议。它得把USB包拆开重新打包成符合IEEE 1149.1的时序再送到目标芯片。这也是为什么不能随便拿一根USB转串口TTL线来给FPGA下载程序协议完全不一样。1.2 下载器在ALINX黑金开发流程里的位置ALINX黑金的开发板种类很多从Artix-7到Kintex-7、Zynq都有但开发流程都跳不开两步第一步写RTL或搭Block Design第二步综合、实现、生成bit流然后用下载器把它灌进板子。很多人在第一步花大量时间却忽略了下载器状态。我见过不少FPGA入门学员代码写得没问题仿真也通过结果一上板就报“No hardware target connected”在软件里折腾半天才发现是下载器的数据线坏了或者JTAG排线有一根针没插实。还有一类场景是调试Xilinx自定义IP、PCIe RC、Aurora 8B/10B这类高速接口的IP核。这类设计通常在Vivado里跑硬件协同仿真或ILA逻辑分析仪下载器的稳定性直接影响采样数据和上板调试效率。如果下载器时断时续ILA采回来的波形缺一段多一段排查起来非常痛苦。所以把它当成一个独立硬件设备来维护一点都不为过。1.3 从边界扫描看TDI/TDO/TCK/TMS四个信号JTAG接口一共就四个关键信号加一个可选复位TCK测试时钟由下载器主机产生为整个JTAG操作提供时钟节拍TMS测试模式选择同样由主机产生控制TAP状态机的跳转TDI测试数据输入主机发送给目标芯片的数据TDO测试数据输出目标芯片回给主机的数据整个JTAG操作的核心是一个有限状态机。下载器在TCK的每个上升沿根据TMS的高低电平让目标芯片的TAP状态机从“Test-Logic-Reset”一路走到“Shift-DR”或“Shift-IR”然后在Shift阶段把bit流按比特移位进去。理解了这一点维修时思路就清晰了。TCK/TMS/TDI三个信号是主机到目标方向的主机的驱动能力不够或者线上有短路目标芯片就收不到正确指令TDO是目标到主机方向目标芯片没上电、JTAG链路断开或者TDO脚被拉死主机就收不到回包。很多“连不上目标”的问题本质就是这四个信号里的某一个在物理链路上出了问题。2. 拆开看电路下载器不是一根线那么简单我拆过好几台ALINX黑金配套的下载器外壳撬开后里面的板子并不复杂但每一颗芯片都有它存在的道理。你如果打算自己修第一步就是认清楚板上都有什么。2.1 常见的FT2232H方案和原厂方案差异ALINX黑金配套的下载器以及国内很多开发板附带的下载器最常见的核心方案是FTDI的FT2232H。这颗芯片是USB 2.0高速转双通道串行/并行接口的桥接芯片最强的地方在于支持MPSSE模式。这个模式可以让你在PC端直接通过USB下发命令让芯片在GPIO上产生自定义的时序包括JTAG、SPI、I2C。FT2232H有两个通道很多下载器把通道A配置成JTAG通道B留出来做UART串口所以你会看到下载器一头是JTAG座另一头往往还带一个串口接口。MPSSE引擎直接在芯片里把USB数据转成TCK/TMS/TDI/TDO时序不需要额外CPLD参与成本低、实现简单所以被广泛采用。而Xilinx原厂的Platform Cable USB II用的是Cypress的USB控制芯片加一片CPLD电路更复杂驱动协议也是Xilinx自定义的几乎是即插即用但价格贵。国内厂商为了兼容Vivado和ISE也在驱动层做了很多适配。所以你在Vivado硬件管理器里看到下载器被识别成“Digilent”或者某些自定义名称是很正常的。搞清楚方案有什么好处维修时能快速锁定该查哪里。FT2232H方案的下载器故障点基本就是FT2232H芯片、12MHz晶振、EEPROM配置芯片、电平转换电路和USB口原厂方案则多了一块CPLD排查范围会扩大到CPLD固件和周围电路。2.2 电平转换、ESD保护与指示灯电路容易被忽略Xilinx 7系列FPGA的Bank电压可能是1.8V、2.5V或3.3V下载器必须能适配不同电平。FT2232H的VCCIO可以接受1.8V到3.3V范围但很多下载器为了兼容目标板在JTAG信号线上加了电平转换芯片或者分压/限流电阻。这里有个容易误判的地方下载器插电脑后被识别正常但一接目标板就“罢工”很多时候不是下载器坏了而是电平不匹配。比如目标板只有1.8V的Bank下载器输出3.3V高电平虽然一般不会立刻烧芯片但信号质量会很差导致能识别到设备却扫描不到TAP链。板上的指示灯也有讲究。一般绿色灯表示USB和板卡供电正常橙色或红色灯表示目标板连接状态或错误状态。维修时先看灯的状态能省不少时间。有些下载器在USB口附近还串了自恢复保险丝或限流开关这类元件坏了不会冒烟但会表现为“插上没反应”或“接上目标板后灯灭”。ESD保护器件更要留意。很多人习惯带电插拔JTAG线目标板电源还没关就把10pin排线拔了瞬间的静电或电流冲击打坏的就是这些不起眼的保护二极管。我修过一台下载器外观完全正常USB识别也正常但TDO引脚对地只有几欧姆拆掉一颗静电保护芯片后一切都好了。所以别小看这两三颗小贴片。2.3 排线、接头和供电最容易被忽略的故障源这里要说一个非常扎心的规律我经手维修的下载器里至少有六成问题出在USB线、JTAG排线和接口插座上真正的芯片级故障反而少。先说USB线。很多人随便拿一根手机充电线去连下载器结果电脑怎么都识别不到。原因很简单很多充电线内部只有电源线没有数据线D/D-。这种线长得很正常但插上后没有任何数据通信。判断方法也简单换一根确定带数据功能的短线试一下故障可能直接就消失了。再说JTAG排线。ALINX黑金这类开发板的JTAG座一般是2x5的10pin排针但各家引脚定义并不完全统一。维修和排查时不要只靠记忆必须对着原理图确认哪个是TCK、哪个是TMS、哪个是TDO、哪个是TDI、哪些是GND。有些排线用久了内部会折断外表完全看不出来用万用表蜂鸣档一根一根量才能发现。还有那种把地线省掉的细排线抗干扰能力很差下载速度稍高就报错。下载器的供电也很关键。FT2232H是从USB取电的但电平转换电路有时需要参考目标板的3.3V或2.5V。如果目标板没上电JTAG口处于高阻状态下载器照样能枚举成功但Vivado就是找不到FPGA。所以排查顺序应该是目标板上电了吗JTAG排线插紧了吗下载器USB灯亮了吗这三个问题没确认之前不要急着拆芯片。3. 故障定位与维修实操从症状到原因维修最忌讳一上来就动烙铁。我的习惯是先按症状把故障分类再用万用表逐级缩小范围最后才决定要不要换芯片。3.1 不识别、连不上、连上就掉三种症状先分类下载器故障表面上看千奇百怪实际上可以分成三大类第一类是插到电脑上后完全没反应设备管理器里连未知设备都不出现。这种问题一般出在USB接口、USB线、板上的5V供电链路或主控芯片的电源/晶振上。第二类是电脑有反应但设备管理器显示未知设备或问号或者Vivado里能看到下载器却扫描不到FPGA TAP链。这种通常是驱动问题、EEPROM配置丢失、FT2232H部分损坏、JTAG输出链路断线。第三类是插上电脑正常一接目标板或一运行下载就掉线、指示灯熄灭。这种多数是目标板短路、过流保护或信号线被拉死。分类的价值在于避免做无用功。比如第三类故障你要是先去重刷FT2232H的EEPROM大概率白忙一场。正确做法是先拔掉JTAG排线只插USB看下载器是否正常。如果拔掉排线后一切正常那问题大概率在目标板侧或排线侧而不是下载器本身。3.2 用万用表逐级排查USB端、芯片端和JTAG端工具不需要多高级一块能测通断、电阻、电压的万用表就够。步骤从USB端开始一级一级往后推。第一步量USB线的D/D-通断。把USB线从电脑和下载器上拔下来用蜂鸣档分别量USB公头的1脚5V、2脚D-、3脚D、4脚GND到另一端的对应触点是否导通。如果D或D-不通直接换线。第二步量下载器板上的5V和3.3V。插上USB线后用电压档量USB座附近5V是否到达再量FT2232H旁边的3.3V LDO输出。我修过一台下载器5V正常3.3V只有1.2V换掉AMS1117-3.3之后立刻恢复。注意FT2232H的VCCIO电压取决于你的板卡设计一般是3.3V有的会引到VCCIO跳线。第三步量FT2232H的12MHz晶振。如果没有示波器可以用万用表交流电压档量晶振两脚通常能测到零点几伏的微弱电压说明晶振在起振。完全没读数优先换晶振顺便检查两个负载电容有没有虚焊。第四步量JTAG插座到FT2232H对应引脚之间的通断。有时候排线座没坏但主板上从芯片到座子的走线被静电打坏了或者过孔断了这种只能靠万用表蜂鸣档一点一点排查。对应的引脚可以根据FT2232H的MPSSE配置表查也可以通过比较正常的下载器来对照。3.3 连接后灯熄灭的限流保护和DAP下载器是同一个坑很多人问过我一个现象下载器单独插电脑灯正常一接到目标板的JTAG口灯就灭了拔下来又恢复亮。这问题在野火DAP下载器上也很常见原理完全一样。灯灭一般是过流保护被触发。下载器内部或USB口前的自恢复保险丝检测到电流异常增大直接切断输出指示灯随之熄灭。为什么电流会突然增大最常见的原因是目标板的3.3V或5V对地短路电流灌回下载器其次是JTAG座的电源引脚和GND接反或者排线插错了方向把目标板电源直接引到了地。处理办法很简单先把下载器从目标板上拔下来用万用表电阻档量目标板JTAG座附近的电源对地阻值。正常应该在几十欧姆以上甚至几百欧姆。如果量出来接近零先修目标板不要反复插下载器试。还有一种情况是下载器自己的ESD保护器件被击穿导通后把某个JTAG信号拉到地表现形式也是插上目标板后电流偏大但灯不一定立刻灭而是表现为下载失败或信号异常。3.4 换芯片还是换整板拆焊FT2232H的实操细节如果确认是FT2232H损坏先评估一下维修成本。这颗芯片本身不贵但拆焊和重刷EEPROM需要一定功夫。如果你的下载器是入门级的芯片加邮费可能接近半个新下载器的价格时间成本也要算进去。决定换芯片的话有几个实操细节。FT2232H是LQFP-48封装建议用热风枪拆温度控制在350摄氏度左右风速中等先在芯片四周加一点中低温焊油等锡熔化后用镊子轻轻取下来。千万不要在锡没完全熔化的状态下硬撬很容易把焊盘带下来。焊盘处理干净后在新芯片引脚上薄薄上一层锡对好方向放上去用烙铁加焊油拖焊。拖焊时注意引脚间距很小容易连锡拖完要用放大镜检查一遍。换完芯片后先不急着上目标板插USB看电脑能否枚举到FTDI设备。如果枚举不到检查FT2232H的焊接方向和晶振。还需要注意EEPROM。FT2232H的VID/PID、产品字符串、通道配置都存在外挂EEPROM里。如果EEPROM本身坏了或者里面数据是空的Windows可能会把它识别为未知设备。用FTDI官方的FT_Prog工具可以读取和重新配置EEPROM配置前最好先备份一台正常下载器的EEPROM内容或者按原厂模板填入正确的VID/PID。4. Vivado/ISE里的下载稳定性调优修好硬件只是第一步很多“下载失败”其实不是硬件坏了而是使用姿势不对。这一部分讲软件和线缆层面的调优。4.1 驱动安装和硬件服务器识别Target的坑FT2232H方案的下载器在Windows下安装驱动有几个坑。FTDI的驱动分VCP和D2XX两种VCP会虚拟出COM口D2XX是直接用DLL访问设备。Vivado和ISE识别下载器用的是D2XX或者专用的插件驱动如果你装成了VCP设备管理器里会看到一个COM口但Vivado硬件管理器里找不到设备。遇到这种情况可以在设备管理器里手动把驱动替换为FTDI的D2XX驱动路径通常在Vivado安装目录下的“data/xicom/cable_drivers/nt64”或类似位置。不同版本路径不一样搜索“ftd2xx”或“ftdi”就能找到。如果驱动已经装对但Vivado还认不到试试在Windows服务里确认“Xilinx Hardware Server”是否在运行或者直接在Vivado里重新启动硬件管理器。用Linux系统调试FPGA的可以先用lsusb确认FTDI设备是否出现。正常会出现“Future Technology Devices International Ltd.”之类的字样。只看到USB设备但JTAG扫描不到目标大概率是权限问题给设备加一个udev规则就能解决。4.2 降速、短线、独立供电三个调优方向下载不稳定时我一般按三个方向调。第一个方向是降TCK频率。Vivado下载设置里可以设置JTAG频率默认可能是6MHz或更高。如果你的环境线比较长、目标板布局复杂、或者用了细排线把频率调到1MHz甚至750kHz成功率会大幅提升。别觉得降速丢人调试稳定比快那么几秒重要得多。第二个方向是缩短线缆。JTAG链路是同步时序系统TCK从下载器到FPGA、TDO从FPGA回来存在传播延迟。线缆越长信号边沿越缓时序余量越小。USB线尽量用0.5米以内的短线JTAG排线能短就短。我有一次怎么调都下载失败把一根30cm的杜邦线排线换成10cm的成品排线后问题直接消失。第三个方向是供电隔离。如果电脑的USB口供电不稳或者下载器同时给一些板载逻辑供电容易在下载瞬间出现电压跌落。USB口换到电脑后置接口、或者用一个带屏蔽的USB Hub都能改善。目标板最好用独立电源适配器或台式电源供电不要只靠USB口带大负载板卡。4.3 多板级联与长JTAG链路的注意事项调试大型项目时可能一台下载器要同时连接多块FPGA或CPLD形成一条JTAG菊花链。有意思的是做FPGA入门实验的人很少遇到这个问题但做项目实战时几乎避不开。菊花链的规则是第一块板的TDO接到第二块板的TDI第二块板的TDO再接第三块板的TDI最后一块板的TDO回到下载器。扫描链上每个器件都有唯一的IDCODEVivado会自动识别并列出所有设备。这里的坑在于链上任何一个器件没上电或JTAG引脚被占用都会导致整条链扫描失败。排查时先把链拆成单点分别测每一块板能否单独识别再一段一段接回去。另外链路过长时要把TCK频率调低否则后面器件的信号边沿可能完全失真。还有个容易被忽略的问题有些FPGA的JTAG引脚被用户逻辑复用。代码里如果配置了BSB、或者把JTAG引脚设成普通IO即使是JTAG模式也可能出现信号干扰。这时候可以先按住板上的PROG_B复位键试试或者确认FPGA处于未配置状态再下载。5. 典型故障速查表与DIY扩展最后整理一份高频故障速查表按这个表排查绝大多数问题都能在半小时内定位。5.1 六类高频问题对照表现象可能原因处理建议插电脑完全没反应USB线损坏、USB接口接触不良、板上5V/3.3V供电异常、FT2232H损坏换数据线量USB口电压顺链路查LDO和芯片供电设备管理器显示未知设备FTDI驱动装错、EEPROM数据异常、晶振不起振装D2XX通用驱动用FT_Prog重刷EEPROM量晶振Vivado能找到下载器但扫描不到FPGAJTAG排线断线、目标板未上电、TCK频率过高、电平不匹配短排线测JTAG四线通断给目标板上电降频一接目标板灯就灭目标板电源短路、JTAG排线接反、下载器过流保护拔排线测目标板电源对地阻值检查座子定义下载经常中途失败线缆过长、干扰、目标板供电不稳、USB口供电弱换短线降TCK独立供电换USB口能下载bit流但掉电后程序没了只下载到了SRAM没烧Flash在Vivado里切换配置目标为SPI Flash生成bin文件烧写这里单独提一下最后一条。很多FPGA入门的朋友经常问为什么下载完程序一断电就没了。下载器本身没坏是你默认只下载到了SRAM断电自然丢失。要固化到配置Flash里需要生成烧写文件并把下载目标切到Flash。下载器的角色没有变但Vivado发送的指令流完全不同这一步也是很多项目实战里最容易疏忽的。5.2 自制下载器和过渡方案怎么选如果手头下载器彻底修不好或者你想多条备份有两个过渡方案。一是买一块FT2232H核心板自己接线。很多低价核心板把双通道MPSSE引脚引出来了按ALINX黑金板卡的JTAG定义接好TCK/TMS/TDI/TDO和GND再接上目标板配合OpenOCD可以验证扫描链是否正常。比如Linux下可以用类似这样的命令扫描目标芯片openocd -f interface/ftdi/ft2232h_breakout.cfg \ -c adapter_khz 1000 \ -c transport select jtag \ -c jtag newtap xilinx_tap -irlen 6 \ -c init \ -c scan_chain注意IR长度要根据目标芯片查手册7系列一般是6位老一些的器件不一定相同。这种方案适合想要深度折腾、又想省钱的玩家但日常开发效率不如现成方案。二是直接买一个稳定可靠的下载器当作主力。维修价值固然要算但时间成本也是成本。我个人的建议是主用下载器一定要是正规货备用下载器才是拿来拆改折腾的。否则一次下载不稳可能浪费一整天调试周期。最后一件事我习惯把JTAG地线排在前面说了这么多维修和调试最后分享一个我自己的小习惯。每次插JTAG排线时我会先把地线针脚和排线的地线夹对准确认第一根针位置无误再用力插到底。很多莫名其妙的下载失败其实就是座子歪了一根针TDI和TDO短在一起。另外修完下载器之后不要急着装外壳先裸板插电脑验证再带载测试目标板确认长时间下载不报错再合壳。我在实际维修中吃过一次亏换了芯片后裸板测试一切正常装进外壳后一压就出问题拆开才发现是外壳注塑的加强筋恰好压在一颗电阻上造成虚焊。下载器这东西说复杂不算复杂说简单也没那么简单。但只要你愿意花半小时把它拆开、量一量、理清信号流向绝大多数问题都能找到原因。下次它再闹脾气至少你知道该先动烙铁还是先换线。
返回列表