通过JTAG接口控制菊花链(Daisy Chain)上的多个设备,需要利用JTAG协议的菊花链特性,通过移位寄存器串联各设备的JTAG接口,并通过软件精确控制数据移位来定位目标设备。以下是具体实现方式:
1. 菊花链的JTAG硬件连接原理
JTAG菊花链将多个设备的JTAG接口串联,形成一个串行移位寄存器:
- 每个设备的
TDO(测试数据输出)连接到下一个设备的TDI(测试数据输入) - 所有设备共享
TCK(测试时钟)和TMS(测试模式选择)信号 - 第一个设备的
TDI和最后一个设备的TDO连接到控制器(如调试器)
这种结构使得所有设备的JTAG寄存器(如IR指令寄存器、DR数据寄存器)形成一个串联的移位寄存器,软件通过控制移位方向和位数来单独访问某个设备。
2. 软件控制流程
步骤1:初始化JTAG控制器
- 配置JTAG控制器的时钟频率(
TCK)、数据传输模式(同步/异步) - 确保所有设备处于JTAG复位状态(通过
TMS信号序列)
步骤2:识别菊花链中的设备
- 发送IDCODE指令(JTAG标准指令,二进制
1110) - 连续移位读取所有设备的IDCODE(每个设备的IDCODE为32位)
- 根据IDCODE判断设备数量和类型,建立设备索引表
步骤3:选中目标设备
通过指令寄存器(IR)移位单独选中目标设备:
- 向所有设备发送
BYPASS指令(二进制111111),使非目标设备进入直通模式(数据从TDI直接传到TDO,不处理指令) - 计算目标设备在菊花链中的位置
N(从0开始) - 构造指令序列:
- 前
N个设备:填充BYPASS指令(长度=设备IR位数) - 目标设备:填充目标指令(如
EXTEST、SAMPLE等) - 剩余设备:填充
BYPASS指令
- 前
- 通过
TDI移位发送指令序列,TCK同步时钟 - 指令锁存后,只有目标设备执行指令,其他设备保持直通
步骤4:向目标设备传输数据
通过数据寄存器(DR)移位与目标设备交互:
- 构造数据序列:
- 前
N个设备:填充无效数据(长度=设备DR位数) - 目标设备:填充实际数据(如配置参数、读写命令)
- 剩余设备:填充无效数据
- 前
- 移位发送数据,同时从
TDO读取返回数据 - 数据锁存后,目标设备处理数据并返回结果
步骤5:切换控制对象
- 重复步骤3-4,通过修改目标设备索引
N,切换控制对象 - 若需批量操作多个设备,可发送广播指令(所有设备IR均加载相同指令)
3. 关键技术点
- 指令/数据对齐:需知道每个设备的IR(指令寄存器)和DR(数据寄存器)位数,确保移位长度正确
- 时序控制:
TCK频率需低于所有设备的最大支持频率,避免数据错误 - 错误处理:通过读取设备状态寄存器(如
STATUS)检测通信错误,超时重传 - 热插拔支持:部分设备支持动态加入/移除菊花链,需通过重新扫描IDCODE更新设备表
4. 示例代码框架(伪代码)
// 设备信息结构体
typedef struct {
uint32_t idcode; // 设备ID


1万+

被折叠的 条评论
为什么被折叠?



