请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】
文章目录
- Trace JTAG Command Line
- Trace32 JTAG 数据发送命令
- Trace32 JTAG 数据接收命令
- Trace32 数据访问修饰符
- Trace32 IDCODE 脚本实例
- Trace32 API
Trace JTAG Command Line
Trace32 JTAG 数据发送命令
JTAG.SHIFTTMS <bit> [ <bit> …]
:根据后面参数值将 状态机运行到对应的状态上;JTAG.SHIFTTDI <bit> [ <bit> …]
:如果 TAP状态机处于“Shift-DR” 就将命令后的参数转移到TMS
上,最左边开始。JTAG.SHIFTREG<bit> [ <bit> …]
:如果 TAP状态机处于“Shift-DR” 就将命令后的参数转移到TMS
上,并离开“Shift-DR”状态。
JTAG.SHIFTTDI
与 JTAG.SHIFTREG
的区别:
JTAG.SHIFTTDI
最后会产生一个 0 在 TMS上,所以最后保持在Shift-IR
或者Shift-DR
状态;JTAG.SHIFTREG
最后会在 TMS上发送个1 用来跳转到下个状态Exit1-IR
或者Exit1-DR
状态。
Trace32 JTAG 数据接收命令
在每次的shift 操作后,TDO上的数据都会被读出,可以通过JTAG.SHIFT()
来读取最后一次 TMS 或者 TDI shift 操作后的数据。
Trace32 数据访问修饰符
在Trace32环境中,%byte
, %word
, %long
是数据访问修饰符,用于指定数据的大小和对齐方式。
%byte
: 该修饰符用于指定一个字节(8位)大小的数据。例如,在访问内存时,可以使用%byte
来读取或写入一个字节的数据。%word
: 该修饰符用于指定一个字(通常为16位,但具体大小取决于目标系统)大小的数据。例如,在访问内存时,可以使用%word
来读取或写入一个字的数据。%long
: 该修饰符用于指定一个长字(通常为32位,但具体大小取决于目标系统)大小的数据。例如,在访问内存时,可以使用%long
来读取或写入一个长字的数据。
这些修饰符可以用在许多Trace32命令中,如Data.Set
、Data.C
、Data.S
等,以指定数据的大小和对齐方式。例如,以下命令会在地址0x1000
处写入一个长字的数据:
Data.Set %long 0x1000 0x12345678
这个命令会将0x12345678
这个32位的值写入地址0x1000
处。
Trace32 IDCODE 脚本实例
; Lock JTAG port and enable debug cable
JTAG.LOCK
JTAG.PIN ENable; release System Reset
; reset TAP Controller and move to “Run-Test/ Idle“; read JTAG ID Code:
; move TAP controller from “Run-Test/ Idle“ to "Shift-DR" state
JTAG.SHIFTTMS 1 0 0; 32 Bit "Shift-DR", WITH exiting to "EXIT1-DR"
JTAG.SHIFTREG %Long 0x0; get data read out via TDO
&idcode=JTAG.SHIFT(); move TAP controller from "Exit1-DR" to "Run-Test/ Idle" state
JTAG.SHIFTTMS 1 0; Release JTAG port
JTAG.PIN TMS 0 ; pull TMS pin to 0
JTAG.PIN TDI 0 ; pull TDI pin to 0
JTAG.UNLOCKPRINT "--ID-code of device : &idcode"
ENDDO
- Trace32 脚本运行
- Trace32 IDDECODE 值输出
Trace32 API
t32_cmd()
和 t32_cmdwin()
是Trace32 API中的两个函数,都用于执行Trace32命令。
t32_cmd()
: 该函数用于在Trace32环境中执行一条命令。这个命令被立即执行,并且不会在命令窗口中显示。这对于在后台执行命令非常有用。函数原型如下:
int t32_cmd(const char *commandstring);
commandstring 参数是你想要执行的Trace32命令字符串。
t32_cmdwin()
: 该函数用于在Trace32命令窗口中执行一条命令。这个命令被写入命令窗口,并像手动在命令窗口中输入命令一样执行。函数原型如下:
int t32_cmdwin(const char *commandstring);
commandstring 参数是你想要执行的Trace32命令字符串。
这两个函数都返回一个整数值,表示命令执行的结果。如果返回0,意味着命令成功执行。如果返回非0值,意味着命令执行过程中发生了错误。
例如,你可以用t32_cmd()
来设置一个断点,然后用t32_cmdwin()
来执行一条go命令,这样用户可以在命令窗口中看到程序运行的结果。
关于 Trace32 JTAG 更多命令见: general_ref_j.pdf