zoukankan      html  css  js  c++  java
  • 在JTAG菊花链拓扑对设备编程

    在JTAG菊花链拓扑对设备编程
    JTAG菊花链拓扑
    搜索未知菊花链
    菊花链IR和DR扫描
    JTAG菊花链拓扑

    所谓菊花链就是收尾相连,在菊花链中,所有设备共用TCK和TMS,JTAG连接器的TDI从其中一个设备的TDI输入,然后该设备的TDO连接到下一个设备的TDI,依次往复,直到最后一个设备,该设备的TDO连接到JTAG连接器的TDO。

    搜索未知菊花链
    这一步的主要功能是收集菊花链链路中所连接设备的信息。本文假定所有的指令寄存器的LSB为1,其他位全部为0(这种假设只是针对特定厂商的设备,在此仅为了举例,具体设备请查看具体的参考手册,以官方提供的文档为主).

    在设备复位后,默认选择的是32位的IDCODE寄存器,如果设备没有IDCODE寄存器,那么默认选定单比特的Bypass寄存器。

    菊花链探索分为两部分:指令寄存器扫描用于决定拓扑中的设备数和每个设备指令寄存器的长度;数据寄存器扫描用于收集每个设备的ID号。如果设备不支持IDCODE指令,那么给该设备分配0x00000000的ID号。

    指令寄存器探索过程开始于JTAG TAP复位操作,在随后的IR_Scan操作中,在最后一个设备(上图:JTAG Device #2)的TDI移入"1",直到在JTAG Device #0检测到“11”为止。从TDO获取的序列中每个"10"代表一个新设备,根据"10"出现的次数判断链路中设备数目。

    在IR扫描完成后,JTAG状态机被复位,搜索过程发出一个DR扫描来读取和存在设备的ID以备后用。从JTAG规范看,如果设备支持IDCODE,那么在DR扫描返回的最低位必须是"1";否则,如果设备不支持IDCODE,那么设备处于Bypass状态,DR扫描返回的最低位为0.

    菊花链IR和DR扫描
    在菊花链中,除需要编程的设备外的其他设备都需要配置到Bypass模式。这可以通过在被隔离设备之前和之后移入"1"来实现。比如指令宽度为4bit,当前菊花链中有三个设备:A、B和C。复位后,设备默认为读IDCODE指令。

    TDI -> Device A-> Device B -> Device C -> TDO
    Reset xxxx xxxx xxxx
    shift 1 1xxx xxxx xxxx
    shift 1 11xx xxxx xxxx
    shift 1 111x xxxx xxxx
    shift 1 1111 xxxx xxxx
    shift 0 0111 1xxx xxxx
    shift 1 1011 11xx xxxx
    shift 1 1101 111x xxxx
    shift 0 0110 1111 xxxx
    shift 1 1011 0111 1xxx
    shift 1 1101 1011 11xx
    shift 1 1110 1101 111x
    shift 1 1111 0110 1111

    从上面的推演可以看出,Device A和Device C处于Bypass模式,而Device B处于0110指令控制下,接下来DR扫描都是针对Device B进行的,而在Device A和Device C有一个TCK的延迟。总结如下:

    IR扫描:IR扫描序列中前m个1表示目前设备前的指令寄存器总宽度,后n个1表示目前设备后的设备指令寄存器bit总宽度。以上述推导为例,IR扫描序列:1111_0110_1111,前4个"1"表示Device A的指令寄存器位宽,后4个“1”表示Device C的指令寄存器位宽。
    DR扫描:DR扫描中前x个“0”表示目标设备前设备的数据寄存器总位宽,后y个“0”表示目标设备后设备的数据寄存器总位宽。
    DR扫描举例:
    假设Device A的IDCODE为00111,Device B的IDCODE为00011,Device C的IDCODE为00111.

    TDI -> Device A -> Device B -> Device C -> TDO
    Capture DR 00111 00011 00111
    Shift 0 00011 10001 10011 1
    shift 0 00001 11000 11001 11
    shift 0 00000 11100 01100 111
    shift 0 00000 01110 00110 1110
    shift 0 00000 00111 00011 1110_0
    shift 0 00000 00011 10001 1110_01
    shift 0 00000 00001 11000 1110_011
    shift 0 00000 00000 11100 1110_0110
    shift 0 00000 00000 01110 1110_0110_0
    shift 0 00000 00000 00111 1110_0110_00
    shift 0 00000 00000 00011 1110_0110_001
    shift 0 00000 00000 00001 1110_0110_0011
    shift 0 00000 00000 00000 11100_11000_111
    shift 0 00000 00000 00000 11100_11000_1110
    shift 0 00000 00000 00000 11100_11000_11100

    假设Device A和Device C处于Bypass模式,现在需要读取IDCODE信息:

    TDI -> Device A -> Device B -> Device C -> TDO
    Capture DR 0 00011 0
    Shift 0 0 00001 1 0
    shift 0 0 00000 1 01
    shift 0 0 00000 0 011
    shift 0 0 00000 0 0110
    shift 0 0 00000 0 01100
    shift 0 0 00000 0 011000
    shift 0 0 00000 0 0110000

    从上述推导可以看出,从TDI输入的序列为"000000"共7个"0",把从Device A到Device C整个链路上的寄存器内容全部读出。

    寄存器状态类似于:

    ————————————————
    版权声明:本文为CSDN博主「U.2 SSD」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/zdx19880830/java/article/details/105511026

  • 相关阅读:
    2018-2019-2 20175214 实验四《Android程序设计》实验报告
    20175214 《Java程序设计》第11周学习总结
    2018-2019-2 20175214 实验三《敏捷开发与XP实践》实验报告
    20175214 《Java程序设计》第9周学习总结
    编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能
    20175214 《Java程序设计》第8周学习总结
    2018-2019-2 20175214 实验二《面向对象程序设计》实验报告
    结对编程项目—四则运算 第二周 整体总结
    事物的传播行为
    mysql数据语句
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/13097636.html
Copyright © 2011-2022 走看看