【ARM Trace32(劳特巴赫) 使用介绍 5-- Trace32 通过 JTAG 命令获取 DP IDCODE】


请阅读【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 [ …]:根据后面参数值将 状态机运行到对应的状态上;
  • JTAG.SHIFTTDI [ …]:如果 TAP状态机处于“Shift-DR” 就将命令后的参数转移到TMS上,最左边开始。
  • JTAG.SHIFTREG [ …]:如果 TAP状态机处于“Shift-DR” 就将命令后的参数转移到TMS上,并离开“Shift-DR”状态。

JTAG.SHIFTTDIJTAG.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.SetData.CData.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.UNLOCK

PRINT "--ID-code of device : &idcode"
ENDDO
  • Trace32 脚本运行
    【ARM Trace32(劳特巴赫) 使用介绍 5-- Trace32 通过 JTAG 命令获取 DP IDCODE】_第1张图片
  • Trace32 IDDECODE 值输出
    【ARM Trace32(劳特巴赫) 使用介绍 5-- Trace32 通过 JTAG 命令获取 DP IDCODE】_第2张图片

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

你可能感兴趣的:(#,ARM,Coresight,Debug,工具系列,arm开发,Trace32,JTAG,JTAG,命令)