MAXQ处理器的串口转JTAG接口板

Abstract

本应用笔记讨论串口转JTAG接口板能够接收的命令。该接口板用于实现与MAXQ微控制器的接口。此处描述的命令可帮助开发人员读写MAXQ存储器(代码和数据),读写寄存器,以及使用在线调试器。

简介

MAXQ微控制器使用测试访问端口(TAP),通过一个4线同步串行接口实现与主机器件的通信。该TAP支持在系统编程和在线调试。TAP与JTAG IEEE标准1149兼容。为实现与TAP的连接,Dallas Semiconductor开发了串口转JTAG接口板和固件,通过标准RS-232串口接受命令,并将这些命令转换成适当的JTAG信号。本应用笔记对固件使用的命令协议进行说明。如果需要串口转JTAG接口板的更详细信息,请将问题发送至我们的技术支持团队。

下载:本应用笔记中的源程序和原理图

注意:本应用笔记假定您已熟悉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可接受字节的详细信息,请联系技术支持)。对于输入的每个字节,固件输出加载器返回的字节和自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? 接收到非预期状态,其中?表示接收到的状态位。

结论

采用本文档中说明的命令,串口转JTAG接口板可用于向MAXQ处理器装载代码,读写系统寄存器,读写存储器,使用在线调试器。该过程可采用二进制协议通过主机软件自动完成或通过终端程序交互输入完成。提供所有命令所需功能模块以完全控制MAXQ系统。