本應用筆記討論了串行轉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系統所需的所有命令提供了構建模塊。
審核編輯:郭婷
-
微控制器
+關注
關注
48文章
7542瀏覽量
151316 -
處理器
+關注
關注
68文章
19259瀏覽量
229652 -
JTAG
+關注
關注
6文章
399瀏覽量
71673
發布評論請先 登錄
相關推薦
評論