摘要:本应用笔记讨论串口转JTAG接口板能够接收的命令。该接口板用于实现与MAXQ微控制器的接口。此处描述的命令可帮助开发人员读写MAXQ存储器(代码和数据),读写寄存器,以及使用在线调试器。
下载:本应用笔记中的源程序和原理图。
注意:本应用笔记假定您已熟悉MAXQ微控制器的TAP和基本JTAG通信。关于这些主题的详细信息,请参考MAXQ系列用户指南。
表1. 任何模式下均可接受的命令
如上述命令所示,MAXQ JTAG引擎具有不同的模式:旁路模式、自举加载模式、背景模式和调试模式。JTAG引擎功能在每个模式中均不同。当JTAG引擎进入不同模式时,除上面列出的命令以外,其它命令也开始生效。
表2. 背景模式下的命令
表3. 调试模式下的命令
注意:表2中列出的所有背景模式命令('E'除外)也可以用于调试模式。
表4. 二进制传输时,使用的特殊命令
表5. 错误代码
简介
MAXQ微控制器使用测试访问端口(TAP),通过一个4线同步串行接口实现与主机器件的通信。该TAP支持在系统编程和在线调试。TAP与JTAG IEEE标准1149兼容。为实现与TAP的连接,Dallas Semiconductor开发了串口转JTAG接口板和固件,通过标准RS-232串口接受命令,并将这些命令转换成适当的JTAG信号。本应用笔记对固件使用的命令协议进行说明。如果需要串口转JTAG接口板的更详细信息,请将问题通过电子邮件发至 micro.software@dalsemi.com (English only)。下载:本应用笔记中的源程序和原理图。
注意:本应用笔记假定您已熟悉MAXQ微控制器的TAP和基本JTAG通信。关于这些主题的详细信息,请参考MAXQ系列用户指南。
与固件接口
采用115200bps,8位、无校验和1停止位格式与接口板串口连接,建立与串口转JTAG接口板的通信。连接建立后,可采用ASCII或二进制模式中的任何一种与固件接口。固件默认为ASCII模式,将文本命令送至接口板,结果以文本字符串形式返回。二进制模式将在下面进行解释,该模式下所有传输为8位字节序列。可通过命令在任意时刻切换这两种模式。在ASCII模式下,可使用表1列出的命令。所有命令均对大小写敏感。可在一行中输入一组命令,也可以一次输入一个命令。表1. 任何模式下均可接受的命令
命令 | 说明 |
h | 保持复位,MAXQ停止运行。 |
H | 释放RESET使MAXQ工作。 |
I | 使系统进入旁路模式,复位TAP,使其返回Run-Test-Idle状态。 |
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时钟每个边沿前,等待定时器溢出。用定时器T0M位的值替换命令中的't',用TH0的值替换'xx',用TL0的值替换'yy'。所有值均以十六进制格式输入。关于这些值的详细信息,请参考超高速闪存微控制器用户指南。 |
Yrbbdd | 直接向TAP发送一个数值。用希望写入的TAP寄存器替换'r':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可接受字节的详细信息,请联系 micro.software@dalsemi.com (English only)。) 对于输入的每个字节,固件输出加载器返回的字节和自TAP接收的状态位。输出格式为"00xx:ss",其中'xx'是输出字节,'ss'是状态位。一旦输入"Exit Loader"命令(0x01)后,必须使用表1中列出的'J'命令之一,指示JTAG接口板MAXQ不再处于自举加载模式。背景模式
在JTAG引擎的背景模式,可以读写JTAG断点寄存器(BP0-BP5),读写在线调试寄存器(ICDC、ICDF、ICDA和ICDD),判决何时出现断点匹配,人工调用调试模式。支持这些操作的命令列于表2中。该模式下所有带有输出的命令,其输出格式为"xxyy:ss",其中'xx'是输出数据的MSB,'yy'是LSB,'ss'是从TAP返回的状态位。表2. 背景模式下的命令
命令 | 说明 |
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列出了该功能支持的命令。表3. 调试模式下的命令
命令 | 说明 |
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,以指示固件将接收的下一个字节做为特殊命令处理。对于这些特殊命令,返回单个字节。这通常只是命令的回应。表4. 二进制传输时,使用的特殊命令
命令 | 说明 |
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为错误类型。在二进制模式下,输出错误代码,而不是命令回应。请参考表5的错误代码说明。表5. 错误代码
错误代码 | 说明 |
0x80 | 无法识别的命令或无效命令。 |
0x90 | 接收到无效的十六进制字符。 |
0xA0 | 接收的输入不足。 |
0xB0 | 错误断点寄存器索引。 |
0xC? | 接收到非预期状态,其中?表示接收到的状态位。 |
评论
查看更多