Trace32 SRST和TRST、system.attach 和 system.up的区别

39 篇文章 15 订阅
7 篇文章 4 订阅

目录

TRST-Resets the JTAG TAP controller and the CPU internal debug logic

SRST- Resets the CPU core and peripherals

SYStem.Mode Down

SYStem.Mode Nodebug

SYStem.Mode Prepare

SYStem.Mode Go

SYStem.Mode Attach

SYStem.Mode StandBy

SYStem.Mode Up


下图为Trace32工具为ARM debug设计的 JTAG pin 脚图:

 其中,TRST和SRST信号是可选的。

TRST-Resets the JTAG TAP controller and the CPU internal debug logic

Test Reset 信号用于JTAG Test Access Port (TAP)的异步重置。它将reset TAP的状态机,以及绝大部分ARM系列的debug相关寄存器。从调试器的视角,TRST信号从调试器输出至目标板。它是低电平有效。

SRST- Resets the CPU core and peripherals

System Reset,低电平有效,用于reset 目标系统。这个信号同样也可以用于调试器检测目标处理器是否处于reset状态。该信号可以是输入或者输出。

SYStem.Mode Down

禁用调试器,CPU的状态不会改变。

SYStem.Mode Nodebug

同down,禁用调试器,CPU的状态不会改变。

SYStem.Mode Prepare

reset 目标处理器,可以通过重置信号(reset line)或者CPU中特殊的reset寄存器来实现。之后,将提供对CoreSight DAP接口的直接访问。对于reset,reset line必须连接到调试器。

调试器将初始化一些debug 端口(JTAG,SWD,cJTAG)以及CoreSight DAP接口,但是并不连接到CPU。这种Mode可以用于一些不需要debug CPU或者绕过CPU的场景,调试器直接通过内存总线(memory bus),比如AXI,AHB或者APB等,直接通过CoreSight DAP的内存访问端口,比如:

  • 调试器绕过CPU,直接访问物理内存。如果改映射存在,内存应该在被访问前,被初始化。
  • 调试器访问外设,例如,在调试模式下,停止CPU之前配置寄存器。可能需要先对外设进行计时和供电,然后才能访问它们。
  • 第三方软件或一些特殊调试器使用 TRACE32 API通过 TRACE32 调试器硬件访问调试端口和 DAP。

SYStem.Mode Go

通过复位线复位目标,初始化调试端口(JTAG、SWD、cJTAG),并开始进程执行。对于重置,重置线必须连接到调试连接器

SYStem.Mode Attach

不会发生重置,CPU状态(正在运行或停止)不会更改。调试端口(JTAG,SWD,cJTAG)将被初始化。 执行此命令后,例如,可以使用 Break 命令停止用户进程。

SYStem.Mode StandBy

通过复位线使目标保持复位状态,并等待检测到电源。对于重置,重置线必须连接到调试连接器。 一旦检测到电源,调试器就会恢复尽可能多的调试寄存器(例如片上断点、矢量捕获事件、控制),并从复位中释放CPU以启动进程执行。 检测到 CPU 断电时,调试器会自动切换回待机模式。这允许调试电源周期,因为调试寄存器将在上电时恢复。 注意:通常只能在CPU运行时设置片上断点和矢量捕获事件。要设置软件断点,必须停止 CPU。

SYStem.Mode Up

通过复位线复位目标,初始化调试端口(JTAG、SWD、cJTAG),停止CPU,并进入调试模式,相关寄存器被恢复为默认值。 对于重置,重置线必须连接到调试连接器。 所有寄存器的当前状态都是从 CPU 读取的。

虽然笔者未在文档中找到关于SYStem.Mode Up 会触发SRST的相关描述,但在实际使用中,如果把EnRESET选项设置为ON,可以发现SYStem.Mode Up确实会触发SRST。

参考文章:

TRACE32® Download TRACE32® Help System (lauterbach.com)

jtag_host.h是JTAG Host库的头文件,主要用于与JTAG设备进行通信。以下是jtag_host.h的源代码: ``` #ifndef __JTAG_HOST_H__ #define __JTAG_HOST_H__ #include <stdint.h> #define JTAG_HOST_BUF_SIZE 1024 typedef struct { uint8_t *buf; // 数据缓存区 uint32_t buf_size; // 缓存区大小 uint32_t index; // 当前写入的位置 } jtag_host_buf_t; typedef struct { uint8_t tms; // TMS信号 uint8_t tdi; // TDI信号 uint8_t tdo; // TDO信号 uint8_t trst; // TRST信号 uint8_t srst; // SRST信号 } jtag_host_signal_t; typedef struct { uint32_t freq; // JTAG时钟频率 uint32_t tck_delay; // TCK延时 uint32_t trst_delay; // TRST延时 uint32_t srst_delay; // SRST延时 uint32_t timeout; // 超时时间 uint32_t retry; // 重试次数 } jtag_host_cfg_t; typedef struct { jtag_host_signal_t signal; // JTAG信号 uint32_t tck_freq; // TCK频率 uint32_t tck_div; // TCK分频 jtag_host_cfg_t cfg; // JTAG Host配置 } jtag_host_t; /** * @brief JTAG Host初始化 * * @param jtag JTAG Host对象指针 * @param buf 数据缓存区 * @param size 缓存区大小 */ void jtag_host_init(jtag_host_t *jtag, uint8_t *buf, uint32_t size); /** * @brief JTAG Host释放 * * @param jtag JTAG Host对象指针 */ void jtag_host_free(jtag_host_t *jtag); /** * @brief JTAG Host连接 * * @param jtag JTAG Host对象指针 * * @return true 连接成功 * false 连接失败 */ bool jtag_host_connect(jtag_host_t *jtag); /** * @brief JTAG Host断开连接 * * @param jtag JTAG Host对象指针 */ void jtag_host_disconnect(jtag_host_t *jtag); /** * @brief JTAG Host写入数据 * * @param jtag JTAG Host对象指针 * @param data 数据 * @param size 数据大小 * * @return true 写入成功 * false 写入失败 */ bool jtag_host_write(jtag_host_t *jtag, uint8_t *data, uint32_t size); /** * @brief JTAG Host读取数据 * * @param jtag JTAG Host对象指针 * @param data 数据 * @param size 数据大小 * * @return true 读取成功 * false 读取失败 */ bool jtag_host_read(jtag_host_t *jtag, uint8_t *data, uint32_t size); /** * @brief JTAG Host写入并读取数据 * * @param jtag JTAG Host对象指针 * @param tx_data 写入数据 * @param tx_size 写入数据大小 * @param rx_data 读取数据 * @param rx_size 读取数据大小 * * @return true 写入并读取成功 * false 写入并读取失败 */ bool jtag_host_write_read(jtag_host_t *jtag, uint8_t *tx_data, uint32_t tx_size, uint8_t *rx_data, uint32_t rx_size); #endif /* __JTAG_HOST_H__ */ ``` 该头文件中定义了JTAG Host库的结构体和函数,包括: - jtag_host_buf_t:数据缓存区结构体,用于存储JTAG Host传输的数据。 - jtag_host_signal_t:JTAG信号结构体,包括TMS、TDI、TDO、TRSTSRST等信号。 - jtag_host_cfg_t:JTAG Host配置结构体,包括JTAG时钟频率、TCK延时、TRST延时、SRST延时、超时时间和重试次数等参数。 - jtag_host_t:JTAG Host对象结构体,包括JTAG信号、TCK频率、TCK分频和JTAG Host配置等参数。 - jtag_host_init:JTAG Host初始化函数,用于初始化JTAG Host对象。 - jtag_host_free:JTAG Host释放函数,用于释放JTAG Host对象。 - jtag_host_connect:JTAG Host连接函数,用于连接JTAG设备。 - jtag_host_disconnect:JTAG Host断开连接函数,用于断开JTAG设备连接。 - jtag_host_write:JTAG Host写入数据函数,用于向JTAG设备写入数据。 - jtag_host_read:JTAG Host读取数据函数,用于从JTAG设备读取数据。 - jtag_host_write_read:JTAG Host写入并读取数据函数,用于向JTAG设备写入数据并读取返回的数据。 这些函数提供了基本的JTAG通信功能,可用于JTAG设备的调试和测试等应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SOC罗三炮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值