充分利用现有标准作为基础,是保证方案稳定而有效的一个原则。本文分析了IEEE1149.1协议,在与标准兼容的基础上,提供了一种快速扫描JTAG链路的方法。
根据IEEE1149.1-2001,存在如下规则:
在Test-Logic-Reset状态下,测试逻辑被禁用,器件正常工作。TAP在下列条件下会进入Test-Logic-Reset状态:(a)上电,(b)TRST置低电平,(c)通过TMS与TCK迁跃状态。不论TAP当前的状态如何,在连续5个TCK的上升沿将TMS保持为高,即可使TAP进入Test-Logic-Reset状态。
每个设备都必须提供BYPASS指令,如果提供设备标志寄存器,则必须同时提供IDCODE指令。
在TAP的驱动下,进入Test-Logic-Reset状态后,IDCODE指令必须在TCK下降沿被锁存到指令寄存器(如果设备不提供IDCODE指令,则锁存BYPASS指令)。所有TAP状态的切换必须在TCK的上升沿发生。
BYPASS数据寄存器长度为1,在Capture-DR状态下TCK上升沿,移位寄存器必须被设为0。IDCODE数据寄存器长度为32,在Capture-DR状态下TCK上升沿,移位寄存器被设为设备标志码。设备ID数据寄存器最低位为1。
Manufacturer Identity不可能为全1。根据Rules 12.2.1,11位的厂商代码分为两个部分:7-1位来自EIA/JEP106定义的代码的低7位(最高位为校验位),11-8位为连接码符总数目与16的模。目前尚不清楚厂商代码如何计算连接码,但是连接码定义为7F,因此7-1不可能为全1,进而厂商代码不可能为全1。
00001111111为无效的厂商代码,任何与IEEE1149兼容的设备都不使用该代码。
连续产生5个TCK,并保持TMS为高,使TAP进入Test-Logic-Reset状态。
TDI移入1位’1’,读取TDO。如果TDO为0转至第3步,如果TDO为1转至第4步。
TDO为0表明设备连通了BYPASS寄存器,将设备识别状态置为UNKNOWN并转至第2步。
如果为1表明设备连通了设备ID寄存器,再向TDI移入31个’1’,从TDO读取31个位,已读取的32位即为设备ID。首先检查厂商代码是否为00001111111,如匹配则表明提示链中有不兼容设备存在,直接返回,否则继续。检查设备ID是否为32个1,如果是32个1表明扫描结束,转至第5步,否则将32位设备ID与已知设备ID进行匹配,匹配成功的显示设备信息,匹配不成功的显示UNKNOWN及设备ID,转至第2步。
更新信息,结束。
上述方法有一个前提:JTAG链正常,信号不存在不连通的情况。
当然,在实际情况中,这个前提通常不能满足,软件要考虑JTAG链断链或者器件故障等情况造成信号不通的异常情况,必须在流程上予以保证。标准没有对JTAG链上设备的最大数目作限制,但我们可以根据现有硬件的条件设定一个最大设备数(如10个),当已识别出的设备数超出该最大值时,可以认为链路故障。只要强加上述条件,在发生故障时,不论TDO信号恒为0,恒为1或者不断变化,都可以保证软件不会进入死循环。而只要链路正常,一定可以扫描到32个1。
评论