软件如何通过jtag 口控制菊花链上不同的设备

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

通过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)移位单独选中目标设备:

  1. 向所有设备发送BYPASS指令(二进制111111),使非目标设备进入直通模式(数据从TDI直接传到TDO,不处理指令)
  2. 计算目标设备在菊花链中的位置N(从0开始)
  3. 构造指令序列:
    • N个设备:填充BYPASS指令(长度=设备IR位数)
    • 目标设备:填充目标指令(如EXTESTSAMPLE等)
    • 剩余设备:填充BYPASS指令
  4. 通过TDI移位发送指令序列,TCK同步时钟
  5. 指令锁存后,只有目标设备执行指令,其他设备保持直通
步骤4:向目标设备传输数据

通过数据寄存器(DR)移位与目标设备交互:

  1. 构造数据序列:
    • N个设备:填充无效数据(长度=设备DR位数)
    • 目标设备:填充实际数据(如配置参数、读写命令)
    • 剩余设备:填充无效数据
  2. 移位发送数据,同时从TDO读取返回数据
  3. 数据锁存后,目标设备处理数据并返回结果
步骤5:切换控制对象
  • 重复步骤3-4,通过修改目标设备索引N,切换控制对象
  • 若需批量操作多个设备,可发送广播指令(所有设备IR均加载相同指令)

3. 关键技术点

  • 指令/数据对齐:需知道每个设备的IR(指令寄存器)和DR(数据寄存器)位数,确保移位长度正确
  • 时序控制TCK频率需低于所有设备的最大支持频率,避免数据错误
  • 错误处理:通过读取设备状态寄存器(如STATUS)检测通信错误,超时重传
  • 热插拔支持:部分设备支持动态加入/移除菊花链,需通过重新扫描IDCODE更新设备表

4. 示例代码框架(伪代码)

// 设备信息结构体
typedef struct {
   
   
    uint32_t idcode;      // 设备ID
    

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值