新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > 在應用編程MAXQ微控制器中可分區擦除的程序和數

        在應用編程MAXQ微控制器中可分區擦除的程序和數

        作者: 時間:2012-03-19 來源:網絡 收藏
        摘要:本應用筆記介紹了MAXQ中的程序和數據閃存,以及如何使用內置的應用ROM對閃存進行擦/寫。本應用筆記適用于所有使用分區閃存的MAXQ

        引言

        本應用筆記介紹了如何管理MAXQ中、的內部數據和程序閃存。一般性地介紹了怎樣構建一個引導裝載應用,實現程序閃存的在應用編程。注意:本文不適于那些使用頁閃存的MAXQ微控制器,即那些只允許少量閃存被擦除的微控制器。各MAXQ數據手冊都會說明其所采用的閃存類型。

        閃存簡介

        存儲器配置
        本應用筆記給出了多種不同尺寸的閃存配置,并不完全和某一特定MAXQ器件相符。這些配置僅用于本文中的實例。各MAXQ器件的數據手冊會列出該器件的存儲器配置。

        引導、程序和數據區在操作上并沒有區別。如果引導裝載程序需要的空間超過了第一閃存區的范圍,那么可將程序擴展到下一分區中。然而,在下面的實例中,標號會有所不同。

        表1. 閃存配置實例

        數據閃存
        數據閃存可以被用來可靠地存儲一些系統工作期間需要一次性或周期性保存的系統數據。數據閃存的容量因特定的MAXQ器件而異,通常在128至2k字之間。

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

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

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

        如果這種有界隊列方法還不能滿足您的系統要求,那么還可以采用分區交換技術。

        表2. 有界隊列存儲器配置舉例

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

        在應用編程MAXQ微控制器中可分區擦除的程序和數
        圖1. 有界隊列流程

        塊交換
        塊交換能夠有效防止數據在漫長的分區擦除過程中丟失或損壞。這里所講的“塊”等同于“分區”。塊交換方式最適合于分區尺寸略大于數據總量的情況。缺點是至少需要兩個數據閃存分區。當要寫入的數據總量遠小于分區尺寸時,最好將塊交換和有界隊列兩種方法結合使用。

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

        附錄A給出了一個簡單的C源代碼實例。

        表3. 塊交換存儲器配置實例

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

        在應用編程MAXQ微控制器中可分區擦除的程序和數
        圖2. 塊交換流程

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

        這種組合方法的程序比有界隊列方法稍微復雜一些。附錄A給出了一個簡單的C源代碼實例。

        表4. 塊交換和有界隊列存儲器配置實例

        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


        在應用編程MAXQ微控制器中可分區擦除的程序和數
        圖3. 有界隊列和塊交換流程

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

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

        注意,直接訪問方法與未來的ROM版本無法前向兼容。

        第二種為查表法。盡管這種方法兼容性較好,但是執行時間較長。在下面每一段例程說明的后面,匯編例程采用查表法獲取ROM應用例程的地址。表5所示為應用ROM提供的幾個閃存例程。關于ROM應用例程的完整列表,參見特定MAXQ器件的用戶指南。

        表5. 應用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. <ul id="ogyoq"></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)<
          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區

          主站蜘蛛池模板: 陆川县| 无为县| 怀柔区| 麻江县| 丘北县| 宜黄县| 西和县| 东安县| 三江| 扎赉特旗| 锦屏县| 同心县| 阿拉善右旗| 宁晋县| 莱西市| 青海省| 阿荣旗| 竹山县| 蕉岭县| 屯留县| 枣阳市| 宁化县| 广昌县| 顺平县| 隆尧县| 娱乐| 巍山| 奇台县| 安义县| 四川省| 凤台县| 龙海市| 河曲县| 河东区| 华宁县| 泰和县| 嘉禾县| 鞍山市| 上杭县| 柞水县| 凌源市|
          <strike id="ogyoq"><input id="ogyoq"></input></strike>
          <ul id="ogyoq"></ul>
          <strike id="ogyoq"><input id="ogyoq"></input></strike>
          <ul id="ogyoq"></ul>
        • <fieldset id="ogyoq"><menu id="ogyoq"></menu></fieldset>
          <fieldset id="ogyoq"><input id="ogyoq"></input></fieldset>