摘要:本應用筆記討論串口轉JTAG接口板能夠接收的命令。該接口板用于實現(xiàn)與MAXQ微控制器的接口。此處描述的命令可幫助開發(fā)人員讀寫MAXQ存儲器(代碼和數(shù)據(jù)),讀寫寄存器,以及使用在線調試器。
下載:本應用筆記中的源程序和原理圖。
注意:本應用筆記假定您已熟悉MAXQ微控制器的TAP和基本JTAG通信。關于這些主題的詳細信息,請參考MAXQ系列用戶指南。
表1. 任何模式下均可接受的命令
如上述命令所示,MAXQ JTAG引擎具有不同的模式:旁路模式、自舉加載模式、背景模式和調試模式。JTAG引擎功能在每個模式中均不同。當JTAG引擎進入不同模式時,除上面列出的命令以外,其它命令也開始生效。
表2. 背景模式下的命令
表3. 調試模式下的命令
注意:表2中列出的所有背景模式命令('E'除外)也可以用于調試模式。
表4. 二進制傳輸時,使用的特殊命令
表5. 錯誤代碼
簡介
MAXQ微控制器使用測試訪問端口(TAP),通過一個4線同步串行接口實現(xiàn)與主機器件的通信。該TAP支持在系統(tǒng)編程和在線調試。TAP與JTAG IEEE標準1149兼容。為實現(xiàn)與TAP的連接,Dallas Semiconductor開發(fā)了串口轉JTAG接口板和固件,通過標準RS-232串口接受命令,并將這些命令轉換成適當?shù)腏TAG信號。本應用筆記對固件使用的命令協(xié)議進行說明。如果需要串口轉JTAG接口板的更詳細信息,請將問題通過電子郵件發(fā)至 micro.software@dalsemi.com (English only)。下載:本應用筆記中的源程序和原理圖。
注意:本應用筆記假定您已熟悉MAXQ微控制器的TAP和基本JTAG通信。關于這些主題的詳細信息,請參考MAXQ系列用戶指南。
與固件接口
采用115200bps,8位、無校驗和1停止位格式與接口板串口連接,建立與串口轉JTAG接口板的通信。連接建立后,可采用ASCII或二進制模式中的任何一種與固件接口。固件默認為ASCII模式,將文本命令送至接口板,結果以文本字符串形式返回。二進制模式將在下面進行解釋,該模式下所有傳輸為8位字節(jié)序列。可通過命令在任意時刻切換這兩種模式。在ASCII模式下,可使用表1列出的命令。所有命令均對大小寫敏感。可在一行中輸入一組命令,也可以一次輸入一個命令。表1. 任何模式下均可接受的命令
命令 | 說明 |
h | 保持復位,MAXQ停止運行。 |
H | 釋放RESET使MAXQ工作。 |
I | 使系統(tǒng)進入旁路模式,復位TAP,使其返回Run-Test-Idle狀態(tài)。 |
JB | 指示固件開始接受背景模式命令。該命令不切換目標MAXQ模式,也不對目標器件發(fā)送任何的JTAG命令。該命令僅指示固件MAXQ由其它途徑改變了模式。 |
JD | 指示固件開始接受調試模式命令。該命令不切換目標MAXQ的模式,也不對目標器件發(fā)送任何的JTAG命令。該命令僅指示固件MAXQ由其它途徑改變了模式。 |
JL | 指示固件開始接受自舉加載命令。該命令不切換目標MAXQ的模式,也不對目標器件發(fā)送任何的JTAG命令。該命令僅指示固件MAXQ由其它途徑改變了模式。 |
JX | 指示固件開始接受旁路模式命令。該命令不切換目標MAXQ的模式,也不對目標器件發(fā)送任何的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發(fā)送一個數(shù)值。用希望寫入的TAP寄存器替換'r':0為DR,1為IR。'bb'是要寫入的位數(shù)(不包括狀態(tài)位),'dd'是發(fā)送的數(shù)據(jù)。所有數(shù)值應以十六進制格式輸入。 |
Z | 將固件切換為二進制傳輸。 |
z | 執(zhí)行JTAG時鐘的單個脈沖。 |
+ | 進行JTAG接口板簡單硬件測試。CLK、TMS和TDI引腳全部置高,讀取TDO狀態(tài),輸出為'0'或'1'。然后可測量引腳電壓,檢查其是否正常工作。 |
- | 進行JTAG接口板簡單硬件測試。CLK、TMS和TDI引腳全部置低,讀取TDO狀態(tài),輸出為'0'或'1'。然后可測量引腳電壓,檢查其是否正常工作。 |
如上述命令所示,MAXQ JTAG引擎具有不同的模式:旁路模式、自舉加載模式、背景模式和調試模式。JTAG引擎功能在每個模式中均不同。當JTAG引擎進入不同模式時,除上面列出的命令以外,其它命令也開始生效。
旁路模式
上電復位時,TAP初始化為旁路模式。在該模式下,TAP被禁用,與MAXQ微控制器的其它部件沒有相互作用。在該模式下要激活TAP,可輸入兩個附加命令之一:'D'和'L'。'D'命令激活在線調試器,'L'命令激活自舉加載器。自舉加載模式
當采用'L'命令激活自舉加載器時,可直接向MAXQ固定用途ROM發(fā)送數(shù)據(jù)字節(jié)。每個發(fā)送的字節(jié)值以兩個十六進制字符的形式表示。(關于固定用途ROM可接受字節(jié)的詳細信息,請聯(lián)系 micro.software@dalsemi.com (English only)。) 對于輸入的每個字節(jié),固件輸出加載器返回的字節(jié)和自TAP接收的狀態(tài)位。輸出格式為"00xx:ss",其中'xx'是輸出字節(jié),'ss'是狀態(tài)位。一旦輸入"Exit Loader"命令(0x01)后,必須使用表1中列出的'J'命令之一,指示JTAG接口板MAXQ不再處于自舉加載模式。背景模式
在JTAG引擎的背景模式,可以讀寫JTAG斷點寄存器(BP0-BP5),讀寫在線調試寄存器(ICDC、ICDF、ICDA和ICDD),判決何時出現(xiàn)斷點匹配,人工調用調試模式。支持這些操作的命令列于表2中。該模式下所有帶有輸出的命令,其輸出格式為"xxyy:ss",其中'xx'是輸出數(shù)據(jù)的MSB,'yy'是LSB,'ss'是從TAP返回的狀態(tài)位。表2. 背景模式下的命令
命令 | 說明 |
A | 讀ICDA寄存器 |
axxyy | 寫ICDA寄存器,其中'xx'是新值的MSB,'yy'是新值的LSB。以兩個十六進制字符形式輸入。 |
Bi | 讀6個斷點寄存器之一,'i'是要讀取的斷點寄存器索引(0至5)。 |
bixxyy | 寫6個斷點寄存器之一,'i'是要寫入的斷點寄存器索引(0至5),'xx'是新數(shù)值的MSB,'yy'是LSB。MSB和LSB的值應以兩個十六進制字符形式輸入。 |
C | 讀ICDC寄存器。 |
cxx | 寫ICDC寄存器,'xx'是新值。新值應以兩個十六進制字符形式輸入。 |
D | 讀ICDD寄存器。 |
dxxyy | 寫ICDD寄存器,'xx'是新值的MSB,'yy'是新值的LSB。新值應以兩個十六進制字符形式輸入。 |
E | 進入調試模式。 |
F | 讀ICDF寄存器。 |
N | 無操作。 |
調試模式
JTAG引擎采用兩種方法進入調試模式。第一種方法是在背景模式下,輸入"進入調試模式"命令("E")。第二種方法是發(fā)生斷點匹配時激活調試模式。在這種情況下,應輸入"JD"命令,通知固件模式已經改變。在調試模式下,可以讀寫MAXQ寄存器,讀程序堆棧,讀寫數(shù)據(jù)存儲器,單步運行MAXQ CPU,返回至背景模式,驗證密碼以解鎖某些命令。表3列出了該功能支持的命令。表3. 調試模式下的命令
命令 | 說明 |
E | 退出調試模式,返回背景模式。 |
G | 讀所有寄存器內容。寄存器內容返回順序取決于MAXQ的類型。 |
Mxxyyiijj | 讀數(shù)據(jù)存儲器,'xx'是要讀取字地址的MSB,'yy'是地址的LSB,'ii'是要讀取數(shù)量的MSB,'jj'是其LSB。所有數(shù)值應以兩個十六進制字符形式輸入。 |
mxxyyiijj | 向數(shù)據(jù)存儲器寫一個字,'xx'是字地址的MSB,'yy'是地址的LSB,'ii'是要寫入字的MSB,'jj'是要寫入字的LSB。所有數(shù)值應以兩個十六進制字符形式輸入。 |
n | 無操作。 |
Pxx1...xx32 | 用給定數(shù)據(jù)匹配密碼。所有32個字節(jié)值應以兩個十六進制字符形式輸入。 |
R0iim | 讀寄存器,'ii'是寄存器索引,'m'是寄存器模數(shù)。索引應以兩個十六進制字符形式輸入,模數(shù)應以一個十六進制字符形式輸入。 |
r0iimxxyy | 寫寄存器,'ii'是寄存器索引,'m'是寄存器模數(shù),'xx'是新數(shù)值的MSB,'yy'是LSB。索引和新數(shù)值的每個字節(jié)應以兩個十六進制字符形式輸入。模數(shù)應以一個十六進制字符形式輸入。 |
Sxxyyiijj | 讀程序堆棧,'xx'是要讀取的字地址MSB,'yy'是地址的LSB,'ii'是要讀取數(shù)量的MSB,'jj'是其LSB。所有數(shù)值應以兩個十六進制字符形式輸入。 |
T | 在當前指令指針處執(zhí)行指令。 |
注意:表2中列出的所有背景模式命令('E'除外)也可以用于調試模式。
二進制傳輸
表1、2和3中描述的命令可方便的進行手工輸入,其輸出也易于理解。但在多種情況下,將由軟件控制JTAG接口板。由于軟件不方便使用ASCII命令,將結果轉換回二進制數(shù)據(jù)時也存在不必要的處理過程,因此,JTAG固件也支持二進制傳輸。在二進制傳輸模式下,數(shù)據(jù)傳送至TAP,首先發(fā)送一個字節(jié)用于指示要發(fā)送字節(jié)的數(shù)量,然后發(fā)送數(shù)據(jù)。對于發(fā)送數(shù)據(jù)的每個字節(jié),固件輸出兩個字節(jié)。返回的第一個字節(jié)是傳輸中讀取的狀態(tài)位。第二個字節(jié)是傳輸中從TAP讀取的數(shù)值。二進制模式還具有特殊命令。這些命令在表4中進行了說明。發(fā)送這些特殊命令時,長度字節(jié)應為0,以指示固件將接收的下一個字節(jié)做為特殊命令處理。對于這些特殊命令,返回單個字節(jié)。這通常只是命令的回應。表4. 二進制傳輸時,使用的特殊命令
命令 | 說明 |
0x00 | 退出二進制模式傳輸,重新接受ASCII命令。 |
0x01 | 設置TAP IR寄存器為數(shù)據(jù)傳輸目的寄存器。 |
0x02 | 設置TAP DR寄存器為數(shù)據(jù)傳輸目的寄存器。 |
0x03 | 傳輸數(shù)據(jù)時,僅發(fā)送每個字節(jié)的低3位。 |
0x04 | 設置RESET引腳為邏輯高電平。 |
0x05 | 清零RESET引腳為邏輯低電平。 |
0x06 | 執(zhí)行JTAG時鐘的單個脈沖。 |
0x07 | 讀取TDO引腳的狀態(tài)。 |
0x08 | 傳輸數(shù)據(jù)時,發(fā)送每個字節(jié)的所有8位。 |
0x09 | 設置TMS引腳為邏輯高電平。 |
0x0A | 清零TMS引腳為邏輯低電平。 |
0x0B | 設置TDI引腳為邏輯高電平。 |
0x0C | 清零TDI引腳為邏輯低電平。 |
0x0D | 設置T0M位。關于該位的詳細信息,請參考表1中'V'命令的說明。 |
0x0E | 清零T0M位。關于該位的詳細信息,請參考表1中'V'命令的說明。 |
0x11 | 采用接收的下一字節(jié)做為TL0數(shù)值。發(fā)"下一"字節(jié)時不需要先發(fā)一個長度字節(jié),也不需要'0'做為特殊命令說明字符。關于TL0寄存器的詳細信息,請參考表1中'V'命令的說明。 |
0x12 | 采用接收的下一字節(jié)做為TH0數(shù)值。發(fā)"下一"字節(jié)時不需要先發(fā)一個長度字節(jié),也不需要'0'做為特殊命令說明字符。關于TH0寄存器的詳細信息,請參考表1中'V'命令的說明。 |
探測錯誤
在ASCII傳輸模式和二進制傳輸模式下,發(fā)生的任何錯誤均由命令的輸出指示。在ASCII模式下,錯誤輸出形式為"*ERR=xx*",其中xx為錯誤類型。在二進制模式下,輸出錯誤代碼,而不是命令回應。請參考表5的錯誤代碼說明。表5. 錯誤代碼
錯誤代碼 | 說明 |
0x80 | 無法識別的命令或無效命令。 |
0x90 | 接收到無效的十六進制字符。 |
0xA0 | 接收的輸入不足。 |
0xB0 | 錯誤斷點寄存器索引。 |
0xC? | 接收到非預期狀態(tài),其中?表示接收到的狀態(tài)位。 |
評論