基于嵌入式MCU數據Flash的數據存儲及管理方法研究與實(shí)現
具體應用
本文引用地址:http://dyxdggzs.com/article/170167.htm在筆者開(kāi)發(fā)的電動(dòng)汽車(chē)儀表盤(pán)中,需要存儲總里程、小計里程、電機故障等信息,按照前文所述的方法,首先建立數據分區,為每個(gè)數據條目建立ID,該ID同時(shí)可表征數據狀態(tài)字:
ID=1,對應電機故障,大小為1個(gè)字節;
ID=2,對應總里程,大小為4個(gè)字節;
ID=3,對應小計里程,大小為2個(gè)字節;
各數據條目在分區內的格式如下:
分區狀態(tài)字Status_word(1個(gè)字節)+電機故障ID(1個(gè)字節)+電機故障(1個(gè)字節)+總里程ID(一個(gè)字節)+總里程(4個(gè)字節)+小計里程ID(1個(gè)字節)+小計里程(2個(gè)字節);
經(jīng)計算,實(shí)際存儲需求為11個(gè)字節,為了計算的方便,設定分區大小為2的冪,選為16;MC9S12HY32內置數據Flash的扇區大小為256個(gè)字節,為了保證掉電不丟失數據,必須占用至少兩個(gè)扇區,根據公式(1),分區個(gè)數選定為32。數據Flash可擦寫(xiě)次數為10萬(wàn)次,在每次數據寫(xiě)操作都會(huì )引起數據分區輪轉的最壞情況下,數據可擦寫(xiě)次數為10萬(wàn)*32=320萬(wàn)次,大于EEPROM的可擦寫(xiě)100萬(wàn)次的使用壽命,可以滿(mǎn)足產(chǎn)品生命周期要求。
如前文所述,在進(jìn)行數據讀/寫(xiě)操作時(shí),首先通過(guò)數據條目ID進(jìn)行偏移地址查表,計算數據在分區內的相對地址,其實(shí)現函數如下:
uint16_t GetDataAddrFromItsId(uint16_t data_id)
{
uint16_t addr;
if(EE_MOTOR_ERR == data_id){
addr = EEPROM_START + 1;
}else if(EE_MILES_TOTAL == data_id){
addr = EEPROM_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的宏。
在行車(chē)過(guò)程中,當小計里程改變時(shí),不僅在液晶屏上實(shí)時(shí)更新小計里程數據,同時(shí)需要把更新后的小計里程寫(xiě)在數據Flash中,其具體函數如下:
void MilesRelativeStore(void)
{
if(Miles_relative != Miles_relative_stored){
(void)WriteEeprom(EE_MILES_RELATIVE,&Miles_relative,sizeof(Miles_relative));
Miles_relative_stored = Miles_relative;
}
}
由上述函數可見(jiàn),應用本專(zhuān)利所設計方法,可以屏蔽底層實(shí)現細節,提供給應用層簡(jiǎn)單、清晰、和EEPROM一樣簡(jiǎn)便的接口。
結語(yǔ)
本文從Flash特性出發(fā)研究并實(shí)現一種高效的數據存儲及管理方法,其實(shí)現層面實(shí)現與EEPROM同樣的應用接口,具有很高的使用價(jià)值,同時(shí)有效利用了MCU的內部資源,提高了MCU Data Flash的使用壽命,使之可以滿(mǎn)足產(chǎn)品生命周期要求,并節約了產(chǎn)品的BOM成本,所設計方法在筆者設計的汽車(chē)儀表盤(pán)中得到實(shí)際應用和長(cháng)時(shí)間驗證,運行效果良好,具有很好的實(shí)用價(jià)值。
參考文獻:
[1] 劉會(huì )忠,景瑞霞.損耗均衡算法在Flash管理中的應用研究[J].河北省科學(xué)院學(xué)報,2009,(2):4-6
[2] 山東省科學(xué)院自動(dòng)化研究所.一種利用MCU內部數據Flash存儲非易失性數據的方法:中國,201210074452.5[P].2012-09-12
[3] 易軍,曹龍漢,周熙.FLASH存儲管理子系統的設計與實(shí)現[J].微計算機信息,2008,(8):86-87
[4] 葉樹(shù)梅,季愛(ài)明,俞一彪.嵌入式系統中Flash存儲管理策略[J].科學(xué)技術(shù)與工程,2011,(17):77-79
[5] 梁海浪,蔡李隆.dsPIC30F6014內部EEPROM讀寫(xiě)C程序設計及其應用[J] .電子產(chǎn)品世界,2005,(11):96-98
[6] 杜偉慶,蘇凱雄.嵌入式系統中NOR Flash 的分塊管理與實(shí)現[J] .計算機與數字工程,2009,(12):80-82
[7] 王標,周新志,羅志平.嵌入式系統中Nand Flash寫(xiě)平衡的研究[J].微計算機信息,2008,(14):8-10
[8] 陸林燕,王魯靜,鄭正奇.NAND FLASH編程實(shí)現研究分析[J].計算機技術(shù)與發(fā)展,2008,(3):118-120
評論