<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

  摘要:本文設計了一種利用內部數據存儲非易失性數據的方法,它將數據的若干扇區劃分為多個(gè)數據分區,不同數據分區存儲數據在不同歷史時(shí)間的拷貝,最新數據分區存儲最新的數據拷貝;在數據讀操作進(jìn)行時(shí),計算最新數據拷貝的存儲位置,直接讀取該地址;在數據寫(xiě)操作進(jìn)行時(shí),判斷數據寫(xiě)入位置是否已經(jīng)被擦除,如果寫(xiě)入位置未擦除,將數據寫(xiě)入下一個(gè)分區,同時(shí)將當前分區中的其他數據復制到下一個(gè)分區;如果寫(xiě)入位置已經(jīng)擦除,直接將數據寫(xiě)入當前分區中。該方法實(shí)現了類(lèi)似的數據讀寫(xiě)方式,操作方便,應用接口簡(jiǎn)單,而且可以盡量避免扇區擦除操作,提高存儲效率,同時(shí)提高內部數據Flash的使用壽命。

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

  引言

  在系統設計中,經(jīng)常需要存儲一些非易失性的數據,在筆者開(kāi)發(fā)的電動(dòng)汽車(chē)儀表盤(pán)中,需要存儲總里程、小計里程、電機故障等其他信息,采用支持對字節讀寫(xiě)的實(shí)現,操作起來(lái)和RAM一樣簡(jiǎn)單方便,但同時(shí)會(huì )在大批量產(chǎn)品的生產(chǎn)中帶來(lái)成本問(wèn)題和維護問(wèn)題。在有數據Flash的中,采用數據Flash代替實(shí)現非易失性的存儲,便可以節約成本且無(wú)需維護,筆者所設計的儀表盤(pán)采用內置4KB數據閃存的MC9S12HY32做為處理器,足以滿(mǎn)足儀表盤(pán)要求。用Flash存儲數據的傳統方式是為每個(gè)數據分配固定的存儲地址,由于Flash在進(jìn)行寫(xiě)操作時(shí)需要先擦除數據所在的整個(gè)扇區[1],對一個(gè)數據進(jìn)行寫(xiě)操作便會(huì )造成對扇區內其他數據的擦除,由于擦除操作耗時(shí)較長(cháng),不僅效率低,影響系統的實(shí)時(shí)性,而且為了避免丟失其他數據需要相當復雜的處理,對MCU的RAM空間也有一定的要求。如果寫(xiě)入數據失敗,會(huì )造成所寫(xiě)入數據的丟失,如果在擦除扇區后發(fā)生掉電,便會(huì )造成扇區內所有數據的丟失。不僅如此,由于每次寫(xiě)入操作都需要先擦除扇區,以擦除次數表征的Flash使用壽命也無(wú)法滿(mǎn)足產(chǎn)品生命周期的要求。本文提供一種利用MCU內部數據Flash存儲非易失性數據的方法[2],它不僅操作方便,應用接口簡(jiǎn)單,而且可以盡量避免扇區擦除操作,提高存儲效率,同時(shí)提高M(jìn)CU內部數據Flash的使用壽命。

  總體設計

  通過(guò)在MCU數據Flash上建立多個(gè)數據分區,存儲數據的多個(gè)拷貝,避免對Flash固定地址的反復擦除,提高Flash的使用壽命,同時(shí)通過(guò)數據讀寫(xiě)方法的設計和數據分區的管理,避免對Flash扇區的不必要擦除,并最終實(shí)現和EEPROM讀寫(xiě)很類(lèi)似的應用接口。具體地,首先根據系統的應用需求和MCU內部數據Flash的扇區大小,合理設置數據分區大小和個(gè)數,將數據Flash的若干扇區劃分為多個(gè)數據分區。在每個(gè)數據分區的起始地址設置分區狀態(tài)字[3],反映數據分區的存儲歷史時(shí)間,不同數據分區存儲數據在不同歷史時(shí)間的拷貝,當前數據分區存儲最新的數據拷貝;同時(shí)為每個(gè)數據條目建立數據狀態(tài)字,反映該數據在所在分區內存儲地址是否已經(jīng)被擦除。

  系統上電后,首先根據數據分區狀態(tài)字查找存儲最新數據的分區,將之設置為最新數據分區,并設置其分區狀態(tài)字為最新分區狀態(tài)字。在數據讀操作進(jìn)行時(shí),根據最新數據分區及數據在分區內的偏移地址計算最新數據拷貝的Flash存儲位置,直接讀取該地址。在數據寫(xiě)操作進(jìn)行時(shí),首先計算該數據的Flash存儲地址,然后根據數據狀態(tài)字判斷數據所在的Flash存儲地址是否已經(jīng)被擦除[4],如果寫(xiě)入位置已經(jīng)擦除,直接將數據寫(xiě)入當前分區中,其他數據保持不變;如果寫(xiě)入位置未擦除,進(jìn)行分區拷貝操作,即將數據寫(xiě)入下一個(gè)分區,將當前分區中的其他數據依次復制到下一個(gè)分區,同時(shí)將下一個(gè)分區設置為最新數據分區,更新最新分區狀態(tài)字并存儲在最新數據分區首地址位置。其設計流程如圖1所示。

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

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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>