本應(yīng)用筆記討論了串行轉(zhuǎn)JTAG板接受的命令。該板用于與MAXQ微控制器連接。這里描述的命令允許開(kāi)發(fā)人員讀寫(xiě)MAXQ的存儲(chǔ)器(代碼和數(shù)據(jù)),讀寫(xiě)寄存器,并利用在線(xiàn)調(diào)試器。
介紹
MAXQ微控制器集成了一個(gè)測(cè)試訪問(wèn)端口(TAP),用于通過(guò)4線(xiàn)同步串行接口與主機(jī)設(shè)備通信。該TAP用于支持在系統(tǒng)編程和在線(xiàn)調(diào)試。TAP與JTAG IEEE標(biāo)準(zhǔn)1149兼容。為了連接到TAP,達(dá)拉斯半導(dǎo)體公司開(kāi)發(fā)了一種串行到JTAG板和固件,通過(guò)標(biāo)準(zhǔn)RS-232串行端口接受命令,并將這些命令與適當(dāng)?shù)腏TAG信號(hào)協(xié)調(diào)。本應(yīng)用筆記描述了固件實(shí)現(xiàn)的命令協(xié)議。
注意:本應(yīng)用筆記假定熟悉MAXQ微控制器的TAP和基本的JTAG通信。有關(guān)這些主題的詳細(xì)信息,請(qǐng)參閱MAXQ系列用戶(hù)指南。
與固件接口
要與串行轉(zhuǎn)JTAG板建立通信,請(qǐng)使用115200個(gè)數(shù)據(jù)位、無(wú)奇偶校驗(yàn)和8個(gè)停止位以1波特率連接到該板的串行端口。連接后,您可以通過(guò)以下兩種模式之一與固件接口:ASCII 或二進(jìn)制。固件默認(rèn)為 ASCII 模式,在該模式下,人類(lèi)可讀的文本命令被發(fā)送到電路板,結(jié)果以文本字符串的形式返回。在二進(jìn)制模式下,所有傳輸都是一系列 8 位字節(jié)。有一些命令允許隨時(shí)在兩種模式之間切換。在 ASCII 模式下,表 1 中列出的命令始終可用。所有命令都區(qū)分大小寫(xiě)??梢栽谝恍兄休斎朊罱M,也可以一次輸入一個(gè)命令。
Command | 描述 |
h | 通過(guò)保持MAXQ復(fù)位來(lái)停止MAXQ。 |
H | 釋放復(fù)位,允許MAXQ運(yùn)行。 |
I | 將系統(tǒng)置于旁路模式并重置 TAP,使其返回到運(yùn)行-測(cè)試-空閑狀態(tài)。 |
JB | 指示固件開(kāi)始接受后臺(tái)模式命令。該命令不會(huì)切換目標(biāo)MAXQ上的模式,也不會(huì)向目標(biāo)器件發(fā)送任何JTAG命令。它只是為了指示固件MAXQ已經(jīng)通過(guò)其他方式改變了模式。 |
JD | 指示固件開(kāi)始接受調(diào)試模式命令。該命令不會(huì)切換目標(biāo)MAXQ上的模式,也不會(huì)向目標(biāo)器件發(fā)送任何JTAG命令。它只是為了指示固件MAXQ已經(jīng)通過(guò)其他方式改變了模式。 |
JL | 指示固件開(kāi)始接受引導(dǎo)加載程序命令。該命令不會(huì)切換目標(biāo)MAXQ上的模式,也不會(huì)向目標(biāo)器件發(fā)送任何JTAG命令。它只是為了指示固件MAXQ已經(jīng)通過(guò)其他方式改變了模式。 |
JX | 指示固件開(kāi)始接受旁路模式命令。該命令不會(huì)切換目標(biāo)MAXQ上的模式,也不會(huì)向目標(biāo)器件發(fā)送任何JTAG命令。它只是為了指示固件MAXQ已經(jīng)通過(guò)其他方式改變了模式。 |
Q | 查詢(xún) JTAG 板的接口版本號(hào)。版本號(hào)將輸出為兩個(gè)十六進(jìn)制字符。只要任何命令的格式或其輸出發(fā)生變化,此版本就會(huì)更改。編寫(xiě)本文檔時(shí)的界面版本為 01。 |
q | 查詢(xún) JTAG 板的固件版本號(hào)。版本號(hào)將輸出為兩個(gè)十六進(jìn)制字符。此版本將在固件更改時(shí)隨時(shí)更改。編寫(xiě)本文檔時(shí)的固件版本為 02。 |
Vtxxyy | 設(shè)置 JTAG 板的 Timer0。由于JTAG時(shí)鐘必須小于目標(biāo)時(shí)鐘的1/8,固件使用Timer0來(lái)控制JTAG時(shí)鐘的速度。固件等待定時(shí)器溢出,然后再生成JTAG時(shí)鐘的每個(gè)邊沿。將“t”替換為用于計(jì)時(shí)器 T0M 位的值,將“xx”替換為用于 TH0 的值,將“yy”替換為用于 TL0 的值。所有值都應(yīng)以十六進(jìn)制格式輸入。有關(guān)這些值用途的詳細(xì)信息,請(qǐng)參閱《超高速閃存微控制器用戶(hù)指南》。 |
Yrbbdd | 將值直接發(fā)送到 TAP。將“r”替換為要寫(xiě)入的 TAP 寄存器:0 表示 DR,1 表示 IR?!癰b”是要寫(xiě)入的位數(shù)(不包括狀態(tài)位),“dd”是要發(fā)送的數(shù)據(jù)。所有值都應(yīng)以十六進(jìn)制格式輸入。 |
Z | 將固件切換到二進(jìn)制傳輸。 |
z | 執(zhí)行JTAG時(shí)鐘的單個(gè)脈沖。 |
+ | 對(duì)JTAG板執(zhí)行簡(jiǎn)單的硬件測(cè)試。CLK、TMS 和 TDI 引腳均被置位,TDO的狀態(tài)被讀取并輸出為“0”或“1”。然后可以測(cè)量引腳上的電壓,以確保它們正常工作。 |
對(duì)JTAG板執(zhí)行簡(jiǎn)單的硬件測(cè)試。CLK、TMS 和 TDI 引腳均設(shè)置為邏輯低電平,TDO的狀態(tài)被讀取并輸出為“0”或“1”。然后可以測(cè)量引腳上的電壓,以確保它們正常工作。 |
如上述命令所示,MAXQ JTAG引擎有幾種不同的模式:旁路模式、自舉加載器模式、后臺(tái)模式和調(diào)試模式。JTAG引擎在每種模式下的功能都不同。因此,除了上面列出的命令之外,當(dāng)JTAG引擎進(jìn)入這些不同的模式時(shí),其他命令變得可用。
旁路模式
TAP在上電復(fù)位期間初始化為旁路模式。在這種模式下,TAP被禁用,并且不與MAXQ微控制器的其余部分交互。要激活 TAP,請(qǐng)輸入此模式下可用的兩個(gè)附加命令之一:“D”和“L”。“D”命令激活在線(xiàn)調(diào)試器,“L”命令激活引導(dǎo)加載程序。
引導(dǎo)加載程序模式
當(dāng)使用“L”命令激活自舉加載程序后,可以將字節(jié)直接發(fā)送到MAXQ的實(shí)用程序ROM。 以?xún)蓚€(gè)十六進(jìn)制字符的形式輸入每個(gè)值。(有關(guān)實(shí)用程序 ROM 接受的字節(jié)數(shù)的詳細(xì)信息,請(qǐng)聯(lián)系技術(shù)支持。)對(duì)于輸入的每個(gè)字節(jié),固件輸出加載程序返回的字節(jié)和從TAP接收的狀態(tài)位。輸出的格式將為“00xx:ss”,其中“xx”是輸出字節(jié),“ss”是狀態(tài)位。輸入“退出加載器”命令(0x01)后,必須使用表1中列出的“J”命令之一來(lái)指示JTAG板,MAXQ不再處于自舉加載器模式。
后臺(tái)模式
在JTAG引擎的后臺(tái)模式下,可以讀寫(xiě)JTAG斷點(diǎn)寄存器(BP0-BP5),讀寫(xiě)在線(xiàn)調(diào)試寄存器(ICDC、ICDF、ICDA和ICDD),確定斷點(diǎn)匹配何時(shí)發(fā)生,并手動(dòng)調(diào)用調(diào)試模式。表 2 中列出了支持這些操作的命令。對(duì)于此模式下具有輸出的所有命令,格式將為“xxyy:ss”,其中“xx”是輸出數(shù)據(jù)的MSB,“yy”是LSB,“ss”是TAP返回的狀態(tài)位。
Command | 描述 |
A | 閱讀ICDA寄存器。 |
axxyy | 寫(xiě)入 ICDA 寄存器,其中“xx”是新值的 MSB,“yy”是新 LSB。值應(yīng)以?xún)蓚€(gè)十六進(jìn)制字符的形式輸入。 |
Bi | 讀取 6 個(gè)斷點(diǎn)寄存器中的任何一個(gè),其中“i”是要讀取的斷點(diǎn)寄存器的索引(0 到 5)。 |
bixxyy | 寫(xiě)入 6 個(gè)斷點(diǎn)寄存器中的任何一個(gè),其中“i”是要寫(xiě)入的斷點(diǎn)寄存器的索引(0 到 5),“xx”是新值的 MSB,“yy”是 LSB。MSB 和 LSB 值應(yīng)以?xún)蓚€(gè)十六進(jìn)制字符的形式輸入。 |
C | 閱讀 ICDC 寄存器。 |
CXX | 寫(xiě)入 ICDC 寄存器,其中“xx”是新值。值應(yīng)以?xún)蓚€(gè)十六進(jìn)制字符的形式輸入。 |
D | 閱讀ICDD寄存器。 |
dxxyy | 寫(xiě)入 ICDD 寄存器,其中“xx”是新值的 MSB,“yy”是新 LSB。值應(yīng)以?xún)蓚€(gè)十六進(jìn)制字符的形式輸入。 |
E | 進(jìn)入調(diào)試模式。 |
F | 閱讀ICDF寄存器。 |
N | 無(wú)操作。 |
調(diào)試模式
JTAG引擎可以通過(guò)兩種方式進(jìn)入調(diào)試模式。第一種方法是在后臺(tái)模式下輸入“進(jìn)入調(diào)試模式”命令(“E”)。激活調(diào)試的第二種方式發(fā)生在斷點(diǎn)匹配發(fā)生時(shí)。在這種情況下,您應(yīng)該輸入“JD”命令以通知固件模式已更改。一旦進(jìn)入調(diào)試模式,就可以讀寫(xiě)MAXQ寄存器,讀取程序棧,讀寫(xiě)數(shù)據(jù)存儲(chǔ)器,單步操作MAXQ CPU,返回后臺(tái)模式,并執(zhí)行密碼匹配以解鎖某些命令。表 3 列出了支持此功能的命令。
Command | 描述 |
E | 退出調(diào)試模式,返回后臺(tái)模式。 |
G | 獲取所有寄存器。寄存器的順序取決于MAXQ器件的類(lèi)型。 |
Mxxyyiijj | 讀取數(shù)據(jù)存儲(chǔ)器,其中“xx”是要讀取的單詞地址的MSB,“yy”是地址的LSB,“ii”是要讀取的字?jǐn)?shù)的MSB,“jj”是長(zhǎng)度的LSB。所有值都應(yīng)輸入為兩個(gè)十六進(jìn)制字符。 |
MXXYYIIJJ | 將一個(gè)單詞寫(xiě)入數(shù)據(jù)存儲(chǔ)器,其中“xx”是單詞地址的MSB,“yy”是地址的LSB,“ii”是要寫(xiě)入的單詞的MSB,“jj”是要寫(xiě)入的單詞的LSB。所有值都應(yīng)輸入為兩個(gè)十六進(jìn)制字符。 |
n | 無(wú)操作。 |
Pxx1...xx32 | 嘗試與給定數(shù)據(jù)進(jìn)行密碼匹配。所有 32 個(gè)值都應(yīng)輸入為兩個(gè)十六進(jìn)制字符。 |
R0iim | 讀取寄存器,其中“ii”是寄存器的索引,“m”是寄存器的模塊。索引應(yīng)作為兩個(gè)十六進(jìn)制字符輸入,模塊應(yīng)作為單個(gè)十六進(jìn)制字符輸入。 |
r0iimxxyy | 寫(xiě)一個(gè)寄存器,其中“ii”是寄存器的索引,“m”是寄存器的模塊,“xx”是新值的MSB,“yy”是LSB。新值的索引和每個(gè)字節(jié)應(yīng)輸入為兩個(gè)十六進(jìn)制字符。模塊應(yīng)作為單個(gè)十六進(jìn)制字符輸入。 |
Sxxyyiijj | 讀取程序棧,其中“xx”是要讀取的單詞地址的MSB,“yy”是地址的LSB,“ii”是要讀取的字?jǐn)?shù)的MSB,“jj”是長(zhǎng)度的LSB。所有值都應(yīng)輸入為兩個(gè)十六進(jìn)制字符。 |
T | 在當(dāng)前指令指針處執(zhí)行指令。 |
注意:表 2 中列出的所有后臺(tái)模式命令(“E”除外)也可以在調(diào)試模式下使用。 |
二進(jìn)制傳輸
表 1、2 和 3 中描述的所有命令都易于手動(dòng)輸入,其輸出也易于理解。然而,在許多情況下,會(huì)有軟件控制JTAG板。由于ASCII命令不便于軟件使用,并且在將結(jié)果轉(zhuǎn)換回二進(jìn)制數(shù)據(jù)時(shí)需要進(jìn)行不必要的處理,因此JTAG固件還支持二進(jìn)制傳輸。在二進(jìn)制傳輸模式下,通過(guò)首先發(fā)送指示要發(fā)送的字節(jié)數(shù)的字節(jié)將數(shù)據(jù)發(fā)送到 TAP。然后,數(shù)據(jù)應(yīng)隨之而來(lái)。對(duì)于發(fā)送的每個(gè)數(shù)據(jù)字節(jié),固件輸出兩個(gè)字節(jié)。返回的第一個(gè)字節(jié)是在傳輸過(guò)程中讀取的狀態(tài)位。第二個(gè)字節(jié)將保存?zhèn)鬏斶^(guò)程中從TAP讀取的值。在二進(jìn)制模式下還可以發(fā)送特殊命令。表 4 中描述了這些命令。要發(fā)送這些特殊命令之一,請(qǐng)發(fā)送 0 作為長(zhǎng)度字節(jié)。這將指示固件將收到的下一個(gè)字節(jié)視為特殊命令。對(duì)于這些特殊命令,將返回單個(gè)字節(jié)。通常,這只是命令的回顯。
Command | 描述 |
0x00 | 退出二進(jìn)制模式傳輸并返回到接受 ASCII 命令。 |
0x01 | 將 TAP 的 IR 寄存器設(shè)置為數(shù)據(jù)傳輸?shù)哪繕?biāo)。 |
0x02 | 將 TAP 的 DR 寄存器設(shè)置為數(shù)據(jù)傳輸?shù)哪繕?biāo)。 |
0x03 | 傳輸數(shù)據(jù)時(shí)僅發(fā)送每個(gè)字節(jié)的最低 3 位。 |
0x04 | 將RESET引腳設(shè)置為邏輯高電平。 |
0x05 | 將RESET引腳清除至邏輯低電平。 |
0x06 | 執(zhí)行JTAG時(shí)鐘的單個(gè)脈沖。 |
0x07 | 讀取 TDO 引腳的狀態(tài)。 |
0x08 | 傳輸數(shù)據(jù)時(shí)發(fā)送每個(gè)字節(jié)的所有 8 位。 |
0x09 | 將TMS引腳設(shè)置為邏輯高電平。 |
0x0A | 將TMS引腳清除至邏輯低電平。 |
0x0B | 將TDI引腳設(shè)置為邏輯高電平。 |
0x0C | 將TDI引腳清除至邏輯低電平。 |
0x0D | 設(shè)置 T0M 位。有關(guān)此位的詳細(xì)信息,請(qǐng)參閱表 1 中描述的“V”命令。 |
0x0E | 清除 T0M 位。有關(guān)此位的詳細(xì)信息,請(qǐng)參閱表 1 中描述的“V”命令。 |
0x11 | 使用收到的下一個(gè)字節(jié)作為 TL0 的值。此“下一個(gè)”字節(jié)不需要長(zhǎng)度字節(jié)或用作特殊命令轉(zhuǎn)義字符的“0”。有關(guān)TL0寄存器的更多信息,請(qǐng)參閱表1中描述的“V”命令。 |
0x12 | 使用收到的下一個(gè)字節(jié)作為 TH0 的值。此“下一個(gè)”字節(jié)不需要長(zhǎng)度字節(jié)或用作特殊命令轉(zhuǎn)義字符的“0”。有關(guān) TH0 寄存器的更多信息,請(qǐng)參閱表 1 中描述的“V”命令。 |
檢測(cè)錯(cuò)誤
在 ASCII 傳輸模式和二進(jìn)制傳輸模式下,發(fā)生的任何錯(cuò)誤都由命令的輸出指示。在 ASCII 模式下,錯(cuò)誤將輸出為“*ERR=xx*”,其中 xx 表示發(fā)生的錯(cuò)誤類(lèi)型。在二進(jìn)制模式下,輸出錯(cuò)誤代碼而不是命令 echo。有關(guān)可能的錯(cuò)誤代碼的說(shuō)明,請(qǐng)參閱表 5。
錯(cuò)誤代碼 | 描述 |
0x80 | 命令無(wú)法識(shí)別或命令無(wú)效。 |
0x90 | 收到無(wú)效的十六進(jìn)制字符。 |
0xA0 | 收到的輸入不足。 |
0xB0 | 斷點(diǎn)寄存器索引錯(cuò)誤。 |
0xC? | 收到意外狀態(tài),在哪里?表示接收的狀態(tài)位。 |
結(jié)論
使用本文所述的命令,串行轉(zhuǎn)JTAG板可用于將代碼加載到MAXQ處理器中,讀寫(xiě)系統(tǒng)寄存器,讀寫(xiě)存儲(chǔ)器,以及利用在線(xiàn)調(diào)試器。此過(guò)程既可以通過(guò)使用二進(jìn)制協(xié)議的主機(jī)軟件自動(dòng)執(zhí)行,也可以與終端程序交互輸入。為完全控制MAXQ系統(tǒng)所需的所有命令提供了構(gòu)建模塊。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7724瀏覽量
152683 -
處理器
+關(guān)注
關(guān)注
68文章
19547瀏覽量
231871 -
JTAG
+關(guān)注
關(guān)注
6文章
401瀏覽量
72132
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
MAXQ1850評(píng)估套件(EV kit)和面向MAXQ30的CrossWorks編譯器的設(shè)計(jì)方案
微處理器和JTAG總線(xiàn)橋接接口
如何升級(jí)MAXQ的串口-JTAG接口板的固件
使用MAXQ3210作為微處理器監(jiān)控電路

如何升級(jí)MAXQ的串口-JTAG接口板的固件

實(shí)現(xiàn)MAXQ2000微控制器的JTAG加載主機(jī)

MAXQ處理器的串口轉(zhuǎn)JTAG接口板
充分利用MAXQ®處理器的非易失存儲(chǔ)服務(wù)

MAXQ USB-to-JTAG/1-Wire Adapter Evaluation Kit
調(diào)試MAXQ1103在微處理器上的應(yīng)用
如何更新MAXQ串行轉(zhuǎn)JTAG板中的固件

使用MAXQ610微控制器上的串行端口
為MAXQ2000微控制器實(shí)現(xiàn)JTAG自舉加載程序主控

如何使用MAXQ串行驅(qū)動(dòng)器開(kāi)發(fā)應(yīng)用

評(píng)論