<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MC68HC908LJ12微控制器中的閃存在電路編程

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

          作者: 時(shí)間:2012-03-23 來源:網(wǎng)絡(luò) 收藏

          是指在器件安裝在最終板(目標(biāo)系統(tǒng))上的時(shí)候?qū)ζ骷M(jìn)行或擦除操作。這允許在不把從目標(biāo)系統(tǒng)取下的情況下改變用戶代碼,從而實(shí)現(xiàn)對器件的重新或初始化編程。

          本文引用地址:http://www.ex-cimer.com/article/149354.htm

          Motorola (LJ12)是基于HC08架構(gòu)的一種通用器件,具有12K字節(jié)的片上閃存和512字節(jié)的RAM、一個(gè)紅外通信接口、一個(gè)串行外設(shè)接口、一個(gè)AD轉(zhuǎn)換器、一個(gè)實(shí)時(shí)鐘和一個(gè)LCD驅(qū)動(dòng)器模塊。其中12k字節(jié)閃存分配給用戶代碼,另外還有48字節(jié)分配給用戶定義的復(fù)位和中斷向量。對于編程或擦除操作不需要高電壓供電,因?yàn)樗枰母唠妷河蓛?nèi)部的電荷泵產(chǎn)生??衫眠\(yùn)行在用戶模式或監(jiān)控模式的軟件例程通過寫地址為$FE08的閃存控制寄存器實(shí)現(xiàn)對閃存的編程或擦除操作。

          用戶模式

          在用戶模式下,LJ12運(yùn)行的是已經(jīng)編程存儲(chǔ)在閃存中的用戶代碼。這是LJ12在大多數(shù)時(shí)間中所處的模式。

          監(jiān)控模式

          在監(jiān)控模式下,LJ12運(yùn)行在生產(chǎn)時(shí)永久編程在LJ12中的存儲(chǔ)器區(qū)域中的監(jiān)控代碼。監(jiān)控代碼用于通過LJ12的PTA0管腳在LJ12和外部主機(jī)間實(shí)現(xiàn)串行通信。 對初始的空白LJ12閃存編程就是在監(jiān)控模式下進(jìn)行的。

          閃存初始編程

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

          塊保護(hù)的閃存

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

          ROM駐留程序

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

          用戶模式下的在電路編程

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

          ICP 代碼

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

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

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

          2.ICP 代碼運(yùn)行自己的擦除子程序擦除閃存。然后ICP代碼通過LJ12的端口引腳或SCI接口建立LJ12與一個(gè)外部主機(jī)系統(tǒng)的通信連接。新的數(shù)據(jù)下載編程到閃存中。

          在兩種方法中,ICP代碼都必須加載到RAM存儲(chǔ)器中,并在RAM中執(zhí)行。當(dāng)程序在閃存中運(yùn)行時(shí)不允許編程或擦除操作。如果在ICP代碼還在閃存中運(yùn)行時(shí)就進(jìn)行編程或擦除操作,那么有擦除ICP代碼本身的危險(xiǎn)。

          監(jiān)控模式下的在電路編程

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

          通過施加高電壓進(jìn)入監(jiān)控模式

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

          通過空向量方法進(jìn)入監(jiān)控模式

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

          在監(jiān)控模式下實(shí)現(xiàn)ICP的優(yōu)點(diǎn)是不需要在用戶代碼包含ICP代碼。此外,還可以利用MCUscribe 編程或 ICS Motorola工具通過PTA0串行連接實(shí)現(xiàn)PC主機(jī)系統(tǒng)與MCU的通信。

          有關(guān) ICP的其它考慮

          信號狀態(tài)

          為無中斷地完成編程過程,在ICP操作中正常的系統(tǒng)活動(dòng)通常被停止。因此,在ICP開始時(shí),應(yīng)當(dāng)配置MCU使得在ICP過程中不會(huì)產(chǎn)生引腳沖突或信失控號。同時(shí)還必須注意當(dāng)帶有空白閃存的MCU系統(tǒng)第一次上電時(shí),其端口引腳處于其缺省復(fù)位狀態(tài)。

          引腳隔離

          如果用于連接外部主機(jī)的 MCU引腳是與目標(biāo)系統(tǒng)共享的,必須保證進(jìn)行ICP連接時(shí)它們被隔離到適當(dāng)?shù)倪壿嬰娖健?/p>

          COP 看門狗操作

          當(dāng)在用戶模式下進(jìn)行 ICP操作時(shí),還必須考慮COP操作。一旦COP被使能,在用戶程序運(yùn)行過程中是不能被禁止的。因此,在ICP擦除和編程程序中,COP計(jì)數(shù)器必須定時(shí)清除以防止COP復(fù)位。在監(jiān)控模式下,COP是被禁止的。

          下面的代碼在用戶模式下完成整體擦除。RAMFILE存儲(chǔ)器區(qū)被保留用于存儲(chǔ)ERARNGE子程序調(diào)用的數(shù)據(jù)塊。當(dāng)ICP請求被接受時(shí),這一代碼需要上載到RAM中,然后才能通過調(diào)用RAMSTART執(zhí)行。然后 LJ12復(fù)位。在這一例子中,利用了非法操作碼進(jìn)行復(fù)位。

          ;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

          復(fù)位后,因?yàn)閺?fù)位向量是空的,LJ12進(jìn)入監(jiān)控模式。通過在PTA0(參考數(shù)據(jù)手冊中的監(jiān)控ROM一節(jié))連接一個(gè)主機(jī),可以把下列代碼加載到LJ12 RAM中實(shí)現(xiàn)閃存的編程。

          ;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存儲(chǔ)器區(qū)被保留用于存儲(chǔ)MON_PRGRNGE子程序調(diào)用的數(shù)據(jù)塊。用戶使用監(jiān)控命令WRITE或IWRITE利用數(shù)據(jù)填充RAMFILE區(qū)域,然后發(fā)出執(zhí)行(RUN)命令執(zhí)行FLASHPRG程序?qū)?shù)據(jù)編程到閃存中。完成后, MON_PRGRNGE將控制返回給監(jiān)控代碼。這一編程過程不斷重復(fù)直到整個(gè)閃存都被編程完。編程完畢后,LJ12在一個(gè)上電復(fù)位后進(jìn)入用戶模式。

          DIY機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();