<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

實(shí)現MAXQ2000微控制器的JTAG加載主機

作者: 時(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)

識別從機控制器

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

作為演示的一部分,我們的實(shí)例程序獲得該信息,然后打印輸出至串口。用于實(shí)現該功能的例程是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

擦除程序存儲器

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

取決于MAXQ器件,這一02h (主機擦除)命令可能需要幾秒鐘的時(shí)間來(lái)完成。由于這是一個(gè)單字節命令,確定該命令什么時(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è)數據字節:一個(gè)字節含有狀態(tài)標志(說(shuō)明密碼鎖定設置/解除設置、字/字節模式有效以及其他信息),第二個(gè)字節是單字節狀態(tài)碼。

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

將代碼裝入程序存儲器

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

裝入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   $
然而,由于我們是從演示應用程序中裝入代碼字節,而不是從硬件編碼的十六進(jìn)制文件中裝入(當采用MTK或者M(jìn)AX-IDE裝入代碼時(shí)會(huì )有這種情況),因此,演示應用程序會(huì )根據用戶(hù)輸入來(lái)修改裝入的應用程序。

在裝入代碼前,JTAG通信演示應用程序首先告訴用戶(hù)輸入一個(gè)4位十進(jìn)制數,然后修改要裝入的應用程序,如下所示。
  • LCD上顯示的數字是用戶(hù)輸入的4位數。
  • 密碼區的前4個(gè)字節(從字地址010h開(kāi)始)被設置為用戶(hù)輸入的4字符ASCII值。
演示應用程序三次調用啟動(dòng)加載程序命令10h (裝入代碼,可變長(cháng)度)來(lái)裝入應用代碼。這一命令的參數包括:裝入的字節數(當裝入代碼存儲器時(shí)必須是偶數,以保證字對齊);啟動(dòng)地址;當然,還有數據本身。MAXQ存儲器為little-endian方式,因此,應用程序必須首先發(fā)送每一程序字的最低有效字節。
   ;;;;;;;;  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è)存儲器代碼塊。

驗證程序存儲器代碼

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

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

評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>