新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式MCU數(shù)據(jù)Flash的數(shù)據(jù)存儲(chǔ)及管理方法研究與實(shí)現(xiàn)

基于嵌入式MCU數(shù)據(jù)Flash的數(shù)據(jù)存儲(chǔ)及管理方法研究與實(shí)現(xiàn)

——
作者:劉源楊 馬建輝 莊汝科 王崗 時(shí)間:2013-09-23 來(lái)源:電子產(chǎn)品世界 收藏

  具體應(yīng)用

本文引用地址:http://2s4d.com/article/170167.htm

  在筆者開(kāi)發(fā)的電動(dòng)汽車儀表盤(pán)中,需要存儲(chǔ)總里程、小計(jì)里程、電機(jī)故障等信息,按照前文所述的方法,首先建立數(shù)據(jù)分區(qū),為每個(gè)數(shù)據(jù)條目建立ID,該ID同時(shí)可表征數(shù)據(jù)狀態(tài)字:

  ID=1,對(duì)應(yīng)電機(jī)故障,大小為1個(gè)字節(jié);
  ID=2,對(duì)應(yīng)總里程,大小為4個(gè)字節(jié);
  ID=3,對(duì)應(yīng)小計(jì)里程,大小為2個(gè)字節(jié);

  各數(shù)據(jù)條目在分區(qū)內(nèi)的格式如下:

  分區(qū)狀態(tài)字Status_word(1個(gè)字節(jié))+電機(jī)故障ID(1個(gè)字節(jié))+電機(jī)故障(1個(gè)字節(jié))+總里程ID(一個(gè)字節(jié))+總里程(4個(gè)字節(jié))+小計(jì)里程ID(1個(gè)字節(jié))+小計(jì)里程(2個(gè)字節(jié));

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

  如前文所述,在進(jìn)行數(shù)據(jù)讀/寫(xiě)操作時(shí),首先通過(guò)數(shù)據(jù)條目ID進(jìn)行偏移地址查表,計(jì)算數(shù)據(jù)在分區(qū)內(nèi)的相對(duì)地址,其實(shí)現(xiàn)函數(shù)如下:

  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即表示數(shù)據(jù)條目ID的宏。

  在行車過(guò)程中,當(dāng)小計(jì)里程改變時(shí),不僅在液晶屏上實(shí)時(shí)更新小計(jì)里程數(shù)據(jù),同時(shí)需要把更新后的小計(jì)里程寫(xiě)在數(shù)據(jù)中,其具體函數(shù)如下:

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

  由上述函數(shù)可見(jiàn),應(yīng)用本專利所設(shè)計(jì)方法,可以屏蔽底層實(shí)現(xiàn)細(xì)節(jié),提供給應(yīng)用層簡(jiǎn)單、清晰、和EEPROM一樣簡(jiǎn)便的接口。

  結(jié)語(yǔ)

  本文從Flash特性出發(fā)研究并實(shí)現(xiàn)一種高效的及管理方法,其實(shí)現(xiàn)層面實(shí)現(xiàn)與EEPROM同樣的應(yīng)用接口,具有很高的使用價(jià)值,同時(shí)有效利用了的內(nèi)部資源,提高了 Data Flash的使用壽命,使之可以滿足產(chǎn)品生命周期要求,并節(jié)約了產(chǎn)品的BOM成本,所設(shè)計(jì)方法在筆者設(shè)計(jì)的汽車儀表盤(pán)中得到實(shí)際應(yīng)用和長(zhǎng)時(shí)間驗(yàn)證,運(yùn)行效果良好,具有很好的實(shí)用價(jià)值。

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

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

上一頁(yè) 1 2 3 4 下一頁(yè)

評(píng)論


相關(guān)推薦

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

關(guān)閉