• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于嵌入式MCU數據Flash的數據存儲及管理方法研究與實現

    基于嵌入式MCU數據Flash的數據存儲及管理方法研究與實現

    ——
    作者:劉源楊 馬建輝 莊汝科 王崗 時間:2013-09-23 來源:電子產品世界 收藏

      具體應用

    本文引用地址:http://www.czjhyjcfj.com/article/170167.htm

      在筆者開發的電動汽車儀表盤中,需要存儲總里程、小計里程、電機故障等信息,按照前文所述的方法,首先建立數據分區,為每個數據條目建立ID,該ID同時可表征數據狀態字:

      ID=1,對應電機故障,大小為1個字節;
      ID=2,對應總里程,大小為4個字節;
      ID=3,對應小計里程,大小為2個字節;

      各數據條目在分區內的格式如下:

      分區狀態字Status_word(1個字節)+電機故障ID(1個字節)+電機故障(1個字節)+總里程ID(一個字節)+總里程(4個字節)+小計里程ID(1個字節)+小計里程(2個字節);

      經計算,實際存儲需求為11個字節,為了計算的方便,設定分區大小為2的冪,選為16;MC9S12HY32內置數據的扇區大小為256個字節,為了保證掉電不丟失數據,必須占用至少兩個扇區,根據公式(1),分區個數選定為32。數據可擦寫次數為10萬次,在每次數據寫操作都會引起數據分區輪轉的最壞情況下,數據可擦寫次數為10萬*32=320萬次,大于的可擦寫100萬次的使用壽命,可以滿足產品生命周期要求。

      如前文所述,在進行數據讀/寫操作時,首先通過數據條目ID進行偏移地址查表,計算數據在分區內的相對地址,其實現函數如下:

      uint16_t GetDataAddrFromItsId(uint16_t data_id)
      {
      uint16_t addr;
      if(EE_MOTOR_ERR == data_id){
      addr = _START + 1;
      }else if(EE_MILES_TOTAL == data_id){
      addr = _START + 3;
      }else if(EE_MILES_RELATIVE == data_id){
      addr = EEPROM_START + 8;
      }else{
      addr = EEPROM_START; /* not valid data id,so give unvalid addr */
      }
      return addr;
      }
      EE_MOTOR_ERR、EE_MILES_TOTAL、EE_MILES_RELATIVE即表示數據條目ID的宏。

      在行車過程中,當小計里程改變時,不僅在液晶屏上實時更新小計里程數據,同時需要把更新后的小計里程寫在數據中,其具體函數如下:

      void MilesRelativeStore(void)
      {
      if(Miles_relative != Miles_relative_stored){
      (void)WriteEeprom(EE_MILES_RELATIVE,&Miles_relative,sizeof(Miles_relative));
      Miles_relative_stored = Miles_relative;
      }
      }

      由上述函數可見,應用本專利所設計方法,可以屏蔽底層實現細節,提供給應用層簡單、清晰、和EEPROM一樣簡便的接口。

      結語

      本文從Flash特性出發研究并實現一種高效的及管理方法,其實現層面實現與EEPROM同樣的應用接口,具有很高的使用價值,同時有效利用了的內部資源,提高了 Data Flash的使用壽命,使之可以滿足產品生命周期要求,并節約了產品的BOM成本,所設計方法在筆者設計的汽車儀表盤中得到實際應用和長時間驗證,運行效果良好,具有很好的實用價值。

      參考文獻:
      [1] 劉會忠,景瑞霞.損耗均衡算法在Flash管理中的應用研究[J].河北省科學院學報,2009,(2):4-6
      [2] 山東省科學院自動化研究所.一種利用內部數據Flash存儲非易失性數據的方法:中國,201210074452.5[P].2012-09-12
      [3] 易軍,曹龍漢,周熙.FLASH存儲管理子系統的設計與實現[J].微計算機信息,2008,(8):86-87
      [4] 葉樹梅,季愛明,俞一彪.系統中Flash存儲管理策略[J].科學技術與工程,2011,(17):77-79
      [5] 梁海浪,蔡李隆.dsPIC30F6014內部EEPROM讀寫C程序設計及其應用[J] .電子產品世界,2005,(11):96-98
      [6] 杜偉慶,蘇凱雄.系統中NOR Flash 的分塊管理與實現[J] .計算機與數字工程,2009,(12):80-82
      [7] 王標,周新志,羅志平.系統中Nand Flash寫平衡的研究[J].微計算機信息,2008,(14):8-10
      [8] 陸林燕,王魯靜,鄭正奇.NAND FLASH編程實現研究分析[J].計算機技術與發展,2008,(3):118-120

    linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

    上一頁 1 2 3 4 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 旬邑县| 乳山市| 环江| 杂多县| 崇阳县| 金昌市| 新巴尔虎左旗| 扎赉特旗| 京山县| 丽水市| 衡山县| 东乡县| 益阳市| 绥化市| 寿宁县| 永泰县| 绥阳县| 南宫市| 昭通市| 南宫市| 若羌县| 奈曼旗| 商水县| 德清县| 张家港市| 桓台县| 米易县| 信丰县| 喀喇沁旗| 龙川县| 墨脱县| 凭祥市| 富裕县| 屏东县| 韶山市| 岳普湖县| 封开县| 陇西县| 英吉沙县| 西吉县| 乌鲁木齐县|