新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MC68HC908LJ12微控制器中的閃存在電路編程

        MC68HC908LJ12微控制器中的閃存在電路編程

        作者: 時間:2012-03-23 來源:網絡 收藏

        是指在器件安裝在最終板(目標系統)上的時候對器件進行或擦除操作。這允許在不把從目標系統取下的情況下改變用戶代碼,從而實現對器件的重新或初始化編程。

        本文引用地址:http://www.104case.com/article/149354.htm

        Motorola (LJ12)是基于HC08架構的一種通用器件,具有12K字節的片上閃存和512字節的RAM、一個紅外通信接口、一個串行外設接口、一個AD轉換器、一個實時鐘和一個LCD驅動器模塊。其中12k字節閃存分配給用戶代碼,另外還有48字節分配給用戶定義的復位和中斷向量。對于編程或擦除操作不需要高電壓供電,因為所需要的高電壓由內部的電荷泵產生。可利用運行在用戶模式或監控模式的軟件例程通過寫地址為$FE08的閃存控制寄存器實現對閃存的編程或擦除操作。

        用戶模式

        在用戶模式下,LJ12運行的是已經編程存儲在閃存中的用戶代碼。這是LJ12在大多數時間中所處的模式。

        監控模式

        在監控模式下,LJ12運行在生產時永久編程在LJ12中的存儲器區域中的監控代碼。監控代碼用于通過LJ12的PTA0管腳在LJ12和外部主機間實現串行通信。 對初始的空白LJ12閃存編程就是在監控模式下進行的。

        閃存初始編程

        LJ12 操作模式在上電復位(POR)后鎖定,并由復位向量($FFFE-$FFFF)和下列管腳的邏輯電平決定:IRQ、 RST、 PTA0、 PTA1、 PTA2和PTC1。

        塊保護的閃存

        當閃存被塊保護(block protected)時,閃存是不能被擦除可編程的。地址為$FE09的閃存塊保護寄存器用來保護閃存的一塊或整個閃存。向塊保護寄存器中寫$FF將解除整個閃存的保護。

        ROM駐留程序

        LJ12中的ROM駐留程序旨在簡化用戶的閃存編程和擦除。這些程序是存儲在ROM中的永久代碼,可利用子程序調用執行。表1 示出了閃存編程和擦除操作的四個程序。

        用戶模式下的在電路編程

        在用戶模式下的ICP可保證在目標系統運行的同時對LJ12中的閃存進行重新編程。對LJ12中的閃存進行重新編程分成兩步。第一步是通過擦除操作擦除閃存中的現有數據。最小的擦除單位是128字節,稱為頁。閃存控制寄存器中的MASS位提供了一次操作擦除整個閃存陣列的選擇,這種操作稱為整體擦除(Mass erase)。必需指出的是,閃存中被擦除的單元讀出值為$FF。第二步是編程,即利用新的數據對空的閃存進行編程。因此,重新編程包括:擦除和編程兩步。

        ICP 代碼

        在用戶模式下進行ICP要求,ICP代碼存儲在可被用戶程序調用的非易失性存儲器中。這意味著ICP代碼必須做為用戶代碼的一部分編程到LJ12的閃存中。考慮到這一點,用戶模式下的ICP在閃存最初為空(空白器件)時是不能進行的。初始的空白器件必須在監控模式下編程。

        ICP代碼編程在閃存中,可以利用軟件或硬件啟動ICP過程,有兩種操作方式:

        1.ICP 代碼通過LJ12的端口引腳或SCI接口建立LJ12與一個外部主機系統的通信連接。主機發出命令擦除LJ2的閃存并下載數據對閃存進行編程。在這種情況下,LJ12 ICP代碼就象一個命令解釋器。

        2.ICP 代碼運行自己的擦除子程序擦除閃存。然后ICP代碼通過LJ12的端口引腳或SCI接口建立LJ12與一個外部主機系統的通信連接。新的數據下載編程到閃存中。

        在兩種方法中,ICP代碼都必須加載到RAM存儲器中,并在RAM中執行。當程序在閃存中運行時不允許編程或擦除操作。如果在ICP代碼還在閃存中運行時就進行編程或擦除操作,那么有擦除ICP代碼本身的危險。

        監控模式下的在電路編程

        在監控模式下, LJ12運行在制造過程中永久編程在存儲器中($FC00-$FDFF 和 $FE10-$FFCF)中的監控代碼。LJ12器件中閃存的第一次編程只能在監控模式下進行。

        通過施加高電壓進入監控模式

        與許多Motorola 8位 MCU,通過在/IRQ引腳施加高電壓(對LJ12為1.5 * VDD、 max. 8V )和在幾個I/O引腳施加特定的邏輯電平(對LJ12為PTA1、 PTA2、和PTC1),則在上電復位(POR)之后進入監控模式。利用這一高電壓進入方法時,MCU(在OSC1)的時鐘輸入必須來自外部振蕩器,頻率為4.9152MHz 或 9.8304MHz。通過對這一時鐘分頻在PTA0生成9600波特的通信速度。

        通過空向量方法進入監控模式

        在新的閃存實施方案中,需要減少采用ICP對MCU進行編程時連接目標系統的線數。進入監控模式的另一方法是空(被擦除)的復位向量。復位向量只有通過整體擦除操作擦除。 如果在上電復位后的模式鎖定過程中/IRQ引腳接地,PLL被使能,允許利用接在OSC1和OSC2間的32.768kHz晶體作為輸入時鐘,生成9600的波特率。如果IRQ引腳在上電復位后的模式鎖定過程中被拉成高(VDD),PLL被禁止,一個外部4.9152MHz輸入時鐘(晶體或外部振蕩器)將可產生4800的波特率。與高電壓進入方式相比,這一方法節約了三條線,不需要連接PTA1、 PTA2、和 PTC1。

        在監控模式下實現ICP的優點是不需要在用戶代碼包含ICP代碼。此外,還可以利用MCUscribe 編程或 ICS Motorola工具通過PTA0串行連接實現PC主機系統與MCU的通信。

        有關 ICP的其它考慮

        信號狀態

        為無中斷地完成編程過程,在ICP操作中正常的系統活動通常被停止。因此,在ICP開始時,應當配置MCU使得在ICP過程中不會產生引腳沖突或信失控號。同時還必須注意當帶有空白閃存的MCU系統第一次上電時,其端口引腳處于其缺省復位狀態。

        引腳隔離

        如果用于連接外部主機的 MCU引腳是與目標系統共享的,必須保證進行ICP連接時它們被隔離到適當的邏輯電平。

        COP 看門狗操作

        當在用戶模式下進行 ICP操作時,還必須考慮COP操作。一旦COP被使能,在用戶程序運行過程中是不能被禁止的。因此,在ICP擦除和編程程序中,COP計數器必須定時清除以防止COP復位。在監控模式下,COP是被禁止的。

        下面的代碼在用戶模式下完成整體擦除。RAMFILE存儲器區被保留用于存儲ERARNGE子程序調用的數據塊。當ICP請求被接受時,這一代碼需要上載到RAM中,然后才能通過調用RAMSTART執行。然后 LJ12復位。在這一例子中,利用了非法操作碼進行復位。

        ;Reference upload coding for mass erase in user mode
        ERARNGE EQU   $FCBE
               ORG    RAM
        RAMFILE:
               DC.B   $14 ;Indicates 4*bus (bus=4.9152MHz)
               DC.B $40 ;Data size assumed to be 64
               DC.W $FFFF     ;$FFFF means mass erase
               DS.B   64 ;Reserve for data array
        RAMSTART:
               LDHX   RAMFILE
               JSR    ERARNGE ;Mass erase the FLASH memory
        RESET:
               DC.B   $32 ;Perform illegal opcode reset

        復位后,因為復位向量是空的,LJ12進入監控模式。通過在PTA0(參考數據手冊中的監控ROM一節)連接一個主機,可以把下列代碼加載到LJ12 RAM中實現閃存的編程。

        ;Reference upload coding for programming in monitor mode
        MON_PRGRNGE EQU   $FF28
               ORG RAM
        RAMFILE:
               DC.B $14      ;Indicates 4*bus (bus=4.9152MHz)
               DC.B   $40     ;Data size assumed to be 64
               DC.W   $C000     ;Start of FLASH memory
               DS.B   64 ;Reserve for data array
        FLASHPRG:
        LDHX RAMFILE
        JSR    MON_PRGRNGE

        RAMFILE存儲器區被保留用于存儲MON_PRGRNGE子程序調用的數據塊。用戶使用監控命令WRITE或IWRITE利用數據填充RAMFILE區域,然后發出執行(RUN)命令執行FLASHPRG程序將數據編程到閃存中。完成后, MON_PRGRNGE將控制返回給監控代碼。這一編程過程不斷重復直到整個閃存都被編程完。編程完畢后,LJ12在一個上電復位后進入用戶模式。

        DIY機械鍵盤相關社區:機械鍵盤DIY




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 德庆县| 公安县| 泗洪县| 北流市| 沛县| 洪洞县| 丰城市| 普宁市| 遵化市| 龙山县| 民勤县| 双城市| 湟源县| 和田县| 读书| 新巴尔虎左旗| 郓城县| 菏泽市| 扎兰屯市| 郑州市| 河东区| 武强县| 略阳县| 夹江县| 莱阳市| 乌鲁木齐市| 会宁县| 新乡市| 五台县| 融水| 阳新县| 裕民县| 松阳县| 绥江县| 涞水县| 富阳市| 潢川县| 公安县| 新宁县| 安福县| 新乡市|