專利名稱:Flash存儲(chǔ)器在線編程控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于對(duì)存儲(chǔ)器進(jìn)行在線編程的控制方法,具體涉及一種 Flash存儲(chǔ)器在線編程穩(wěn)定性控制方法。
背景技術(shù):
理想的存儲(chǔ)器應(yīng)該具備存取速度快、不易失、存儲(chǔ)密度高(單位體積存儲(chǔ) 容量大)、價(jià)格低等特點(diǎn)。現(xiàn)有技術(shù)中,常見的存儲(chǔ)器通常具備這些特點(diǎn)中的 一個(gè)或幾個(gè)。近幾年,F(xiàn)lash存儲(chǔ)器技術(shù)趨于成熟,F(xiàn)lash存儲(chǔ)器具有電可擦 除、無需后備電源來保護(hù)數(shù)據(jù)、可在線編程、存儲(chǔ)密度髙、低功耗、成本較低 等特點(diǎn),是目前比較理想的存儲(chǔ)器。Flash存儲(chǔ)器的編程模式有寫入器模式(或 監(jiān)控模式)和在線編程模式(或用戶模式)兩種。寫入器模式是指,主機(jī)通過寫入 器向MCU發(fā)送相關(guān)命令來調(diào)用監(jiān)控ROM中的擦除或?qū)懭胱映绦?,從而?shí)現(xiàn) Flash存儲(chǔ)器的擦除或?qū)懭?。在線編程模式,主要是利用Flash存儲(chǔ)器的電可 擦除特性,允許用戶程序在運(yùn)行過程中,調(diào)用駐留在Flash存儲(chǔ)器內(nèi)部的擦除 或?qū)懭胱雍瘮?shù),對(duì)Flash存儲(chǔ)器內(nèi)的數(shù)據(jù)或程序進(jìn)行修改。
Flash在線編程技術(shù)是計(jì)算機(jī)技術(shù)的重要分支,是嵌入式系統(tǒng)最新發(fā)展的 產(chǎn)物,是實(shí)現(xiàn)嵌入式應(yīng)用產(chǎn)品程序的在線更新、重要參數(shù)的掉電保護(hù)與恢復(fù)、 靜態(tài)參數(shù)的在線修改等功能的重要技術(shù)手段。程序的在線更新提髙了嵌入式系 統(tǒng)應(yīng)用產(chǎn)品的可擴(kuò)展性與升級(jí)性能;參數(shù)的掉電保護(hù)與恢復(fù)及靜態(tài)參數(shù)的在線 修改可以使用Flash存儲(chǔ)器的一部分取代傳統(tǒng)EEPROM,提髙了系統(tǒng)的穩(wěn)定
性o
然而由于Flash在線編程時(shí)需要對(duì)Flash陣列加上髙于電源的電壓,這個(gè) 高電壓會(huì)導(dǎo)致對(duì)Flash區(qū)域讀取不穩(wěn)定。而Flash在線編程是通過運(yùn)行Flash 存儲(chǔ)器內(nèi)部的函數(shù)去擦除和編程另一些Flash區(qū)域,加髙電壓導(dǎo)致讀取的不穩(wěn) 定,使得運(yùn)行擦除和編程程序也會(huì)不穩(wěn)定,給Flash存儲(chǔ)器在線編程帶來了技 術(shù)上的困難。雖然飛思卡爾公司是在Flash技術(shù)發(fā)展比較成熟時(shí)才將Flash技術(shù)引入到MCU內(nèi)部,但仍無法解決該問題。目前這個(gè)問題只能由用戶在設(shè)計(jì) Flash在線編程底層驅(qū)動(dòng)程序時(shí)加以解決。常見的解決Flash擦寫不穩(wěn)定的方 法有兩種其一是將擦除和寫入程序(以下簡稱EW程序)放在不包含要擦寫區(qū) 域的Flash塊中,這樣進(jìn)行擦寫操作時(shí),擦寫程序可以直接在Flash中運(yùn)行, 不需要移到RAM中運(yùn)行。由于在擦寫時(shí),只對(duì)Flash存儲(chǔ)器中的l個(gè)塊加高 電壓,并不影響另外的塊,所以可以把擦寫程序放在不包含要擦寫區(qū)域的Flash 塊,這樣就可以避免程序代碼的移動(dòng)。但這種方法只適用于含有超過2塊或2 塊以上Flash存儲(chǔ)器的MCU,對(duì)于像NE64和UF32這種只有1塊Flash的芯 片,這種方法不適用,需要尋求其他的解決方法,因而存在編程上的不統(tǒng)一性。 其二是在進(jìn)行擦除與寫入操作之前將EW程序復(fù)制到RAM區(qū),PC指針定位 到RAM中,從而實(shí)際執(zhí)行RAM中EW程序。這樣給Flash加髙電壓時(shí),不 再從Flash中運(yùn)行程序,因而解決了讀取不穩(wěn)定的問題。這種做法,需要另外 編寫程序復(fù)制Flash中的EW程序到RAM之中,隨后轉(zhuǎn)向RAM中程序執(zhí)行。 因此入口參數(shù)難以定位,程序的可重用性較差,編程復(fù)雜度提髙。
顯然,如果能夠找到一種簡便可行的、適合于多種需求的Flash存儲(chǔ)器在 線編程控制的方法,保證在線編程的穩(wěn)定性,既能解決Flash擦寫程序的統(tǒng)一 性問題,又能回避程序全部移入RAM的難題,以提髙程序運(yùn)行的效率,則對(duì) 于Flash存儲(chǔ)器的在線編程具有重要的意義。
發(fā)明內(nèi)容
本發(fā)明目的是提供一種Flash存儲(chǔ)器在線編程控制方法,在保證在線編程 的穩(wěn)定性的同時(shí),既能實(shí)現(xiàn)程序的統(tǒng)一性,又能提髙程序運(yùn)行的效率。
為達(dá)到上述目的,發(fā)明人發(fā)現(xiàn),在Flash擦寫(Eff)流程中,僅有加髙壓 期間需要運(yùn)行的幾條指令會(huì)引起Flash存儲(chǔ)器讀取不穩(wěn)定,因而,本發(fā)明的總 體構(gòu)思是,將EW程序中涉及不穩(wěn)定的相關(guān)語句的機(jī)器碼預(yù)先放入RAM中,以 解決Flash存儲(chǔ)器在線編程的穩(wěn)定性問題。
由此,本發(fā)明采用的技術(shù)方案是 一種Flash存儲(chǔ)器在線編程控制方法, 包括擦除操作和寫入操作,其中
在RAM中預(yù)置Flash存儲(chǔ)器加髙壓期間運(yùn)行語句以及返回語句的機(jī)器碼,所述Flash存儲(chǔ)器加髙壓期間運(yùn)行語句包括向狀態(tài)寄存器寫入中斷標(biāo)志以啟 動(dòng)對(duì)應(yīng)命令的語句,以及判斷等待命令完成的語句; 所述擦除操作包括
(1) 預(yù)操作
(2) 定位要擦除的扇區(qū),向要擦除的扇區(qū)中每一地址寫入任意值;
(3) 向命令寄存器寫扇區(qū)擦除命令;
(4) 轉(zhuǎn)向RAM中的預(yù)置機(jī)器碼,并執(zhí)行
(5) 命令執(zhí)行完成時(shí),從RAM轉(zhuǎn)回Flash程序,完成所述擦除操作; 所述寫入操作包括
(1) 預(yù)操作;
(2) 將源地址的一個(gè)字寫入目標(biāo)地址;
(3) 向命令寄存器寫字寫入命令;
(4) 轉(zhuǎn)向RAM中的預(yù)置機(jī)器碼,并執(zhí)行;
(5) 命令執(zhí)行完成時(shí),從RAM轉(zhuǎn)回Flash程序,如果有下一待寫數(shù)據(jù),重 復(fù)步驟(2)至(5),否則完成所述寫入操作。
上文中,所述Flash存儲(chǔ)器加髙壓期間運(yùn)行語句,對(duì)于飛思卡爾的CPU 來說,包括,向狀態(tài)寄存器FSTAT寄存器的命令緩沖區(qū)空中斷標(biāo)志位CBEIF 位寫l,以清除該位來啟動(dòng)上一步確定的Flash操作命令;等待直到命令執(zhí)行 完成,狀態(tài)寄存器FSTAT的命令完成中斷標(biāo)志位CCIF位為1標(biāo)志命令執(zhí)行 完成。具體運(yùn)行的兩條語句可以是FSTAT=0x80;(啟動(dòng)命令執(zhí)行)和 while(!(FSTAT&0x40));(等待命令完成)。這兩條語句自身的機(jī)器碼,可以通 過LST文件獲得,為"180B800105F601058787C4408C000027F4,'c由于在RAM 中僅僅預(yù)置有限語句的機(jī)器碼,執(zhí)行結(jié)束后還需要返回。因此預(yù)置在RAM中 的機(jī)器碼由運(yùn)行的兩條語句本身的機(jī)器碼加上返回指令RTS的機(jī)器碼3D構(gòu) 成,為"180B800105F601058787C4408C000027F43D
實(shí)驗(yàn)表明,在向要擦除的扇區(qū)任意地址寫任意值時(shí),最好選擇除0x0000 外的其他值寫入,寫0x0000可能導(dǎo)致訪問錯(cuò)誤。
上述技術(shù)方案中,所述預(yù)操作包括,設(shè)置時(shí)鐘分頻,清除相關(guān)錯(cuò)誤標(biāo)志位, 設(shè)置塊號(hào)、頁號(hào)。這些操作可以作為擦除和寫入流程開始部分的公共操作被封裝成子函數(shù),擦除時(shí)直接調(diào)用即可。
上述技術(shù)方案中,所述擦除操作和寫入操作分別封裝為擦除子函數(shù)和寫入 子函數(shù),通過引用擦除子函數(shù)和寫入子函數(shù)實(shí)現(xiàn)Flash存儲(chǔ)器的在線編程控 制。
進(jìn)一步的技術(shù)方案是,在Flash擦寫流程中,第一設(shè)置時(shí)鐘分頻,清相關(guān) 錯(cuò)誤標(biāo)志位,設(shè)置塊號(hào)、頁號(hào),這些操作作為擦除和寫入流程開始部分的公共 操作被封裝成子函數(shù),擦除時(shí)直接調(diào)用即可。第二定位要擦除的扇區(qū)。向要擦 除的扇區(qū)任意地址寫任意值(最好選擇除0x0000外的其他值寫入,因?yàn)閷?shí)驗(yàn)發(fā) 現(xiàn)寫0x0000會(huì)導(dǎo)致訪問錯(cuò)誤)。第三向命令寄存器FCMD寫扇區(qū)擦除命令 0x40。第四向狀態(tài)寄存器FSTAT寄存器的命令緩沖區(qū)空中斷標(biāo)志位CBEIF位 寫l,以清除該位來啟動(dòng)上一步確定的Flash操作命令。最后等待直到命令執(zhí) 行完成,狀態(tài)寄存器FSTAT的命令完成中斷標(biāo)志位CCIF位為1標(biāo)志命令執(zhí) 行完成。對(duì)于向指定地址寫若干字?jǐn)?shù)據(jù)的操作,首先設(shè)置時(shí)鐘分頻,清相關(guān)錯(cuò) 誤標(biāo)志位,設(shè)置塊號(hào)、頁號(hào),然后向指定地址寫若干字?jǐn)?shù)據(jù)。其具體的寫入過 程是首先將源地址的一個(gè)字寫入目標(biāo)地址。然后向命令寄存器FCMD寫字 寫入命令0x20。接著再向狀態(tài)寄存器FSTAT寄存器的命令緩沖區(qū)空中斷標(biāo)志 位CBEIF位寫l,以清除該位來啟動(dòng)命令。等待直到上一條命令執(zhí)行完畢, 即狀態(tài)寄存器FSTAT的CBEIF位為1時(shí)就可以接收下 一 條命令。如果尚未寫 完數(shù)據(jù),遞增源地址和目標(biāo)地址,重新開始新的寫入過程。
由于上述技術(shù)方案運(yùn)用,本發(fā)明與現(xiàn)有技術(shù)相比具有下列優(yōu)點(diǎn)由于該方 案將影響穩(wěn)定性的關(guān)鍵語句的機(jī)器碼預(yù)先放置在RAM之中,將加高壓期間引 起的不穩(wěn)定因素與Flash存儲(chǔ)器的擦除、寫入操作獨(dú)立開來,提出了一種通用 性、編程方便的方案,確保了 Flash存儲(chǔ)器在線編程的穩(wěn)定性。封裝完整且符 合嵌入式工程規(guī)范的擦除和寫入子函數(shù),對(duì)Flash存儲(chǔ)器的在線編程提供了便 利。
圖l是本發(fā)明實(shí)施例一的在線編程調(diào)用實(shí)例圖。
具體實(shí)施方式
下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步描述
實(shí)施例一 一種Flash存儲(chǔ)器在線編程控制方法,包括以下步驟
(1) 在RAM中預(yù)置Flash存儲(chǔ)器加髙壓期間運(yùn)行語句的機(jī)器碼;
(2) 在Flash擦除或?qū)懭氩僮髦凶裱欢ǖ臅r(shí)序和步驟;
(3) 封裝Flash擦除或?qū)懭胱雍瘮?shù);
(4) 運(yùn)用步驟(3)中所述封裝良好的擦除、寫入子函數(shù),對(duì)Flash存儲(chǔ)器進(jìn) 行擦除/寫入操作編程。
本實(shí)施例中,所述Flash存儲(chǔ)器是以飛思卡爾2002之后推出的16位MCU S12系列中以帶CAN總線接口的DG128、帶以太網(wǎng)接口的NE64及帶USB2.0 接口的UF32為例。S12系列MCU的Flash由若干個(gè)塊(Block)組成。每個(gè) 塊劃分為若干個(gè)扇區(qū)(Sector)或若干頁(Page),每個(gè)扇區(qū)可以分為若干行 (Row),每行由若干字節(jié)組成。扇區(qū)是擦寫的基本單元。 一般來說,S12系 列MCU內(nèi)的Flash每行64字節(jié),8行組成1個(gè)扇區(qū),32個(gè)扇區(qū)組成1頁。 DG128內(nèi)的Flash共128KB,分為2塊,每塊4頁。UF32內(nèi)的Flash共32KB, 為1塊,2頁($3E, $3F)。 NE64內(nèi)的Flash共64KB,為1塊,4頁($3C、 S3D、 $3E和S3F)。
對(duì)Flash存儲(chǔ)器的讀寫不同于一般的RAM讀寫,需要專門的編程過程, Flash編程的基本操作有兩種擦除(Erase)和寫入(Program)。在擦除及寫入 過程中一般需要髙于電源的電壓。S12系列單片機(jī)由片內(nèi)電荷泵產(chǎn)生這個(gè)髙 壓。由于DG128有塊0和塊1兩塊Flash芯片,而NE64和UF32只有1塊 Flash的芯片,采用原有的不穩(wěn)定解決方案都存在不足。通過深入分析研究, 發(fā)現(xiàn)Flash擦寫流程中,僅有加髙壓期間需要運(yùn)行的的幾條指令引起了 Flash 存儲(chǔ)器讀取不穩(wěn)定的現(xiàn)象的發(fā)生。因此只需將EW程序中涉及不穩(wěn)定的相關(guān)語 句的機(jī)器碼預(yù)先放入RAM中的方法,這樣既解決了 Flash擦寫程序的統(tǒng)一性 問題,又回避了全部移入RAM的難題,還提髙了程序運(yùn)行的效率。
程序?qū)嵗捎玫木褪沁@種方案。即在主程序文件中定義常數(shù)數(shù)組,來存放 加髙壓期間需要執(zhí)行的機(jī)器碼,再用一個(gè)簡單的for循環(huán)語句將這些機(jī)器碼移 入RAM區(qū)。當(dāng)在擦寫過程中需要運(yùn)行這些機(jī)器碼時(shí),可跳轉(zhuǎn)到RAM的相應(yīng)區(qū)域執(zhí)行,工程實(shí)例中是通過"asm("JSR機(jī)器碼存放的RAM區(qū)首地址");" 語句實(shí)現(xiàn)的。
在線編程調(diào)用實(shí)例參見附圖1所示。
權(quán)利要求
1.一種Flash存儲(chǔ)器在線編程控制方法,包括擦除操作和寫入操作,其特征在于在RAM中預(yù)置Flash存儲(chǔ)器加高壓期間運(yùn)行語句以及返回語句的機(jī)器碼,所述Flash存儲(chǔ)器加高壓期間運(yùn)行語句包括向狀態(tài)寄存器寫入中斷標(biāo)志以啟動(dòng)對(duì)應(yīng)命令的語句,以及判斷等待命令完成的語句;所述擦除操作包括(1)預(yù)操作;(2)定位要擦除的扇區(qū),向要擦除的扇區(qū)中每一地址寫入任意值;(3)向命令寄存器寫扇區(qū)擦除命令;(4)轉(zhuǎn)向RAM中的預(yù)置機(jī)器碼,并執(zhí)行;(5)命令執(zhí)行完成時(shí),從RAM轉(zhuǎn)回Flash程序,完成所述擦除操作;所述寫入操作包括(1)預(yù)操作;(2)將源地址的一個(gè)字寫入目標(biāo)地址;(3)向命令寄存器寫字寫入命令;(4)轉(zhuǎn)向RAM中的預(yù)置機(jī)器碼,并執(zhí)行;(5)命令執(zhí)行完成時(shí),從RAM轉(zhuǎn)回Flash程序,如果有下一待寫數(shù)據(jù),重復(fù)步驟(2)至(5),否則完成所述寫入操作。
2. 根據(jù)權(quán)利要求1所述的Flash存儲(chǔ)器在線編程控制方法,其特征在于 所述預(yù)操作包括,設(shè)置時(shí)鐘分頻,清除相關(guān)錯(cuò)誤標(biāo)志位,設(shè)置塊號(hào)、頁號(hào)。
3. 根據(jù)權(quán)利要求1所述的Flash存儲(chǔ)器在線編程控制方法,其特征在于 所述擦除操作和寫入操作分別封裝為擦除子函數(shù)和寫入子函數(shù),通過引用擦除 子函數(shù)和寫入子函數(shù)實(shí)現(xiàn)Flash存儲(chǔ)器的在線編程控制。
全文摘要
本發(fā)明公開了一種Flash存儲(chǔ)器在線編程控制方法,包括擦除操作和寫入操作,其特征在于在RAM中預(yù)置Flash存儲(chǔ)器加高壓期間運(yùn)行語句以及返回語句的機(jī)器碼,所述Flash存儲(chǔ)器加高壓期間運(yùn)行語句包括向狀態(tài)寄存器寫入中斷標(biāo)志以啟動(dòng)對(duì)應(yīng)命令的語句,以及判斷等待命令完成的語句;在擦除操作和寫入操作過程中,在加高壓期間轉(zhuǎn)向RAM中進(jìn)行程序運(yùn)行。本發(fā)明將加高壓期間引起的不穩(wěn)定因素與Flash存儲(chǔ)器的擦除、寫入操作獨(dú)立開來,控制方法具備通用性,編程方便,并確保了Flash存儲(chǔ)器在線編程的穩(wěn)定性。
文檔編號(hào)G11C16/10GK101409106SQ20081023478
公開日2009年4月15日 申請(qǐng)日期2008年10月29日 優(yōu)先權(quán)日2008年10月29日
發(fā)明者劉純平, 張?jiān)评? 朱巧明, 王宜懷, 章建民 申請(qǐng)人:蘇州大學(xué)