利用JTAG接口做电路板测试和原理、信号分析
概要
做了30年硬件,一直在用传统的示波器、逻辑分析仪等硬件工具调试电路板,电路上也设计了JTAG口但都仅仅只是用于编程和软件仿真、调试——例如用JLink、USB Blaster等硬件设备将程序烧录到单片机/控制器、CPLD等芯片里面去然后在对应的开发环境中利用JTAG口调试电路板,而电路板的测试都是交给组装厂做针床等测试夹具,自己偶尔做个测试设备也是利用板子上已有的硬件接口做功能测试、从来没有动过自己做板级通断测试、信号测试的念头。最近有机会研究别人做的一块主板,有上百个芯片,十多层铜,在不拆焊、割线、飞线等冒险损坏电路板的前提下只能研究通过边界扫描获取JTAG链上各芯片的工作状态和信号、协议,对于CPLD这样的可编程逻辑在大致了解各引脚信号特征后还要想办法切断原信号输入、自己编辑测试向量从而通过逻辑综合还原其控制逻辑,现就将整体思路和所用到的软件工具介绍给大家。
整体架构流程
流程是利用大部分数字芯片提供的JTAG边界扫描功能采样观察芯片各引脚的信号波形和基本功能,对于高速信号和复杂逻辑需要进一步分析时再利用JTAG的注入测试功能和自己编写的程序配合自动完成协议测试和遍历全部逻辑组合。
技术细节
首先当然是要了解电路板JTAG链上全部的芯片:最好是找到一份原理图,没有原理图的只能通过测引脚通断了解各芯片之间的连接和信号的流向了,这对于简单电路板可以,但对于层数较多和有大量BGA元件的电路板来说就不太现实了,况且测通断也是有少量可能性损坏电路板的。每个芯片都要上网找到数据表(datasheet)、编程指南(programming reference)等文档并下载其边界扫描模型(boundary scan model,一般厂商将其跟IBIS模型等仿真用的文件放在一起,文件后缀通常是.bsm)。
然后要用到一个有点老(到目前为止已经有10年历史了)但仍然无法超越、没有替代的软件:TopJTAG Probe。搜索官网可以下载到,版本停留在1.75。有20天的试用期但网上能找到keygen长期使用下去,重要的是它支持比较常见的JLink调试器,这是我知道的唯一10多年来没有过时、软硬件功能还都一直在与时俱进的仿真调试设备。
电路板通电、启动TopJTAG软件后可以执行一次JTAG扫描就可以把JTAG链上芯片的ID都一一读出,这时需要手动将各芯片的边界扫描模型文件依次调入软件,这样就有了芯片管脚定义与电路板信号之间的对应关系。
接下来建议将各芯片管脚命名(这对于有大量管脚的芯片尤其重要,因为这样的芯片很多管脚都是通用功能,厂家定义的名称除了知道其大致用途外没有太多意义),有电路图的当然是用电路图上的网络名称,没有电路图的按照自己对信号功能的理解命名,正确命名后观察到的信号波形就比较易于理解。
刚开始分析时需要将TopJTAG中各芯片的指令模式设置为SAMPLE(采样),将各信号逐个加入TopJTAG的虚拟示波器窗口来观察其取值和变化。对于芯片的双向总线,有时候实际只有一个方向用到,此时可以将总线加入Waveform、试运行(RUN)一下TopJTAG的虚拟示波器,观察信号的实际流向,这样可以去除用不到的方向,减少需要观察的信号数量(否则每个双向信号会同时有输入和输出两个信号需要观察)。
理解了采样到的各芯片管脚信号的基本功能和协议后,如果信号变化的速度很高(通常JTAG扫描的采样速度限于几KHz,高端的JLink Pro可能最高达到50~100KHz,但这对于大多数的现代串行、并行总线来说都是太低速了)或者电路板运行期间信号的逻辑、协议覆盖率很低(一种情况是多个关联逻辑信号可能出现的组合很少、关键组合可能很难出现或捕捉到,例如有大量组合逻辑的CPLD或GPIO管脚用量很多的单片机、微控制器,另一种情况是一组信号的特定时序非常单一、不能或不可能覆盖全部的协议内容,例如SPI总线、I2C总线等),JTAG边界扫描采样就不够了,需要将芯片的指令模式设置为内部测试(INTEST,用指定逻辑电平取代部分或全部引脚的外部输入、观察芯片的输出响应)或外部测试(EXTEST,将部分或全部输出引脚设定为指定逻辑电平、取代芯片的内部输出),用TopJTAG手动设置各种可能的信号逻辑输入(0/1)和时序/协议组合来观察芯片输出信号状态的变化(实际工作量可能会很大),或者自己编写JTAG测试程序自动遍历全部可能的输入逻辑、时序和协议组合分析各输出信号状态的变化和内在逻辑关系、协议内容。例如对于SPI或I2C总线,可以通过自动遍历全部可能的总线指令、地址、数据及组合,获取芯片内部全部地址存储的数据、了解芯片对所有指令的解释和响应。
自己编写JTAG测试程序需要基于所使用的JTAG硬件。例如,如果用的是常见的J-Link,就可以利用Segger公司JLink SDK简化软件的开发过程。当然,如果要分析的是SPI/CAN/I2C等通用总线也可以利用对应的总线协议分析仪或使用逻辑分析仪的协议分析功能,但这就需要想办法在电路板上挂接测试夹甚至需要焊接出测试接口、不再是本文所探讨的JTAG边界扫描软件方案了。
小结
本次是用JTAG边界扫描分析别人的电路板,如果是自己的电路板自然就不需要反过来再去观察、理解自己设计的逻辑、协议了,以上方法则可以用来做在线测试、调试,不需要用逻辑分析仪就可以借助TopJTAG观察板上的数字信号是否满足自己的设计要求,通过少量编程还能实现不用针床夹具的板级线路通断测试、干净利落地完成短路、断路等电路板生产测试环节。