用于MAXQ处理器的串行转JTAG板

描述

本应用笔记讨论了串行转JTAG板接受的命令。该板用于与MAXQ微控制器连接。这里描述的命令允许开发人员读写MAXQ的存储器(代码和数据),读写寄存器,并利用在线调试器。

介绍

MAXQ微控制器集成了一个测试访问端口(TAP),用于通过4线同步串行接口与主机设备通信。该TAP用于支持在系统编程和在线调试。TAP与JTAG IEEE标准1149兼容。为了连接到TAP,达拉斯半导体公司开发了一种串行到JTAG板和固件,通过标准RS-232串行端口接受命令,并将这些命令与适当的JTAG信号协调。本应用笔记描述了固件实现的命令协议。

注意:本应用笔记假定熟悉MAXQ微控制器的TAP和基本的JTAG通信。有关这些主题的详细信息,请参阅MAXQ系列用户指南。

与固件接口

要与串行转JTAG板建立通信,请使用115200个数据位、无奇偶校验和8个停止位以1波特率连接到该板的串行端口。连接后,您可以通过以下两种模式之一与固件接口:ASCII 或二进制。固件默认为 ASCII 模式,在该模式下,人类可读的文本命令被发送到电路板,结果以文本字符串的形式返回。在二进制模式下,所有传输都是一系列 8 位字节。有一些命令允许随时在两种模式之间切换。在 ASCII 模式下,表 1 中列出的命令始终可用。所有命令都区分大小写。可以在一行中输入命令组,也可以一次输入一个命令。

 

Command 描述
h 通过保持MAXQ复位来停止MAXQ。
H 释放复位,允许MAXQ运行。
I 将系统置于旁路模式并重置 TAP,使其返回到运行-测试-空闲状态。
JB 指示固件开始接受后台模式命令。该命令不会切换目标MAXQ上的模式,也不会向目标器件发送任何JTAG命令。它只是为了指示固件MAXQ已经通过其他方式改变了模式。
JD 指示固件开始接受调试模式命令。该命令不会切换目标MAXQ上的模式,也不会向目标器件发送任何JTAG命令。它只是为了指示固件MAXQ已经通过其他方式改变了模式。
JL 指示固件开始接受引导加载程序命令。该命令不会切换目标MAXQ上的模式,也不会向目标器件发送任何JTAG命令。它只是为了指示固件MAXQ已经通过其他方式改变了模式。
JX 指示固件开始接受旁路模式命令。该命令不会切换目标MAXQ上的模式,也不会向目标器件发送任何JTAG命令。它只是为了指示固件MAXQ已经通过其他方式改变了模式。
Q 查询 JTAG 板的接口版本号。版本号将输出为两个十六进制字符。只要任何命令的格式或其输出发生变化,此版本就会更改。编写本文档时的界面版本为 01。
q 查询 JTAG 板的固件版本号。版本号将输出为两个十六进制字符。此版本将在固件更改时随时更改。编写本文档时的固件版本为 02。
Vtxxyy 设置 JTAG 板的 Timer0。由于JTAG时钟必须小于目标时钟的1/8,固件使用Timer0来控制JTAG时钟的速度。固件等待定时器溢出,然后再生成JTAG时钟的每个边沿。将“t”替换为用于计时器 T0M 位的值,将“xx”替换为用于 TH0 的值,将“yy”替换为用于 TL0 的值。所有值都应以十六进制格式输入。有关这些值用途的详细信息,请参阅《超高速闪存微控制器用户指南》。
Yrbbdd 将值直接发送到 TAP。将“r”替换为要写入的 TAP 寄存器:0 表示 DR,1 表示 IR。“bb”是要写入的位数(不包括状态位),“dd”是要发送的数据。所有值都应以十六进制格式输入。
Z 将固件切换到二进制传输。
z 执行JTAG时钟的单个脉冲。
+ 对JTAG板执行简单的硬件测试。CLK、TMS 和 TDI 引脚均被置位,TDO的状态被读取并输出为“0”或“1”。然后可以测量引脚上的电压,以确保它们正常工作。
  对JTAG板执行简单的硬件测试。CLK、TMS 和 TDI 引脚均设置为逻辑低电平,TDO的状态被读取并输出为“0”或“1”。然后可以测量引脚上的电压,以确保它们正常工作。

 

如上述命令所示,MAXQ JTAG引擎有几种不同的模式:旁路模式、自举加载器模式、后台模式和调试模式。JTAG引擎在每种模式下的功能都不同。因此,除了上面列出的命令之外,当JTAG引擎进入这些不同的模式时,其他命令变得可用。

旁路模式

TAP在上电复位期间初始化为旁路模式。在这种模式下,TAP被禁用,并且不与MAXQ微控制器的其余部分交互。要激活 TAP,请输入此模式下可用的两个附加命令之一:“D”和“L”。“D”命令激活在线调试器,“L”命令激活引导加载程序。

引导加载程序模式

当使用“L”命令激活自举加载程序后,可以将字节直接发送到MAXQ的实用程序ROM。 以两个十六进制字符的形式输入每个值。(有关实用程序 ROM 接受的字节数的详细信息,请联系技术支持。)对于输入的每个字节,固件输出加载程序返回的字节和从TAP接收的状态位。输出的格式将为“00xx:ss”,其中“xx”是输出字节,“ss”是状态位。输入“退出加载器”命令(0x01)后,必须使用表1中列出的“J”命令之一来指示JTAG板,MAXQ不再处于自举加载器模式。

后台模式

在JTAG引擎的后台模式下,可以读写JTAG断点寄存器(BP0-BP5),读写在线调试寄存器(ICDC、ICDF、ICDA和ICDD),确定断点匹配何时发生,并手动调用调试模式。表 2 中列出了支持这些操作的命令。对于此模式下具有输出的所有命令,格式将为“xxyy:ss”,其中“xx”是输出数据的MSB,“yy”是LSB,“ss”是TAP返回的状态位。

 

Command 描述
A 阅读ICDA寄存器。
axxyy 写入 ICDA 寄存器,其中“xx”是新值的 MSB,“yy”是新 LSB。值应以两个十六进制字符的形式输入。
Bi 读取 6 个断点寄存器中的任何一个,其中“i”是要读取的断点寄存器的索引(0 到 5)。
bixxyy 写入 6 个断点寄存器中的任何一个,其中“i”是要写入的断点寄存器的索引(0 到 5),“xx”是新值的 MSB,“yy”是 LSB。MSB 和 LSB 值应以两个十六进制字符的形式输入。
C 阅读 ICDC 寄存器。
CXX 写入 ICDC 寄存器,其中“xx”是新值。值应以两个十六进制字符的形式输入。
D 阅读ICDD寄存器。
dxxyy 写入 ICDD 寄存器,其中“xx”是新值的 MSB,“yy”是新 LSB。值应以两个十六进制字符的形式输入。
E 进入调试模式。
F 阅读ICDF寄存器。
N 无操作。

 

调试模式

JTAG引擎可以通过两种方式进入调试模式。第一种方法是在后台模式下输入“进入调试模式”命令(“E”)。激活调试的第二种方式发生在断点匹配发生时。在这种情况下,您应该输入“JD”命令以通知固件模式已更改。一旦进入调试模式,就可以读写MAXQ寄存器,读取程序栈,读写数据存储器,单步操作MAXQ CPU,返回后台模式,并执行密码匹配以解锁某些命令。表 3 列出了支持此功能的命令。

 

Command 描述
E 退出调试模式,返回后台模式。
G 获取所有寄存器。寄存器的顺序取决于MAXQ器件的类型。
Mxxyyiijj 读取数据存储器,其中“xx”是要读取的单词地址的MSB,“yy”是地址的LSB,“ii”是要读取的字数的MSB,“jj”是长度的LSB。所有值都应输入为两个十六进制字符。
MXXYYIIJJ 将一个单词写入数据存储器,其中“xx”是单词地址的MSB,“yy”是地址的LSB,“ii”是要写入的单词的MSB,“jj”是要写入的单词的LSB。所有值都应输入为两个十六进制字符。
n 无操作。
Pxx1...xx32 尝试与给定数据进行密码匹配。所有 32 个值都应输入为两个十六进制字符。
R0iim 读取寄存器,其中“ii”是寄存器的索引,“m”是寄存器的模块。索引应作为两个十六进制字符输入,模块应作为单个十六进制字符输入。
r0iimxxyy 写一个寄存器,其中“ii”是寄存器的索引,“m”是寄存器的模块,“xx”是新值的MSB,“yy”是LSB。新值的索引和每个字节应输入为两个十六进制字符。模块应作为单个十六进制字符输入。
Sxxyyiijj 读取程序栈,其中“xx”是要读取的单词地址的MSB,“yy”是地址的LSB,“ii”是要读取的字数的MSB,“jj”是长度的LSB。所有值都应输入为两个十六进制字符。
T 在当前指令指针处执行指令。
注意:表 2 中列出的所有后台模式命令(“E”除外)也可以在调试模式下使用。

 

二进制传输

表 1、2 和 3 中描述的所有命令都易于手动输入,其输出也易于理解。然而,在许多情况下,会有软件控制JTAG板。由于ASCII命令不便于软件使用,并且在将结果转换回二进制数据时需要进行不必要的处理,因此JTAG固件还支持二进制传输。在二进制传输模式下,通过首先发送指示要发送的字节数的字节将数据发送到 TAP。然后,数据应随之而来。对于发送的每个数据字节,固件输出两个字节。返回的第一个字节是在传输过程中读取的状态位。第二个字节将保存传输过程中从TAP读取的值。在二进制模式下还可以发送特殊命令。表 4 中描述了这些命令。要发送这些特殊命令之一,请发送 0 作为长度字节。这将指示固件将收到的下一个字节视为特殊命令。对于这些特殊命令,将返回单个字节。通常,这只是命令的回显。

 

Command 描述
0x00 退出二进制模式传输并返回到接受 ASCII 命令。
0x01 将 TAP 的 IR 寄存器设置为数据传输的目标。
0x02 将 TAP 的 DR 寄存器设置为数据传输的目标。
0x03 传输数据时仅发送每个字节的最低 3 位。
0x04 将RESET引脚设置为逻辑高电平。
0x05 将RESET引脚清除至逻辑低电平。
0x06 执行JTAG时钟的单个脉冲。
0x07 读取 TDO 引脚的状态。
0x08 传输数据时发送每个字节的所有 8 位。
0x09 将TMS引脚设置为逻辑高电平。
0x0A 将TMS引脚清除至逻辑低电平。
0x0B 将TDI引脚设置为逻辑高电平。
0x0C 将TDI引脚清除至逻辑低电平。
0x0D 设置 T0M 位。有关此位的详细信息,请参阅表 1 中描述的“V”命令。
0x0E 清除 T0M 位。有关此位的详细信息,请参阅表 1 中描述的“V”命令。
0x11 使用收到的下一个字节作为 TL0 的值。此“下一个”字节不需要长度字节或用作特殊命令转义字符的“0”。有关TL0寄存器的更多信息,请参阅表1中描述的“V”命令。
0x12 使用收到的下一个字节作为 TH0 的值。此“下一个”字节不需要长度字节或用作特殊命令转义字符的“0”。有关 TH0 寄存器的更多信息,请参阅表 1 中描述的“V”命令。

 

检测错误

在 ASCII 传输模式和二进制传输模式下,发生的任何错误都由命令的输出指示。在 ASCII 模式下,错误将输出为“*ERR=xx*”,其中 xx 表示发生的错误类型。在二进制模式下,输出错误代码而不是命令 echo。有关可能的错误代码的说明,请参阅表 5。

 

错误代码 描述
0x80 命令无法识别或命令无效。
0x90 收到无效的十六进制字符。
0xA0 收到的输入不足。
0xB0 断点寄存器索引错误。
0xC? 收到意外状态,在哪里?表示接收的状态位。

 

结论

使用本文所述的命令,串行转JTAG板可用于将代码加载到MAXQ处理器中,读写系统寄存器,读写存储器,以及利用在线调试器。此过程既可以通过使用二进制协议的主机软件自动执行,也可以与终端程序交互输入。为完全控制MAXQ系统所需的所有命令提供了构建模块。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分