新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 實(shí)現(xiàn)MAXQ2000微控制器的JTAG加載主機(jī)

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

作者: 時(shí)間:2012-03-19 來(lái)源:網(wǎng)絡(luò) 收藏
D>100xxxxC x hFamily C—Fixed-Length Verify11000000C0hVerify Code Fixed Length11000001C1hVerify Data Fixed Length1101xxxxD x hFamily D—Fixed-Length Load and Verify11010000D0hLoad/Verify Code Fixed Length11010001D1hLoad/Verify Data Fixed Length1110xxxxE x hFamily E —Fixed-Length Erase11100000E0hErase Code Fixed Length11100001E1hErase Data Fixed Length1111xxxxF x hFamily F—Reserved (device specific)

識(shí)別從機(jī)控制器

啟動(dòng)加載程序啟動(dòng)并運(yùn)行后,下一步是識(shí)別從機(jī)MAXQ。命令集0的命令0Dh (獲得ID信息)返回一個(gè)長(zhǎng)度可變的ASCII字符串(以零結(jié)束),確定器件和程序ROM版本。

作為演示的一部分,我們的實(shí)例程序獲得該信息,然后打印輸出至串口。用于實(shí)現(xiàn)該功能的例程是getBanner。
;==============================================================================;=;=  getBanner;=     waitForPrompt;=        shiftDR;=           clock0, clock1, shift;=;=  Executes command 0Dh to retrieve the ROM (device ID) banner and prints;=  the banner text out over the serial port.;=;=  Inputs   : None;=  Outputs  : C - Set on  communication error;=  Destroys : AP, APC, Acc, PSW, LC[0];=getBanner:call    waitForPromptjump    C, getBanner_failmove    Acc, #CMD_GET_ROM_BANNERcall    shiftDRmove    Acc, #00hcall    shiftDRgetBanner_loop:move    Acc, #00hcall    shiftDRcmp     #0FFh             ; The banner is ASCII, so receiving this character; most likely indicates that the  lines are; floating high and that no device is connectedjump    E, getBanner_failjump    Z, getBanner_donecall    txCharjump    getBanner_loopgetBanner_done:call    txNewlinejump    getBanner_passgetBanner_fail:move    C, #1 retgetBanner_pass:move    C, #0ret

擦除程序存儲(chǔ)器

在對(duì)包含的閃存程序存儲(chǔ)器進(jìn)行編程之前,必須擦除它(設(shè)置為0FFFFh)。JTAG演示應(yīng)用程序發(fā)送02h (主機(jī)擦除)啟動(dòng)加載程序命令,指示啟動(dòng)加載程序擦除所有的程序和數(shù)據(jù)存儲(chǔ)器,從而擦除閃存。該命令還清除了密碼鎖定位,使能所有支持的命令集。

取決于MAXQ器件,這一02h (主機(jī)擦除)命令可能需要幾秒鐘的時(shí)間來(lái)完成。由于這是一個(gè)單字節(jié)命令,確定該命令什么時(shí)候完成的最簡(jiǎn)單方法是不斷發(fā)送無(wú)操作(00h)命令,其后是1毫秒的延遲,直到啟動(dòng)加載程序返回3Eh,表明命令已經(jīng)完成。下面的 masterErase例程說(shuō)明了這一方法。
;==============================================================================;=;=  masterErase;=;=  Executes command 02h (Master Erase) to clear all program and data memory.;=;=  Inputs   : None;=  Outputs  : C - Set on JTAG communication error;=  Destroys : Acc, PSW, LC[0], LC[1];=masterErase:call    waitForPromptjump    C, masterErase_failmove    Acc, #CMD_MASTER_ERASEcall    shiftDRmove    Acc, #00hcall    shiftDRmove    LC[1], #5000      ; Number of retries before returning an errormasterErase_loop:move    Acc, #CMD_NOPcall    shiftDRcmp     #3Ehjump    E, masterErase_passmove    LC[0], #8000      ; Delay for about a milliseconddjnz    LC[0], $djnz    LC[1], masterErase_loopmasterErase_pass:move    C, #0retmasterErase_fail:move    C, #1ret

重新獲得狀態(tài)信息

MasterErase (或者任何其他啟動(dòng)加載程序命令)完成后,可利用04h (獲得狀態(tài))命令來(lái)確定命令是否成功完成。獲得狀態(tài)命令返回兩個(gè)數(shù)據(jù)字節(jié):一個(gè)字節(jié)含有狀態(tài)標(biāo)志(說(shuō)明密碼鎖定設(shè)置/解除設(shè)置、字/字節(jié)模式有效以及其他信息),第二個(gè)字節(jié)是單字節(jié)狀態(tài)碼。

如果最后一條命令成功完成,狀態(tài)碼總是00h (無(wú)錯(cuò)誤)。非零狀態(tài)碼指示有錯(cuò)誤。用戶(hù)指南附錄(English only)列出了所有的狀態(tài)碼;這里列出了幾個(gè)常見(jiàn)錯(cuò)誤碼。
  • 01h/02h—不支持命令集/無(wú)效命令。這些錯(cuò)誤代碼通常指示JTAG主機(jī)出現(xiàn)通信干擾或者校準(zhǔn)錯(cuò)誤。如果對(duì)于某一命令代碼,JTAG主機(jī)發(fā)送的字節(jié)多于(或者少于)啟動(dòng)加載程序預(yù)期的字節(jié),啟動(dòng)加載程序會(huì)把數(shù)據(jù)字節(jié)之一理解為新命令開(kāi)始。
  • 03h—密碼不匹配。這一錯(cuò)誤代碼通常指示JTAG主機(jī)在沒(méi)有清除密碼鎖定之前,試圖使用受到密碼保護(hù)的命令(一般包括不在命令集0中的命令)。如果JTAG主機(jī)訪(fǎng)問(wèn)的部分已經(jīng)有裝入字節(jié)地址0010h – 001Fh的代碼,則會(huì)出現(xiàn)這一錯(cuò)誤。在這種情況下,這一部分必須被主機(jī)擦除,或者使用密碼匹配命令(03h)來(lái)解鎖這一部分。
  • 05h—驗(yàn)證失敗。對(duì)于裝入/驗(yàn)證或者驗(yàn)證命令,驗(yàn)證步驟失敗。通信干擾會(huì)導(dǎo)致這一錯(cuò)誤,或者對(duì)以前已經(jīng)編程過(guò)的閃存沒(méi)有擦除就進(jìn)行重新編程也會(huì)出現(xiàn)這一錯(cuò)誤。

將代碼裝入程序存儲(chǔ)器

為演示JTAG啟動(dòng)加載程序的功能,演示應(yīng)用程序需要通過(guò)JTAG連接,把代碼裝入到從機(jī)中。在這個(gè)例子中,裝入的代碼是一個(gè)簡(jiǎn)單例程,它啟動(dòng)LCD控制器,在LCD顯示屏上顯示一個(gè)4位數(shù)。

裝入MAXQ2000的代碼基于下面的簡(jiǎn)單演示工程。
org 0ljump   mainorg 20hmain:move    LCRA, #03E0h      ; xxx0001111100000;    00            - DUTY : Static;      0111        - FRM  : Frame freq;          1       - LCCS : HFClk / 128;           1      - LRIG : Ground VADJ;            00000 - LRA  : RADJ = Minmove    LCFG, #0F3h       ; 1111xx11; 1111     - PCF  : All segments enabled;       1  - OPM  : Normal operation;        1 - DPE  : Display enabledmove    LCD0, #LCD_CHAR_0move    LCD1, #LCD_CHAR_0move    LCD2, #LCD_CHAR_0move    LCD3, #LCD_CHAR_2move    LCD4, #00hsjump   $
然而,由于我們是從演示應(yīng)用程序中裝入代碼字節(jié),而不是從硬件編碼的十六進(jìn)制文件中裝入(當(dāng)采用MTK或者M(jìn)AX-IDE裝入代碼時(shí)會(huì)有這種情況),因此,演示應(yīng)用程序會(huì)根據(jù)用戶(hù)輸入來(lái)修改裝入的應(yīng)用程序。

在裝入代碼前,JTAG通信演示應(yīng)用程序首先告訴用戶(hù)輸入一個(gè)4位十進(jìn)制數(shù),然后修改要裝入的應(yīng)用程序,如下所示。
  • LCD上顯示的數(shù)字是用戶(hù)輸入的4位數(shù)。
  • 密碼區(qū)的前4個(gè)字節(jié)(從字地址010h開(kāi)始)被設(shè)置為用戶(hù)輸入的4字符ASCII值。
演示應(yīng)用程序三次調(diào)用啟動(dòng)加載程序命令10h (裝入代碼,可變長(zhǎng)度)來(lái)裝入應(yīng)用代碼。這一命令的參數(shù)包括:裝入的字節(jié)數(shù)(當(dāng)裝入代碼存儲(chǔ)器時(shí)必須是偶數(shù),以保證字對(duì)齊);啟動(dòng)地址;當(dāng)然,還有數(shù)據(jù)本身。MAXQ存儲(chǔ)器為little-endian方式,因此,應(yīng)用程序必須首先發(fā)送每一程序字的最低有效字節(jié)。
   ;;;;;;;;  First load - LJUMP 0020h at start of program memory;;;;move    DP[0], #0move    @DP[0],   #CMD_LOAD_CODE_VARIABLEmove    @++DP[0], #4        ; Length - 4 bytesmove    @++DP[0], #00h      ; AddrL (byte address 0000h)move    @++DP[0], #00h      ; AddrHmove    @++DP[0], #000h     ; 00 0B 20 0C - ljump 0020hmove    @++DP[0], #00Bhmove    @++DP[0], #020hmove    @++DP[0], #00Chmove    @++DP[0], #000h     ; Paddingmove    @++DP[0], #000h     ; Paddingmove    @++DP[0], #55hmove    LC[1], DP[0]move    DP[0], #0nopcall    sendCommandnopjump    C, main_failJTAGcall    getStatusjump    C, main_failJTAGmove    Acc, A[3]         ; Check that loader status is 00h (no error)jump    NZ, main_failStatus
以同樣的方式裝入其他兩個(gè)存儲(chǔ)器代碼塊。

驗(yàn)證程序存儲(chǔ)器代碼

一旦裝入代碼后,有幾種方法來(lái)驗(yàn)證是否正確裝入。
  • 沒(méi)有使用裝入代碼可變長(zhǎng)度命令(10h),而是使用裝入和驗(yàn)證代碼可變長(zhǎng)度命令(50h)。后一命令結(jié)合了代碼裝入操作和驗(yàn)證步驟。
  • 或者,也可以調(diào)用驗(yàn)證代碼可變長(zhǎng)度命令(40h)來(lái)單獨(dú)

關(guān)鍵詞: MAXQ2000 微控制器 JTAG

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉