新聞中心

        EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 在應(yīng)用編程MAXQ微控制器中可分區(qū)擦除的程序和數(shù)

        在應(yīng)用編程MAXQ微控制器中可分區(qū)擦除的程序和數(shù)

        作者: 時(shí)間:2012-03-19 來(lái)源:網(wǎng)絡(luò) 收藏
        摘要:本應(yīng)用筆記介紹了MAXQ中的程序和數(shù)據(jù)閃存,以及如何使用內(nèi)置的應(yīng)用ROM對(duì)閃存進(jìn)行擦/寫。本應(yīng)用筆記適用于所有使用分區(qū)閃存的MAXQ

        引言

        本應(yīng)用筆記介紹了如何管理MAXQ中、的內(nèi)部數(shù)據(jù)和程序閃存。一般性地介紹了怎樣構(gòu)建一個(gè)引導(dǎo)裝載應(yīng)用,實(shí)現(xiàn)程序閃存的在應(yīng)用編程。注意:本文不適于那些使用頁(yè)閃存的MAXQ微控制器,即那些只允許少量閃存被擦除的微控制器。各MAXQ數(shù)據(jù)手冊(cè)都會(huì)說(shuō)明其所采用的閃存類型。

        閃存簡(jiǎn)介

        存儲(chǔ)器配置
        本應(yīng)用筆記給出了多種不同尺寸的閃存配置,并不完全和某一特定MAXQ器件相符。這些配置僅用于本文中的實(shí)例。各MAXQ器件的數(shù)據(jù)手冊(cè)會(huì)列出該器件的存儲(chǔ)器配置。

        引導(dǎo)、程序和數(shù)據(jù)區(qū)在操作上并沒(méi)有區(qū)別。如果引導(dǎo)裝載程序需要的空間超過(guò)了第一閃存區(qū)的范圍,那么可將程序擴(kuò)展到下一分區(qū)中。然而,在下面的實(shí)例中,標(biāo)號(hào)會(huì)有所不同。

        表1. 閃存配置實(shí)例

        數(shù)據(jù)閃存
        數(shù)據(jù)閃存可以被用來(lái)可靠地存儲(chǔ)一些系統(tǒng)工作期間需要一次性或周期性保存的系統(tǒng)數(shù)據(jù)。數(shù)據(jù)閃存的容量因特定的MAXQ器件而異,通常在128至2k字之間。

        數(shù)據(jù)閃存的使用有一些限制。與EEPROM不同,數(shù)據(jù)閃存不能按字擦除;每次必須擦除一個(gè)完整的分區(qū)。擦除一個(gè)分區(qū)通常需要0.7秒的時(shí)間,最壞情況下可能會(huì)長(zhǎng)達(dá)15秒。在這期間,用戶代碼停止運(yùn)行,不能進(jìn)行其他操作。因此,在根據(jù)系統(tǒng)需求選擇軟件技術(shù)時(shí),必須要仔細(xì)考慮這些限制。對(duì)于絕大多數(shù)周期性數(shù)據(jù)存儲(chǔ),采用有界隊(duì)列和/或分區(qū)切換技術(shù),即可滿足系統(tǒng)可靠性的要求。下面給出分區(qū)交換和有界隊(duì)列技術(shù)的簡(jiǎn)單實(shí)例。

        有界隊(duì)列
        有界隊(duì)列是一個(gè)包含固定數(shù)量元素的隊(duì)列。該方法常用于處理周期性數(shù)據(jù)。例如,可以將一個(gè)2k字的數(shù)據(jù)閃存分成32至64個(gè)字的條目,如表2所示的存儲(chǔ)器配置。

        初始化時(shí),啟動(dòng)程序掃描隊(duì)列,以確定隊(duì)列中下一個(gè)可用條目。隊(duì)列填滿之后只有將其擦處后方可寫入下一個(gè)條目。如果要保留全部條目,那么必須改變分區(qū)以保持所有數(shù)據(jù)。閃存擦除后,則可以寫入新的條目。這種方法的缺點(diǎn)是在擦寫過(guò)程中如果掉電,所有數(shù)據(jù)將會(huì)丟失。圖1示例條目載入有界隊(duì)列的流程。附錄A給出了一個(gè)簡(jiǎn)單的C源代碼實(shí)例。

        如果這種有界隊(duì)列方法還不能滿足您的系統(tǒng)要求,那么還可以采用分區(qū)交換技術(shù)。

        表2. 有界隊(duì)列存儲(chǔ)器配置舉例

        FLASHQueue[ ]
        Queue IndexData Flash Address
        310xF7C0-0xF7FF
        300xF780-0xF7BF
        290xF740-0xF77F
        . . . .. . . .
        20xF080-0xF0BF
        10xF040-0xF07F
        00xF000-0xF03F

        在應(yīng)用編程MAXQ微控制器中可分區(qū)擦除的程序和數(shù)
        圖1. 有界隊(duì)列流程

        塊交換
        塊交換能夠有效防止數(shù)據(jù)在漫長(zhǎng)的分區(qū)擦除過(guò)程中丟失或損壞。這里所講的“塊”等同于“分區(qū)”。塊交換方式最適合于分區(qū)尺寸略大于數(shù)據(jù)總量的情況。缺點(diǎn)是至少需要兩個(gè)數(shù)據(jù)閃存分區(qū)。當(dāng)要寫入的數(shù)據(jù)總量遠(yuǎn)小于分區(qū)尺寸時(shí),最好將塊交換和有界隊(duì)列兩種方法結(jié)合使用。

        如果需要采用塊交換,則需要選用至少含有兩個(gè)數(shù)據(jù)閃存分區(qū)的MAXQ器件。表3給出了一個(gè)包含兩個(gè)1K x 16閃存分區(qū)的存儲(chǔ)器配置實(shí)例。圖2給出了塊交換寫/擦流程。

        附錄A給出了一個(gè)簡(jiǎn)單的C源代碼實(shí)例。

        表3. 塊交換存儲(chǔ)器配置實(shí)例

        Flash Sectors
        Sector NumberData Flash Address
        00xF000-0xF3FF
        10xE000-0xE3FF

        在應(yīng)用編程MAXQ微控制器中可分區(qū)擦除的程序和數(shù)
        圖2. 塊交換流程

        同時(shí)采用有界隊(duì)列和塊交換
        管理數(shù)據(jù)閃存的最可靠、最靈活的辦法是同時(shí)采用有界隊(duì)列和塊交換技術(shù)。當(dāng)需要將少量的數(shù)據(jù)周期性存入閃存,并要保持?jǐn)?shù)據(jù)完整性的時(shí)候,結(jié)合使用這兩種技術(shù)將非常有利。表4給出了一個(gè)包含兩個(gè)2K x 16分區(qū),每個(gè)分區(qū)被劃分為32個(gè)相等條目的實(shí)例。圖3示例數(shù)據(jù)在兩個(gè)分區(qū)之間、有界排隊(duì)內(nèi)的流向。

        這種組合方法的程序比有界隊(duì)列方法稍微復(fù)雜一些。附錄A給出了一個(gè)簡(jiǎn)單的C源代碼實(shí)例。

        表4. 塊交換和有界隊(duì)列存儲(chǔ)器配置實(shí)例

        FQueueBank0[ ]
        Queue IndexData Flash Address
        310xF7C0-0xF7FF
        300xF780-0xF7BF
        290xF740-0xF77F
        . . . .. . . .
        20xF080-0xF0BF
        10xF040-0xF07F
        00xF000-0xF03F

        FQueueBank0[ ]
        Queue IndexData Flash Address
        310xE7C0-0xE7FF
        300xE780-0xE7BF
        290xE740-0xE77F
        . . . .. . . .
        20xE080-0xE0BF
        10xE040-0xE07F
        00xE000-0xE03F


        在應(yīng)用編程MAXQ微控制器中可分區(qū)擦除的程序和數(shù)
        圖3. 有界隊(duì)列和塊交換流程

        應(yīng)用ROM閃存例程
        MAXQ微控制器具有片內(nèi)閃存支持程序,駐留在ROM (只讀內(nèi)存)中,用來(lái)對(duì)閃存進(jìn)行編程、擦寫和校驗(yàn)。有兩種方法來(lái)調(diào)用這些例程。第一種也是最快的方法是直接訪問(wèn),只需通過(guò)以下代碼提供一個(gè)頭文件:

        u16 flashEraseSector(void *);u16 flashEraseAll(void);u16 flashWrite(u16 *pAddress, u16 iData);
        然后,加入鏈接定義給每個(gè)例程分配合適的地址。對(duì)于IAR鏈接文件,加入下面幾行語(yǔ)句:
        -DflashEraseSector=0x8XXX-DflashEraseAll=0x8XXX-DflashWrite=0x8XXX
        具體使用時(shí),用每個(gè)例程相應(yīng)的存儲(chǔ)器地址替代0x8XXX。其他編譯器可能使用不同的方法添加這些聲明。

        注意,直接訪問(wèn)方法與未來(lái)的ROM版本無(wú)法前向兼容。

        第二種為查表法。盡管這種方法兼容性較好,但是執(zhí)行時(shí)間較長(zhǎng)。在下面每一段例程說(shuō)明的后面,匯編例程采用查表法獲取ROM應(yīng)用例程的地址。表5所示為應(yīng)用ROM提供的幾個(gè)閃存例程。關(guān)于ROM應(yīng)用例程的完整列表,參見(jiàn)特定MAXQ器件的用戶指南。

        表5. 應(yīng)用ROM閃存例程

        Routine NumberRoutine NameEntry Point
        ROMTable = ROM[800Dh]
        Entry Point
        Physical Address
        2flashEraseSectorROM[ROMTable + 1]0x8XXX
        3flashEraseAllROM[ROMTable + 2]0x8XXX
        15flashWriteROM[ROMTable + 14]0x8XXX

        flashWrite
      1. <tfoot id="6ysuo"><input id="6ysuo"></input></tfoot>
          <strike id="6ysuo"><input id="6ysuo"></input></strike>
          <strike id="6ysuo"></strike>
          <fieldset id="6ysuo"></fieldset>
          <strike id="6ysuo"><input id="6ysuo"></input></strike>
        • <ul id="6ysuo"></ul>
        • Routineu16 flashWrite(u16 *pAddress, u16 iData)
          SummaryPrograms a single word of flash memory.
          InputsA[0] - Word address in flash memory to which to write.
          A[1] - Word value to write to flash memory.
          OutputsCarry: Set on error and cleared on success. If set, then A[0] contains one of the following error codes:
          1 : failure due to software timeout
          2 : failure reported by hardware (DQ5/FERR)<
          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

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

          主站蜘蛛池模板: 新田县| 阳西县| 新巴尔虎左旗| 慈利县| 淄博市| 兴城市| 陕西省| 大同市| 阳朔县| 海原县| 绥棱县| 资兴市| 昌平区| 平乡县| 镶黄旗| 新昌县| 江西省| 黄梅县| 万年县| 遂川县| 普兰店市| 光泽县| 沧州市| 武山县| 加查县| 修武县| 武邑县| 南木林县| 鄱阳县| 玛纳斯县| 新宁县| 阳城县| 怀集县| 密山市| 海原县| 阿拉善左旗| 西昌市| 丹凤县| 通州区| 依兰县| 高唐县|