張小鳴,宋 磊
(常州大學(xué)信息科學(xué)與工程學(xué)院,江蘇常州213164)
基于串行FRAM的固態(tài)存儲器構(gòu)建
張小鳴,宋 磊
(常州大學(xué)信息科學(xué)與工程學(xué)院,江蘇常州213164)
為簡化嵌入式系統(tǒng)利用NAND閃存保存大容量數(shù)據(jù)的設(shè)計(jì)復(fù)雜性,提出一種利用鐵電隨機(jī)存儲器(FRAM)構(gòu)建固態(tài)存儲器實(shí)現(xiàn)快速高效存取的方法。制定串行FRAM與RAM相結(jié)合的最優(yōu)存儲協(xié)議,給出查詢存儲器塊的概念和串行FRAM存儲數(shù)據(jù)的快速查詢算法,介紹串行FRAM與RAM相結(jié)合的存儲協(xié)議和FM24W256的塊讀寫算法。51單片機(jī)的電機(jī)驅(qū)動總成載重測試儀設(shè)計(jì)與工業(yè)性實(shí)驗(yàn)結(jié)果表明,利用FRAM設(shè)計(jì)的固態(tài)存儲器,具有軟硬件開銷小、存取速度快、實(shí)現(xiàn)簡單可靠的特點(diǎn),能滿足嵌入式系統(tǒng)長期存儲的要求。
固態(tài)存儲器;鐵電隨機(jī)存儲器;存儲協(xié)議;I2C總線;數(shù)據(jù)查詢;塊讀/寫
目前嵌入式系統(tǒng)擴(kuò)展固態(tài)(不易失)存儲器的類型主要有3種:EEPROM存儲器,NAND FLASH存儲器,FRAM存儲器。這3種固態(tài)存儲器各有優(yōu)缺點(diǎn),應(yīng)用場合不盡相同。EEPROM的字節(jié)存取速度慢(毫秒級),寫入一般需要5 ms~10 ms的等待數(shù)據(jù)寫入時間,功耗大(毫安級),可擦寫有限次(約10萬次),容量千比特級,適合小數(shù)據(jù)量的慢速、非頻繁存儲[1]。NAND FLASH(NAND閃存)存儲器的字節(jié)存取速度快(納秒級),功耗小(毫安級),可擦寫有限次(約100萬次),容量兆比特級,適合大數(shù)據(jù)量的快速、頻繁存儲[2]。鐵電存儲器(Ferroelectric Random Access Memory,FRAM)是一種兼?zhèn)潆S機(jī)存儲器和非易失性存儲器特性的高性能不易失存儲器,字節(jié)存取速度快(串行FRAM為微妙級~毫秒級,并行FRAM為納秒級),功耗極低(微安級),可擦寫無限次(100兆以上,即1014次),容量千比特級,寫入后無需任何延時等待,適合小數(shù)據(jù)量快速、頻繁存儲[3]。
鑒于串行FRAM存儲器種類更多,接口更簡單,應(yīng)用領(lǐng)域更廣,本文提出一種串行FRAM與RAM
相結(jié)合的存儲協(xié)議,并在此基礎(chǔ)上給出串行FRAM快速存取算法,克服串行FRAM存儲器數(shù)據(jù)查詢繁瑣的局限。
電可擦除可編程只讀存儲器(Electrically Erasable Programmable Read-Only Memory,EEPROM)兼?zhèn)淞薘AM和ROM的基本特點(diǎn),既可隨機(jī)讀寫,也可斷電后數(shù)據(jù)不易失。EEPROM分為串行EEPROM和并行EEPROM,串行EEPROM因占用引腳少、容量擴(kuò)展配置靈活以及讀寫操作相對簡單而在嵌入式系統(tǒng)中作為一種固態(tài)存儲器得到了廣泛應(yīng)用。目前,較為常用的串行EEPROM是24C系列,但是由于串行EEPROM的讀寫速度較慢,主要用于保存設(shè)備所需要的配置數(shù)據(jù)等存取頻率不高的場合[4]。
NAND FLASH存儲器容量大,已成為嵌入式系統(tǒng)的大容量存儲器。但是,NAND FLASH存儲器由于生產(chǎn)工藝的原因可能存在無效塊,需要通過軟件檢測跳過無效塊,無形中增加了軟件開銷[5]。NAND FLASH存儲器只能按頁寫(每頁由256 Byte~2 048 Byte組成),按塊(32頁)擦除,存取不靈活,塊擦除時間與頁讀寫時間相對長[6]。文獻(xiàn)[7]介紹了一種基于FPGA控制器對多片NAND FLASH并行總線控制實(shí)現(xiàn)高速大容量存儲的設(shè)計(jì)方法,但實(shí)現(xiàn)方法復(fù)雜。為了解決NAND閃存存儲器按頁長時間存儲與A/D實(shí)時采樣頻率之間的矛盾,文獻(xiàn)[8]采用主、從單片機(jī)分別控制A/D轉(zhuǎn)換器實(shí)時采集數(shù)據(jù)和NAND閃存存儲器的實(shí)時存儲,通過雙口RAM實(shí)現(xiàn)采集數(shù)據(jù)共享和實(shí)時存儲。采用雙口RAM芯片成本較高,接口控制較復(fù)雜。
串行FRAM存儲容量在0.5 KB~2 MB之間[9],超低功耗,I/O接口簡單,成本低,體積小,存儲數(shù)據(jù)安全穩(wěn)定,已經(jīng)成為嵌入式系統(tǒng)長時間保存數(shù)據(jù)的首選固態(tài)存儲器。文獻(xiàn)[10]介紹了Linux下的串行FRAM驅(qū)動程序的設(shè)計(jì)方法,但沒有介紹FRAM的存儲協(xié)議等核心存儲技術(shù)。文獻(xiàn)[11]介紹一種基于單片機(jī)的I2C總線FRAM存儲器的軟硬件設(shè)計(jì)方法,但未提及數(shù)據(jù)采集模塊的實(shí)現(xiàn)以及與FRAM模塊的存取關(guān)系。文獻(xiàn)[12]介紹了基于DSP控制器的I2C總線FM24L64存儲器的接口設(shè)計(jì)方法,存儲數(shù)據(jù)來自GPS接收機(jī)RS232串口接收的彈載數(shù)據(jù)。文獻(xiàn)[13]介紹了基于單片機(jī)的無線壓力檢測系統(tǒng)設(shè)計(jì),利用壓力傳感器檢測到超閾值壓力信號觸發(fā)喚醒平時處于休眠狀態(tài)的無線壓力傳感器節(jié)點(diǎn),激活采集功能模塊,將超閾值壓力值存儲到I2C總線FRAM存儲器中。文獻(xiàn)[14]介紹了基于藍(lán)牙通信技術(shù)的人行動軌跡采集記錄系統(tǒng)設(shè)計(jì),將人行動軌跡數(shù)據(jù)實(shí)時保存到I2C總線1Mb FRAM存儲器中,并周期性發(fā)送到服務(wù)器。文獻(xiàn)[15]介紹了智能水質(zhì)濁度分布式測量系統(tǒng)的設(shè)計(jì),利用I2C總線FRAM芯片F(xiàn)M24CL16存儲水質(zhì)濁度數(shù)據(jù),由于水質(zhì)濁度號變化緩慢,對A/D轉(zhuǎn)換器的采樣實(shí)時性要求不高。文獻(xiàn)[16]介紹了基于PIC單片機(jī)的漿果沖擊記錄裝置設(shè)計(jì),利用SPI接口FRAM芯片F(xiàn)M25V10(128 KB)存儲每次漿果跌落的加速度采集數(shù)據(jù)。每次跌落實(shí)驗(yàn)間隔足以保證A/D采集時序與FRAM存儲時序分時進(jìn)行。文獻(xiàn)[17]介紹了基于無線傳感器網(wǎng)絡(luò)的康復(fù)治療用人體運(yùn)動檢測裝置,應(yīng)用I2C總線FRAM芯片F(xiàn)M24V10(128 KB)來存儲各種配置參數(shù)和算法參數(shù)等,但沒有用來存儲實(shí)時采集數(shù)據(jù)。
隨著嵌入式系統(tǒng)對實(shí)時性處理要求越來越高,如何充分發(fā)揮FRAM存儲器的快速存儲、存儲穩(wěn)定的優(yōu)點(diǎn)來滿足實(shí)時性的要求成為一個現(xiàn)實(shí)的問題。到目前為止,FRAM存儲器作為嵌入式系統(tǒng)的固態(tài)存儲器受到2個限制:
(1)并行FRAM存儲器,存取速度快,價(jià)格較高,在讀操作后必須有個預(yù)充電過程,來恢復(fù)數(shù)據(jù)位。與傳統(tǒng)SRAM在時序上有所不同而不能直接替換。
(2)串行FRAM存儲器,存取速度較快,價(jià)格較低,種類多,分I2C接口2線FM24系列和SPI接口3線FM25兩大系列,時序與傳統(tǒng)的24、25型的EEPROM芯片兼容,可以直接替換。SPI存取速度比I2C要快一個數(shù)量級,還可實(shí)現(xiàn)全雙工。但串行FRAM的存儲數(shù)據(jù)查詢繁瑣,須加載到系統(tǒng)內(nèi)存RAM中才能查詢,軟件開銷較大。
電機(jī)驅(qū)動總成測試儀是電機(jī)總成驅(qū)動測試臺的配套設(shè)備,用于不定期抽檢一個批次電機(jī)驅(qū)動總成的載重特性數(shù)據(jù),并長期保存在FM24W256中,以備查詢,便于分析該批次電機(jī)驅(qū)動總成的售后質(zhì)量。通常要求保存期限為1年~2年。電機(jī)驅(qū)動總成的載重特性數(shù)據(jù)包括載重實(shí)驗(yàn)周期中的最大載重量、最大電機(jī)電流、最大電機(jī)外殼溫升,最大、最小、平均電機(jī)轉(zhuǎn)速。測試儀由單片機(jī)采集板、單片機(jī)顯示鍵盤板、熱敏微型打印機(jī)等組成,系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 電機(jī)驅(qū)動總成載重測試儀系統(tǒng)結(jié)構(gòu)框圖
由圖1可見,測試儀采用主、從雙單片機(jī)結(jié)構(gòu),滿足實(shí)時處理要求。主單片機(jī)控制A/D轉(zhuǎn)換器周期采樣稱重傳感器調(diào)理信號,霍爾電流傳感器調(diào)理信號,溫度傳感器調(diào)理信號,累計(jì)單位時間內(nèi)電機(jī)轉(zhuǎn)速脈沖個數(shù),進(jìn)行標(biāo)度變換和BCD變換,變換為BCD碼格式測試數(shù)據(jù),快速發(fā)送給從單片機(jī)進(jìn)行數(shù)據(jù)緩存、實(shí)時顯示、數(shù)據(jù)保存。主、從單片機(jī)通過模擬SPI接口進(jìn)行實(shí)時通信。制定多字節(jié)同步字符通信協(xié)議和從機(jī)防死鎖機(jī)構(gòu),實(shí)現(xiàn)了同步、可靠通信。
內(nèi)存RAM開辟顯示數(shù)據(jù)緩存區(qū)和查詢數(shù)據(jù)緩沖區(qū)。顯示數(shù)據(jù)緩存區(qū)存放實(shí)時采集的測試數(shù)據(jù)、實(shí)時時鐘時間值和實(shí)時計(jì)算產(chǎn)生的載重特性數(shù)據(jù)。鍵盤與LCD交互菜單中的測試數(shù)據(jù)命令激活實(shí)時顯示測試數(shù)據(jù)、載重特性數(shù)據(jù)以及測試周期累計(jì)值。保存命令激活單片機(jī)與FM24W256之間建立I2C總線讀寫時序操作,將測試開始實(shí)時時鐘時間值,載重特性數(shù)據(jù)和測試周期累計(jì)值一起作為一條測試記錄保存到FM24W256指定存儲區(qū)。查詢命令激活單片機(jī)與FM24W256之間建立I2C總線讀時序操作,將FM24W256中對應(yīng)查詢關(guān)鍵字可能覆蓋的一個局部存儲塊中的所有記錄均讀到查詢數(shù)據(jù)緩沖區(qū)中,以便在內(nèi)存中高效查詢,快速找到相匹配的一條或若干條測試記錄,送LCD屏調(diào)閱顯示。打印命令可以將調(diào)閱的歷史記錄打印輸出。
串行FRAM存儲結(jié)構(gòu)和存取特性決定了查詢數(shù)據(jù)必須先讀出后加載到系統(tǒng)存儲級內(nèi)存才能查詢。串行FRAM的存取特性由串行FRAM串行數(shù)據(jù)幀格式、讀寫時序以及讀/寫速率共同決定。
4.1 串行FRAM數(shù)據(jù)幀格式
以FM24W256為例,FM24W256的多字節(jié)連續(xù)寫操作串行數(shù)據(jù)幀格式與傳統(tǒng)的24系列EEPROM芯片24C256的一致,如圖2所示。
圖2 FM24W256多字節(jié)寫數(shù)據(jù)幀格式
但是,FM24W256的多字節(jié)連續(xù)讀操作串行數(shù)據(jù)幀格式與24C256有所不同:FM24W256的連續(xù)讀操結(jié)束非應(yīng)答位“1”由微控制器主動發(fā)出,而不是由FM24W256發(fā)出。24C256采用頁讀操作,每當(dāng)連續(xù)讀到64個字節(jié)為1頁后,24C256自動發(fā)出讀操結(jié)束的非應(yīng)答位“1”,因此,若需要連續(xù)讀64個以上的字節(jié)長度時,必須分頁讀,導(dǎo)致存取效率大大降低。
FM24W256的連續(xù)讀操作數(shù)據(jù)幀格式只須寫I2C總線的同一器件從地址,接著就可從現(xiàn)行存儲地址+1開始,順序讀后續(xù)地址存儲單元的字節(jié),連續(xù)讀串行數(shù)據(jù)幀格式如圖3所示。
圖3 FM24W256多字節(jié)讀數(shù)據(jù)幀格式
FM24W256現(xiàn)行存儲地址既可以由隨機(jī)讀操作確定,也可以由單字節(jié)寫操作時序確定。一般來說, FM24W256的連續(xù)讀操作與一次隨機(jī)讀操作配合使用,即先執(zhí)行一次隨機(jī)讀操作來確定要順序讀的首地址,即現(xiàn)行存儲地址。隨機(jī)讀操作數(shù)據(jù)幀格式不僅要求寫I2C總線的指定器件從地址,而且要求寫指定存儲單元的15位地址,最后讀出該存儲單元的8位數(shù)據(jù), FM24W256的隨機(jī)讀串行數(shù)據(jù)幀格式如圖4所示。
圖4 FM24W256隨機(jī)讀數(shù)據(jù)幀格式
4.2 串行FRAM讀/寫時序
與傳統(tǒng)24C256相比,FM24W256讀寫時序有2個重大改進(jìn):(1)在讀寫時序上不需要任何延時(即使延時也無妨),而24C256必須有至少6 ms以上的延時。(2)FM24C256的連續(xù)讀/寫時序?qū)樞蜃x字節(jié)長度沒有限制,而24C256只限為64個字節(jié)為一頁的頁讀/寫,因此,FM24W256的連續(xù)讀字節(jié)長度完全可以覆蓋整個芯片存儲容量,為鐵電存儲器的高效、快速查詢奠定了硬件基礎(chǔ)。FM24W256的I2C總線最高速率為1 MHz。FM24W256與單片機(jī)接口電路實(shí)例如圖5所示,其中,SCL是串行時鐘輸入線;SDA是串行輸入輸出數(shù)據(jù)線。
圖5 FM24W256接口電路實(shí)例
由于串行FRAM采用串行總線存取,數(shù)據(jù)讀/寫要經(jīng)歷一個串并轉(zhuǎn)換(讀)和并串轉(zhuǎn)換(寫)的過程,因此保存到FRAM的測試數(shù)據(jù),必須先緩存在RAM內(nèi)存中,查詢FM24W256中保存的測試紀(jì)錄,讀出并加載到RAM內(nèi)存中。制定最好的RAM和FRAM存儲協(xié)議就顯得非常關(guān)鍵。最好的存儲協(xié)議應(yīng)包括查詢關(guān)鍵字存取歷史記錄最快捷,最簡單,適合嵌入式系統(tǒng)內(nèi)存空間相對較小,微處理器運(yùn)行速度相對較慢,不能實(shí)現(xiàn)復(fù)雜查詢算法的特點(diǎn),即要設(shè)計(jì)出相對簡單,易于實(shí)現(xiàn)查詢算法的存儲協(xié)議。
5.1 內(nèi)存存儲協(xié)議
內(nèi)存存儲協(xié)議包括制定測試數(shù)據(jù)存儲格式, RAM和FRAM的映射圖等。
(1)測試數(shù)據(jù)存儲格式
測試數(shù)據(jù)除了應(yīng)包含實(shí)時測試數(shù)據(jù)外,還應(yīng)包含查詢關(guān)鍵字和索引號,對于測試儀來說,測試數(shù)據(jù)都是時間觸發(fā)事件,最有效的查詢關(guān)鍵字就是測試時間信息,例如測試開始時刻的年、月、日、小時、分等。索引號包括月記錄號和日記錄號。假設(shè)測試數(shù)據(jù)包含實(shí)時測試數(shù)據(jù)字節(jié)和測試周期共計(jì)n個字節(jié),測試數(shù)據(jù)開始時間信息為5個字節(jié)(年、月、日、時、分),月記錄號為1個字節(jié),日記錄號為1個字節(jié),則一組測試數(shù)據(jù)占用的字節(jié)長度為L字節(jié)(n+ 7)。采用小端模式設(shè)計(jì)的測試數(shù)據(jù)存儲格式如圖6所示。
圖6 RAM緩沖器測試數(shù)據(jù)存儲格式
在圖6中,偏移地址+0的存儲單元在FRAM中映射為月記錄號,即1個月中的記錄總條數(shù),應(yīng)根據(jù)FRAM存儲的現(xiàn)有月記錄號基礎(chǔ)上遞增更新回寫,到該保留字節(jié)。偏移地址+(L–1)的存儲單元在FRAM中映射為日記錄號,即一天中的記錄總條數(shù),應(yīng)根據(jù)FRAM存儲的現(xiàn)有日記錄號基礎(chǔ)上遞增更新回寫到該保留字節(jié)。測試數(shù)據(jù)采用BCD碼格式存放是為了便于轉(zhuǎn)換成LCD碼顯示。
(2)RAM和FRAM的映射圖
在測試日期下,RAM緩沖器暫存的實(shí)時測試數(shù)據(jù),用保存命令陸續(xù)寫入FRAM的不同存儲空間。故只需設(shè)置一個內(nèi)存RAM緩沖器,但索引號要根據(jù)FRAM存放的對應(yīng)年、月上一條記錄的索引號來計(jì)算確定,并加載到RAM緩沖器測試數(shù)據(jù)的索引號單
元中。索引號的計(jì)算公式為:
若本測試數(shù)據(jù)的日號=上一條測試記錄的日號,且上一條測試記錄的日記錄號<日記錄號上限,且上一條測試記錄的月記錄號<月記錄號上限,則本測試數(shù)據(jù)日記錄號=(上一條測試記錄的日記錄號+1),且本測試數(shù)據(jù)月記錄號=(上一條測試記錄的月記錄號+1),否則,本測試數(shù)據(jù)不能保存。
若本測試數(shù)據(jù)的日號(上一條測試記錄的日號,且上一條測試記錄的月記錄號<月記錄號上限,則本測試數(shù)據(jù)日紀(jì)錄號=1,本測試數(shù)據(jù)月記錄號= (上一條測試記錄的月記錄號+1),否則,本測試數(shù)據(jù)不能保存。
RAM和FRAM的映射圖如圖7所示。RAM數(shù)據(jù)空間的查詢存儲塊內(nèi)存緩沖器用于緩存從FRAM讀出的多條測試記錄,便于高效查詢。
圖7 RAM和FRAM的映射圖
5.2 FRAM存儲協(xié)議
FRAM存儲協(xié)議包括制定測試記錄存儲格式,確定查詢存儲器塊容量,設(shè)置查詢索引號單元等。
(1)測試記錄存儲格式
由圖7可知,FRAM的測試記錄存儲格式就是內(nèi)存測試數(shù)據(jù)存儲格式的連續(xù)映射。由串行FRAM的存取特性可知,從FRAM存儲器中一次連續(xù)讀多條記錄的效率遠(yuǎn)遠(yuǎn)大于一次讀一條記錄。又從內(nèi)存存儲協(xié)議可知,每條記錄保存有月記錄號和日記錄號,將一個月的所有記錄作為一個查詢存儲器塊一次連續(xù)讀出加載到內(nèi)存再查詢,綜合查詢效率最高。因此,可確定一個查詢存儲器塊容量Sb為:
其中,N為月記錄號;D為日記錄號。
將FRAM存儲器按每年12個月劃分為12個存儲器塊,就可以制定出測試記錄存儲格式。以典型I2C總線串行FM24W256為例,存儲器容量為256 KB,即32 KB×8位。假設(shè)每條記錄占用的最大字節(jié)長度L=32(20H),規(guī)定一天最多允許保存4條測試記錄,一個月最多允許測試保存40條記錄,則一個查詢存儲器塊的容量為500H。12個月占用的存儲器塊容量為3C00H。因此,FM24W256可以保存2年的測試記錄,將32 KB平分為2個16KB,低16KB (0x0000~0x3FFF)空間存儲奇年測試記錄,高16KB (0x4000~0x7FFF)空間存儲偶年測試記錄,例如: 2013年數(shù)據(jù)存于低16 KB內(nèi)存單元,2014年數(shù)據(jù)存于高16 KB內(nèi)存單元。為了簡化查詢算法,將一年的12個月份分別對應(yīng)于12個不同的存儲器塊,每個存儲器塊的地址范圍是固定的,每個存儲器塊中每條記錄的地址范圍也是固定的。FM24W256奇年和偶年測試記錄存儲格式如圖8所示。
圖8 奇/偶年FM24W256測試記錄存儲格式
(2)查詢索引號單元
奇/偶年的12個查詢索引號單元用于保存12個月的測試記錄總數(shù),約定月測試記錄總數(shù)最大為40。奇/偶年碼存儲單元用于存放奇/偶測試年碼,每當(dāng)寫測試數(shù)據(jù)時,先將測試年碼讀出,與RAM緩沖器中的測試數(shù)據(jù)奇/偶年碼存儲單元內(nèi)容比較,若不同,則將12個索引號單元清零。然后將奇/偶測試年碼存入奇/偶年碼存儲單元。若相同,讀取奇/偶測試年對應(yīng)月索引號單元中的內(nèi)容,若小于40,進(jìn)行加一回寫操作,若等于40,說明該月記錄已滿。
由此可見,滿足串行FRAM查詢的RAM加載存儲器容量下限值Sd為:
其中,Sb為FRAM的一個查詢存儲器塊容量。
最優(yōu)的查詢機(jī)制是根據(jù)查詢?nèi)掌?能快速定位相匹配的FRAM查詢存儲塊,讀出加載到查詢存儲塊內(nèi)存緩沖器,再執(zhí)行快速查詢算法就能以較少的軟件開銷,高效查詢到相匹配的測試記錄。
6.1 FRAM塊寫算法
將RAM緩沖器中的測試數(shù)據(jù)寫入FM24W256存儲器的塊寫算法步驟為:
(1)測試數(shù)據(jù)奇/偶年碼與從FM24W256奇/偶年號存儲單元讀出的年碼相比較,若相等,轉(zhuǎn)入步驟(2)。若不相等,表明測試數(shù)據(jù)年碼是新年碼,本
測試數(shù)據(jù)為欲寫的第1條記錄,則立即將新年碼寫入FM24W256的奇/偶年碼存儲單元,并將對應(yīng)該年的12個月索引號單元清零,轉(zhuǎn)入步驟(3)。
(2)從FM24W256對應(yīng)測試月索引號單元讀取月記錄號N,若N為0,表明該測試月尚無記錄被保存,轉(zhuǎn)入步驟(3)。若N=40,則說明當(dāng)月記錄保存數(shù)已滿,則置本月記錄已滿標(biāo)志為1,退出塊寫操作。若N(40,則轉(zhuǎn)入步驟(4)。
(3)將測試數(shù)據(jù)月記錄號存儲單元和日記錄號存儲單元均置1,由月記錄號N和日記錄號D,計(jì)算測試數(shù)據(jù)保存到FM24W256存儲單元首址Aorg的公式為:
其中,OEorg為寫測試記錄的FM24W256奇/偶年碼首地址;L為每條記錄的字節(jié)長度。以Aorg作為FM24W256塊寫子程序入口參數(shù)1,寫測試記錄RAM緩沖器首址作為入口參數(shù)2,記錄字節(jié)長度L作為入口參數(shù)3,調(diào)用FM24W256塊寫子程序,塊寫算法結(jié)束。
(4)從FM24W256對應(yīng)測試月的上一條測試記錄的日存儲單元讀取日碼,與測試數(shù)據(jù)的日碼相比較,若相等,表明測試數(shù)據(jù)與上一條保存的測試記錄屬于同天測試,則再從FM24W256保存的上一條測試記錄的日記錄號單元讀取日記錄號,若該日記錄號=4,說明當(dāng)日記錄保存數(shù)已滿,則立即置“本日記錄已滿”標(biāo)志為1,退出塊寫操作。若該日記錄號(4,表明本條測試記錄可以寫入FM24W256,故將該日記錄號加1,回寫入RAM緩沖器測試數(shù)據(jù)的日記錄號單元,同時,從FM24W256保存的上一條測試記錄的月記錄號單元讀取月記錄號,將該月記錄號加1,回寫到RAM緩沖器測試數(shù)據(jù)中月記錄號單元,轉(zhuǎn)入步驟(5)。若不相等,表明待寫測試數(shù)據(jù)與上一條保存記錄不屬于同一天測試,則將RAM緩沖器測試數(shù)據(jù)的日記錄號存儲單元置1,同時,從FM24W256上一條測試記錄的月記錄號單元讀出月記錄號,將該月記錄號加1,回寫入RAM緩沖器測試數(shù)據(jù)的月記錄號單元,轉(zhuǎn)入步驟(5)。
(5)由式(3)計(jì)算Aorg,作為FM24W256塊寫子程序入口參數(shù)1,測試數(shù)據(jù)RAM緩沖器首址作為入口參數(shù)2,測試數(shù)據(jù)字節(jié)長度L作為入口參數(shù)3,調(diào)用FM24W256塊寫子程序。最后,把FM24W256對應(yīng)測試月的月索引號單元內(nèi)容讀出,加1再寫回,塊寫算法結(jié)束。
6.2 FRAM塊讀算法
為了降低查詢FM24W256存儲器數(shù)據(jù)的復(fù)雜度,把存放在FM24W256中對應(yīng)查詢月的所有測試記錄,即1個查詢存儲器塊的全部測試記錄讀出加載到RAM查詢塊內(nèi)存緩沖器,再進(jìn)行日碼匹配查詢。故只須利用查詢年、月信息來計(jì)算FM24W256塊讀首地址,將塊長度為500H的存儲空間的內(nèi)容順序讀出并順序加載到RAM指定查詢塊內(nèi)存緩沖器。一個查詢存儲器塊讀出加載到RAM查詢塊內(nèi)存緩沖器的塊讀算法步驟如下:
(1)查詢?nèi)掌诘哪甏a與從FM24W256年碼存儲單元讀出年碼相比較,若相等,轉(zhuǎn)入步驟(2)。若不相等,說明查詢的年碼不在存儲范圍,立即將無記錄標(biāo)志位置1退出查詢,通知主程序報(bào)警顯示“無此年記錄”。
(2)從FM24W256對應(yīng)查詢月的月索引號單元讀出索引號N,若N=0,說明本月無任何記錄,立即置無記錄標(biāo)志位為1,退出查詢,通知主程序報(bào)警顯示“無此月記錄”。若N(0,轉(zhuǎn)入步驟(3)。
(3)由查詢月計(jì)算存放在FM24W256的查詢存儲器塊首址Borg的公式為:
以Borg作為FM24W256塊讀子程序的入口參數(shù)1,RAM查詢塊內(nèi)存緩沖器首地址作為入口參數(shù)2,讀塊長度N×500H作為入口參數(shù)3,調(diào)用FM24W256塊讀子程序,塊讀算法結(jié)束。
6.3 內(nèi)存映射快速查詢算法
由于每月抽檢測試的日期是不定的,每月測試記錄存儲空間第1個測試記錄存儲區(qū)可以存放任一日的測試記錄,這就使RAM查詢塊加載緩沖器的記錄查詢不能采用二分法等傳統(tǒng)快速縮小查詢區(qū)間的查詢法,只能用順序查詢。但可以利用月索引號N作為查詢次數(shù)計(jì)數(shù)器,大于N條記錄對應(yīng)的緩沖器空間就不需要查詢,從而可以加快查詢速度。查詢存儲塊內(nèi)存緩沖器快速查詢算法步驟如下:
(1)查詢指針初始化指向RAM查詢塊內(nèi)存緩沖器第1條記錄的“日碼”存放單元首址,查詢月記錄計(jì)數(shù)器初始化初值為月索引號N。查詢結(jié)果指針初始化指向查詢結(jié)果匹配記錄指針表首址,查詢記錄匹配計(jì)數(shù)器始化初值為0。
(2)由查詢指針順序讀取每條記錄的“日、月、年”碼與鍵盤輸入需查詢記錄的“日、月、年”碼逐一相比較,若相等,轉(zhuǎn)入步驟(3)。若不相等,轉(zhuǎn)入步驟(4)。
(3)將查詢記錄匹配計(jì)數(shù)器加1,查詢指針存入查詢結(jié)果指針表中,查詢結(jié)果指針+2指向查詢結(jié)果匹配記錄指針表的下一個指針單元首址。判月記錄計(jì)數(shù)器當(dāng)前值是否小于等于4,若小于等于4,則立即將月記錄計(jì)數(shù)器減1,轉(zhuǎn)入步驟(4)。若大于4,則立即將月記錄計(jì)數(shù)器置為3,轉(zhuǎn)入步驟(4),因?yàn)槿諟y試記錄是順序存放的,而且協(xié)議規(guī)定一天只允許保存4條測試記錄,所以找到第1條日記錄,只要再
順序查詢3條記錄的存儲空間就可以快速結(jié)束查詢,實(shí)現(xiàn)了快速查詢。
(4)查詢指針+每條記錄長度,指向下一條記錄日碼存放單元首址,記錄計(jì)數(shù)器減1,判斷記錄計(jì)數(shù)器是否為0,若不等于0,轉(zhuǎn)到步驟(2),若等于0,轉(zhuǎn)到步驟(5)。
(5)查詢記錄匹配計(jì)數(shù)器的非零數(shù)字表示查詢到的某天測試記錄總數(shù)。查詢結(jié)果匹配記錄指針表存放每條匹配記錄的日碼存放單元首址,查詢算法結(jié)束。顯示程序就可以根據(jù)查詢結(jié)果來調(diào)用測試記錄顯示和打印。
6.4 RAM與FRAM數(shù)據(jù)一致性保護(hù)
若微處理器正在執(zhí)行FRAM塊寫測試數(shù)據(jù)操作,突然發(fā)生電源掉電故障,就有可能導(dǎo)致RAM緩沖器測試數(shù)據(jù)寫入FRAM不完整。為了保障斷電瞬間RAM緩沖器的測試數(shù)據(jù)與FRAM保存的測試記錄一致,設(shè)計(jì)一個電源故障檢測電路,當(dāng)電源電壓跌落到掉電故障電平以上某一預(yù)警值時,就立即向微處理器發(fā)出NMI(不可屏蔽中斷)或高優(yōu)先級中斷請求,微處理器響應(yīng)中斷后,立即判斷當(dāng)前是否正在寫測試數(shù)據(jù),若是,立即停止寫操作,并將RAM緩沖器測試數(shù)據(jù)立即保存到后備電池保護(hù)RAM中,以便電源故障解除后,根據(jù)重寫標(biāo)志,恢復(fù)數(shù)據(jù),重寫測試數(shù)據(jù)。一般來說,實(shí)時時鐘芯片電路都內(nèi)嵌有后備電池保護(hù)RAM電路。設(shè)計(jì)的電源故障檢測電路如圖9所示。利用電源監(jiān)視芯片MAX813L的電源電平監(jiān)視功能,將電源故障輸入引腳PFI設(shè)置為單片機(jī)故障電平4.5 V以上的某一預(yù)警電平,例如4.65 V,當(dāng)系統(tǒng)正常電源電壓+5 V因故障跌落到4.65 V時,MAX813L的電源故障輸出引腳PFO產(chǎn)生一個低電平脈沖,將PFO連接到微處理器的NMI (不可屏蔽中斷輸入)引腳或高優(yōu)先級的可屏蔽中斷引腳上,觸發(fā)電源故障中斷請求。
圖9 電源故障檢測電路
針對串行FRAM存儲器占用I/O資源少、存取速度快、讀寫無限次等突出優(yōu)點(diǎn),本文提出采用串行FRAM存儲器構(gòu)建嵌入式系統(tǒng)固態(tài)存儲器的實(shí)用方法。通過制定FRAM與系統(tǒng)RAM相結(jié)合的最優(yōu)存儲協(xié)議,設(shè)計(jì)出串行FRAM存儲器快速查詢算法。電機(jī)驅(qū)動總成載重測試儀工業(yè)性實(shí)驗(yàn)表明,FRAM存儲器保存的測試數(shù)據(jù)安全可靠,歷史查詢快速準(zhǔn)確,滿足嵌入式系統(tǒng)長期保存大量數(shù)據(jù)和快速查詢的需要。
[1]劉 靜,王計(jì)元.24C系列串行EEPROM與單片機(jī)的接口設(shè)計(jì)及應(yīng)用[J].上海電力學(xué)院學(xué)報(bào),2011, 27(4):353-357.
[2]馬豐璽,楊 斌,衛(wèi)洪春.非易失存儲器NAND Flash及其在嵌入式系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展, 2007,7(1):203-205,209.
[3]Ramtron International Corporation.FM24W256.pdf[EB/ OL].(2012-07-23).http://www.ramtron.com.
[4]朱 磊.CCS環(huán)境兩次編程實(shí)現(xiàn)DSP串行EEPROM自舉的方法[J].微計(jì)算機(jī)應(yīng)用,2010,31(2):72-75.
[5]劉 晉,王政林,薛凱方.基于STC12C5A60S2單片機(jī)的LED顯示屏硬件設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2011, 30(22):24-27.
[6]袁春柱,朱莊生,孫 科.微小衛(wèi)星星上數(shù)據(jù)存儲單元設(shè)計(jì)與實(shí)現(xiàn)[J].數(shù)據(jù)采集與處理,2010,25(z1): 110-115.
[7]陸 浩,王振占.高速大容量固態(tài)存儲器設(shè)計(jì)[J].計(jì)算機(jī)工程,2011,37(15):226-227,231.
[8]梁亞軍,劉培基.雙口RAM用于閃存實(shí)時數(shù)據(jù)存儲研究[J].青島大學(xué)學(xué)報(bào):工程技術(shù)版,2008,33(2): 18-21.
[9]2013年Cypress(原RAMTRON)鐵電存儲器選型表[EB/OL].(2013-09-23).http://pan.baidu.com/ share/link shareid=4286959507&uk=4147947078&fid =4137793134.
[10]孫宇航,秦貴和,于新波,等.嵌入式Linux下的FRAM驅(qū)動程序設(shè)計(jì)[J].計(jì)算機(jī)工程,2011,37(11): 264-266.
[11]林春平,張興龍.鐵電存儲器在機(jī)艙油氣濃度數(shù)據(jù)記錄儀的應(yīng)用[J].中國航海,2010,33(1):30-32,69.
[12]黃建軍,張志安,陳 俊,等.基于鐵電存儲器的彈載數(shù)據(jù)高速存儲系統(tǒng)研究[J].測試技術(shù)學(xué)報(bào),2013, 27(1):50-55.
[13]Hufenbach W,B?2hm R,Thieme M,et al.Damage Monitoring in Pressure Vessels and Pipelines Based on Wireless Sensor Networks[J].Procedia Engineering, 2011,10:340-345.
[14]Cabero J M,Molina V,Urteaga I,et al.Acquisition of Human Traces with Bluetooth Technology:Challenges and Proposals[J].Ad Hoc Networks,2014,12:2-16.
[15]Tai Haijiang,Li Daoliang,Wang Cong,et al.Design and Characterization of a Smart Turbidity Transducer for Distributed MeasurementSystem[J].Sensorsand Actuators A Physical,2012 175:1-8.
[16]Yu Pengcheng,Li Changying,Rains G,et al.Development of the Berry Impact Recording Device Sensing System: Hardware Design and Calibration[J].Computers and Electronics in Agriculture,2011,79:103-111.
[17]Olivares A,Olivares G,Mula F,et al.Wagyromag: Wireless Sensor Network for Monitoring and Processing Humanbody Movement in Healthcare Applications[J].Journal of Systems Architecture,2011,57:905-915.
編輯 顧逸斐
Construction of Solid-state Memory Based on Serial FRAM
ZHANG Xiaoming,SONG Lei
(College of Information Science and Engineering,Changzhou University,Changzhou 213164,China)
In order to simplify the design complexity of using NAND flash storage to save mass data in embedded systems,a method of constructing solid state memory using Ferroelectric Random Access Memory(FRAM)to achieve fast and efficient access is presented.The optimal protocol of the combination of serial FRAM and RAM is developed.The concept of memory block query and fast query algorithm of serial FRAM data storage are proposed.The storage protocol of the combination of serial FRAM and RAM and the algorithm of block read/write are introduced.The design of motor drive system load tester based on 51 single chip microcomputer and industrial tests show that the solid state memory designed by ferroelectric memory has smaller software and hardware overhead,faster access speed,the realization of simple and reliable.It meets the long-term storage requirements of embedded systems.
solid state memory;Ferroelectric Random Access Memory(FRAM);storage protocol;I2C bus;data query; block read/write
張小鳴,宋 磊.基于串行FRAM的固態(tài)存儲器構(gòu)建[J].計(jì)算機(jī)工程,2015,41(3):64-70.
英文引用格式:Zhang Xiaoming,Song Lei.Construction of Solid-state Memory Based on Serial FRAM[J].Computer Engineering,2015,41(3):64-70.
1000-3428(2015)03-0064-07
:A
:TP333
10.3969/j.issn.1000-3428.2015.03.012
張小鳴(1958-),男,教授、博士,主研方向:嵌入式系統(tǒng);宋 磊,碩士研究生。
2014-03-10
:2014-05-27E-mail:xm0298@163.com