摘要:本應用筆記討論串口轉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? | 接收到非預期狀態,其中?表示接收到的狀態位。 |
評論
查看更多