張小鳴,宋 磊
(常州大學(xué)信息科學(xué)與工程學(xué)院,江蘇常州213164)
基于串行FRAM的固態(tài)存儲(chǔ)器構(gòu)建
張小鳴,宋 磊
(常州大學(xué)信息科學(xué)與工程學(xué)院,江蘇常州213164)
為簡(jiǎn)化嵌入式系統(tǒng)利用NAND閃存保存大容量數(shù)據(jù)的設(shè)計(jì)復(fù)雜性,提出一種利用鐵電隨機(jī)存儲(chǔ)器(FRAM)構(gòu)建固態(tài)存儲(chǔ)器實(shí)現(xiàn)快速高效存取的方法。制定串行FRAM與RAM相結(jié)合的最優(yōu)存儲(chǔ)協(xié)議,給出查詢存儲(chǔ)器塊的概念和串行FRAM存儲(chǔ)數(shù)據(jù)的快速查詢算法,介紹串行FRAM與RAM相結(jié)合的存儲(chǔ)協(xié)議和FM24W256的塊讀寫算法。51單片機(jī)的電機(jī)驅(qū)動(dòng)總成載重測(cè)試儀設(shè)計(jì)與工業(yè)性實(shí)驗(yàn)結(jié)果表明,利用FRAM設(shè)計(jì)的固態(tài)存儲(chǔ)器,具有軟硬件開銷小、存取速度快、實(shí)現(xiàn)簡(jiǎn)單可靠的特點(diǎn),能滿足嵌入式系統(tǒng)長(zhǎng)期存儲(chǔ)的要求。
固態(tài)存儲(chǔ)器;鐵電隨機(jī)存儲(chǔ)器;存儲(chǔ)協(xié)議;I2C總線;數(shù)據(jù)查詢;塊讀/寫
目前嵌入式系統(tǒng)擴(kuò)展固態(tài)(不易失)存儲(chǔ)器的類型主要有3種:EEPROM存儲(chǔ)器,NAND FLASH存儲(chǔ)器,FRAM存儲(chǔ)器。這3種固態(tài)存儲(chǔ)器各有優(yōu)缺點(diǎn),應(yīng)用場(chǎng)合不盡相同。EEPROM的字節(jié)存取速度慢(毫秒級(jí)),寫入一般需要5 ms~10 ms的等待數(shù)據(jù)寫入時(shí)間,功耗大(毫安級(jí)),可擦寫有限次(約10萬(wàn)次),容量千比特級(jí),適合小數(shù)據(jù)量的慢速、非頻繁存儲(chǔ)[1]。NAND FLASH(NAND閃存)存儲(chǔ)器的字節(jié)存取速度快(納秒級(jí)),功耗小(毫安級(jí)),可擦寫有限次(約100萬(wàn)次),容量兆比特級(jí),適合大數(shù)據(jù)量的快速、頻繁存儲(chǔ)[2]。鐵電存儲(chǔ)器(Ferroelectric Random Access Memory,FRAM)是一種兼?zhèn)潆S機(jī)存儲(chǔ)器和非易失性存儲(chǔ)器特性的高性能不易失存儲(chǔ)器,字節(jié)存取速度快(串行FRAM為微妙級(jí)~毫秒級(jí),并行FRAM為納秒級(jí)),功耗極低(微安級(jí)),可擦寫無(wú)限次(100兆以上,即1014次),容量千比特級(jí),寫入后無(wú)需任何延時(shí)等待,適合小數(shù)據(jù)量快速、頻繁存儲(chǔ)[3]。
鑒于串行FRAM存儲(chǔ)器種類更多,接口更簡(jiǎn)單,應(yīng)用領(lǐng)域更廣,本文提出一種串行FRAM與RAM
相結(jié)合的存儲(chǔ)協(xié)議,并在此基礎(chǔ)上給出串行FRAM快速存取算法,克服串行FRAM存儲(chǔ)器數(shù)據(jù)查詢繁瑣的局限。
電可擦除可編程只讀存儲(chǔ)器(Electrically Erasable Programmable Read-Only Memory,EEPROM)兼?zhèn)淞薘AM和ROM的基本特點(diǎn),既可隨機(jī)讀寫,也可斷電后數(shù)據(jù)不易失。EEPROM分為串行EEPROM和并行EEPROM,串行EEPROM因占用引腳少、容量擴(kuò)展配置靈活以及讀寫操作相對(duì)簡(jiǎn)單而在嵌入式系統(tǒng)中作為一種固態(tài)存儲(chǔ)器得到了廣泛應(yīng)用。目前,較為常用的串行EEPROM是24C系列,但是由于串行EEPROM的讀寫速度較慢,主要用于保存設(shè)備所需要的配置數(shù)據(jù)等存取頻率不高的場(chǎng)合[4]。
NAND FLASH存儲(chǔ)器容量大,已成為嵌入式系統(tǒng)的大容量存儲(chǔ)器。但是,NAND FLASH存儲(chǔ)器由于生產(chǎn)工藝的原因可能存在無(wú)效塊,需要通過(guò)軟件檢測(cè)跳過(guò)無(wú)效塊,無(wú)形中增加了軟件開銷[5]。NAND FLASH存儲(chǔ)器只能按頁(yè)寫(每頁(yè)由256 Byte~2 048 Byte組成),按塊(32頁(yè))擦除,存取不靈活,塊擦除時(shí)間與頁(yè)讀寫時(shí)間相對(duì)長(zhǎng)[6]。文獻(xiàn)[7]介紹了一種基于FPGA控制器對(duì)多片NAND FLASH并行總線控制實(shí)現(xiàn)高速大容量存儲(chǔ)的設(shè)計(jì)方法,但實(shí)現(xiàn)方法復(fù)雜。為了解決NAND閃存存儲(chǔ)器按頁(yè)長(zhǎng)時(shí)間存儲(chǔ)與A/D實(shí)時(shí)采樣頻率之間的矛盾,文獻(xiàn)[8]采用主、從單片機(jī)分別控制A/D轉(zhuǎn)換器實(shí)時(shí)采集數(shù)據(jù)和NAND閃存存儲(chǔ)器的實(shí)時(shí)存儲(chǔ),通過(guò)雙口RAM實(shí)現(xiàn)采集數(shù)據(jù)共享和實(shí)時(shí)存儲(chǔ)。采用雙口RAM芯片成本較高,接口控制較復(fù)雜。
串行FRAM存儲(chǔ)容量在0.5 KB~2 MB之間[9],超低功耗,I/O接口簡(jiǎn)單,成本低,體積小,存儲(chǔ)數(shù)據(jù)安全穩(wěn)定,已經(jīng)成為嵌入式系統(tǒng)長(zhǎng)時(shí)間保存數(shù)據(jù)的首選固態(tài)存儲(chǔ)器。文獻(xiàn)[10]介紹了Linux下的串行FRAM驅(qū)動(dòng)程序的設(shè)計(jì)方法,但沒(méi)有介紹FRAM的存儲(chǔ)協(xié)議等核心存儲(chǔ)技術(shù)。文獻(xiàn)[11]介紹一種基于單片機(jī)的I2C總線FRAM存儲(chǔ)器的軟硬件設(shè)計(jì)方法,但未提及數(shù)據(jù)采集模塊的實(shí)現(xiàn)以及與FRAM模塊的存取關(guān)系。文獻(xiàn)[12]介紹了基于DSP控制器的I2C總線FM24L64存儲(chǔ)器的接口設(shè)計(jì)方法,存儲(chǔ)數(shù)據(jù)來(lái)自GPS接收機(jī)RS232串口接收的彈載數(shù)據(jù)。文獻(xiàn)[13]介紹了基于單片機(jī)的無(wú)線壓力檢測(cè)系統(tǒng)設(shè)計(jì),利用壓力傳感器檢測(cè)到超閾值壓力信號(hào)觸發(fā)喚醒平時(shí)處于休眠狀態(tài)的無(wú)線壓力傳感器節(jié)點(diǎn),激活采集功能模塊,將超閾值壓力值存儲(chǔ)到I2C總線FRAM存儲(chǔ)器中。文獻(xiàn)[14]介紹了基于藍(lán)牙通信技術(shù)的人行動(dòng)軌跡采集記錄系統(tǒng)設(shè)計(jì),將人行動(dòng)軌跡數(shù)據(jù)實(shí)時(shí)保存到I2C總線1Mb FRAM存儲(chǔ)器中,并周期性發(fā)送到服務(wù)器。文獻(xiàn)[15]介紹了智能水質(zhì)濁度分布式測(cè)量系統(tǒng)的設(shè)計(jì),利用I2C總線FRAM芯片F(xiàn)M24CL16存儲(chǔ)水質(zhì)濁度數(shù)據(jù),由于水質(zhì)濁度號(hào)變化緩慢,對(duì)A/D轉(zhuǎn)換器的采樣實(shí)時(shí)性要求不高。文獻(xiàn)[16]介紹了基于PIC單片機(jī)的漿果沖擊記錄裝置設(shè)計(jì),利用SPI接口FRAM芯片F(xiàn)M25V10(128 KB)存儲(chǔ)每次漿果跌落的加速度采集數(shù)據(jù)。每次跌落實(shí)驗(yàn)間隔足以保證A/D采集時(shí)序與FRAM存儲(chǔ)時(shí)序分時(shí)進(jìn)行。文獻(xiàn)[17]介紹了基于無(wú)線傳感器網(wǎng)絡(luò)的康復(fù)治療用人體運(yùn)動(dòng)檢測(cè)裝置,應(yīng)用I2C總線FRAM芯片F(xiàn)M24V10(128 KB)來(lái)存儲(chǔ)各種配置參數(shù)和算法參數(shù)等,但沒(méi)有用來(lái)存儲(chǔ)實(shí)時(shí)采集數(shù)據(jù)。
隨著嵌入式系統(tǒng)對(duì)實(shí)時(shí)性處理要求越來(lái)越高,如何充分發(fā)揮FRAM存儲(chǔ)器的快速存儲(chǔ)、存儲(chǔ)穩(wěn)定的優(yōu)點(diǎn)來(lái)滿足實(shí)時(shí)性的要求成為一個(gè)現(xiàn)實(shí)的問(wèn)題。到目前為止,FRAM存儲(chǔ)器作為嵌入式系統(tǒng)的固態(tài)存儲(chǔ)器受到2個(gè)限制:
(1)并行FRAM存儲(chǔ)器,存取速度快,價(jià)格較高,在讀操作后必須有個(gè)預(yù)充電過(guò)程,來(lái)恢復(fù)數(shù)據(jù)位。與傳統(tǒng)SRAM在時(shí)序上有所不同而不能直接替換。
(2)串行FRAM存儲(chǔ)器,存取速度較快,價(jià)格較低,種類多,分I2C接口2線FM24系列和SPI接口3線FM25兩大系列,時(shí)序與傳統(tǒng)的24、25型的EEPROM芯片兼容,可以直接替換。SPI存取速度比I2C要快一個(gè)數(shù)量級(jí),還可實(shí)現(xiàn)全雙工。但串行FRAM的存儲(chǔ)數(shù)據(jù)查詢繁瑣,須加載到系統(tǒng)內(nèi)存RAM中才能查詢,軟件開銷較大。
電機(jī)驅(qū)動(dòng)總成測(cè)試儀是電機(jī)總成驅(qū)動(dòng)測(cè)試臺(tái)的配套設(shè)備,用于不定期抽檢一個(gè)批次電機(jī)驅(qū)動(dòng)總成的載重特性數(shù)據(jù),并長(zhǎng)期保存在FM24W256中,以備查詢,便于分析該批次電機(jī)驅(qū)動(dòng)總成的售后質(zhì)量。通常要求保存期限為1年~2年。電機(jī)驅(qū)動(dòng)總成的載重特性數(shù)據(jù)包括載重實(shí)驗(yàn)周期中的最大載重量、最大電機(jī)電流、最大電機(jī)外殼溫升,最大、最小、平均電機(jī)轉(zhuǎn)速。測(cè)試儀由單片機(jī)采集板、單片機(jī)顯示鍵盤板、熱敏微型打印機(jī)等組成,系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 電機(jī)驅(qū)動(dòng)總成載重測(cè)試儀系統(tǒng)結(jié)構(gòu)框圖
由圖1可見(jiàn),測(cè)試儀采用主、從雙單片機(jī)結(jié)構(gòu),滿足實(shí)時(shí)處理要求。主單片機(jī)控制A/D轉(zhuǎn)換器周期采樣稱重傳感器調(diào)理信號(hào),霍爾電流傳感器調(diào)理信號(hào),溫度傳感器調(diào)理信號(hào),累計(jì)單位時(shí)間內(nèi)電機(jī)轉(zhuǎn)速脈沖個(gè)數(shù),進(jìn)行標(biāo)度變換和BCD變換,變換為BCD碼格式測(cè)試數(shù)據(jù),快速發(fā)送給從單片機(jī)進(jìn)行數(shù)據(jù)緩存、實(shí)時(shí)顯示、數(shù)據(jù)保存。主、從單片機(jī)通過(guò)模擬SPI接口進(jìn)行實(shí)時(shí)通信。制定多字節(jié)同步字符通信協(xié)議和從機(jī)防死鎖機(jī)構(gòu),實(shí)現(xiàn)了同步、可靠通信。
內(nèi)存RAM開辟顯示數(shù)據(jù)緩存區(qū)和查詢數(shù)據(jù)緩沖區(qū)。顯示數(shù)據(jù)緩存區(qū)存放實(shí)時(shí)采集的測(cè)試數(shù)據(jù)、實(shí)時(shí)時(shí)鐘時(shí)間值和實(shí)時(shí)計(jì)算產(chǎn)生的載重特性數(shù)據(jù)。鍵盤與LCD交互菜單中的測(cè)試數(shù)據(jù)命令激活實(shí)時(shí)顯示測(cè)試數(shù)據(jù)、載重特性數(shù)據(jù)以及測(cè)試周期累計(jì)值。保存命令激活單片機(jī)與FM24W256之間建立I2C總線讀寫時(shí)序操作,將測(cè)試開始實(shí)時(shí)時(shí)鐘時(shí)間值,載重特性數(shù)據(jù)和測(cè)試周期累計(jì)值一起作為一條測(cè)試記錄保存到FM24W256指定存儲(chǔ)區(qū)。查詢命令激活單片機(jī)與FM24W256之間建立I2C總線讀時(shí)序操作,將FM24W256中對(duì)應(yīng)查詢關(guān)鍵字可能覆蓋的一個(gè)局部存儲(chǔ)塊中的所有記錄均讀到查詢數(shù)據(jù)緩沖區(qū)中,以便在內(nèi)存中高效查詢,快速找到相匹配的一條或若干條測(cè)試記錄,送LCD屏調(diào)閱顯示。打印命令可以將調(diào)閱的歷史記錄打印輸出。
串行FRAM存儲(chǔ)結(jié)構(gòu)和存取特性決定了查詢數(shù)據(jù)必須先讀出后加載到系統(tǒng)存儲(chǔ)級(jí)內(nèi)存才能查詢。串行FRAM的存取特性由串行FRAM串行數(shù)據(jù)幀格式、讀寫時(shí)序以及讀/寫速率共同決定。
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”由微控制器主動(dòng)發(fā)出,而不是由FM24W256發(fā)出。24C256采用頁(yè)讀操作,每當(dāng)連續(xù)讀到64個(gè)字節(jié)為1頁(yè)后,24C256自動(dòng)發(fā)出讀操結(jié)束的非應(yīng)答位“1”,因此,若需要連續(xù)讀64個(gè)以上的字節(jié)長(zhǎng)度時(shí),必須分頁(yè)讀,導(dǎo)致存取效率大大降低。
FM24W256的連續(xù)讀操作數(shù)據(jù)幀格式只須寫I2C總線的同一器件從地址,接著就可從現(xiàn)行存儲(chǔ)地址+1開始,順序讀后續(xù)地址存儲(chǔ)單元的字節(jié),連續(xù)讀串行數(shù)據(jù)幀格式如圖3所示。
圖3 FM24W256多字節(jié)讀數(shù)據(jù)幀格式
FM24W256現(xiàn)行存儲(chǔ)地址既可以由隨機(jī)讀操作確定,也可以由單字節(jié)寫操作時(shí)序確定。一般來(lái)說(shuō), FM24W256的連續(xù)讀操作與一次隨機(jī)讀操作配合使用,即先執(zhí)行一次隨機(jī)讀操作來(lái)確定要順序讀的首地址,即現(xiàn)行存儲(chǔ)地址。隨機(jī)讀操作數(shù)據(jù)幀格式不僅要求寫I2C總線的指定器件從地址,而且要求寫指定存儲(chǔ)單元的15位地址,最后讀出該存儲(chǔ)單元的8位數(shù)據(jù), FM24W256的隨機(jī)讀串行數(shù)據(jù)幀格式如圖4所示。
圖4 FM24W256隨機(jī)讀數(shù)據(jù)幀格式
4.2 串行FRAM讀/寫時(shí)序
與傳統(tǒng)24C256相比,FM24W256讀寫時(shí)序有2個(gè)重大改進(jìn):(1)在讀寫時(shí)序上不需要任何延時(shí)(即使延時(shí)也無(wú)妨),而24C256必須有至少6 ms以上的延時(shí)。(2)FM24C256的連續(xù)讀/寫時(shí)序?qū)樞蜃x字節(jié)長(zhǎng)度沒(méi)有限制,而24C256只限為64個(gè)字節(jié)為一頁(yè)的頁(yè)讀/寫,因此,FM24W256的連續(xù)讀字節(jié)長(zhǎng)度完全可以覆蓋整個(gè)芯片存儲(chǔ)容量,為鐵電存儲(chǔ)器的高效、快速查詢奠定了硬件基礎(chǔ)。FM24W256的I2C總線最高速率為1 MHz。FM24W256與單片機(jī)接口電路實(shí)例如圖5所示,其中,SCL是串行時(shí)鐘輸入線;SDA是串行輸入輸出數(shù)據(jù)線。
圖5 FM24W256接口電路實(shí)例
由于串行FRAM采用串行總線存取,數(shù)據(jù)讀/寫要經(jīng)歷一個(gè)串并轉(zhuǎn)換(讀)和并串轉(zhuǎn)換(寫)的過(guò)程,因此保存到FRAM的測(cè)試數(shù)據(jù),必須先緩存在RAM內(nèi)存中,查詢FM24W256中保存的測(cè)試紀(jì)錄,讀出并加載到RAM內(nèi)存中。制定最好的RAM和FRAM存儲(chǔ)協(xié)議就顯得非常關(guān)鍵。最好的存儲(chǔ)協(xié)議應(yīng)包括查詢關(guān)鍵字存取歷史記錄最快捷,最簡(jiǎn)單,適合嵌入式系統(tǒng)內(nèi)存空間相對(duì)較小,微處理器運(yùn)行速度相對(duì)較慢,不能實(shí)現(xiàn)復(fù)雜查詢算法的特點(diǎn),即要設(shè)計(jì)出相對(duì)簡(jiǎn)單,易于實(shí)現(xiàn)查詢算法的存儲(chǔ)協(xié)議。
5.1 內(nèi)存存儲(chǔ)協(xié)議
內(nèi)存存儲(chǔ)協(xié)議包括制定測(cè)試數(shù)據(jù)存儲(chǔ)格式, RAM和FRAM的映射圖等。
(1)測(cè)試數(shù)據(jù)存儲(chǔ)格式
測(cè)試數(shù)據(jù)除了應(yīng)包含實(shí)時(shí)測(cè)試數(shù)據(jù)外,還應(yīng)包含查詢關(guān)鍵字和索引號(hào),對(duì)于測(cè)試儀來(lái)說(shuō),測(cè)試數(shù)據(jù)都是時(shí)間觸發(fā)事件,最有效的查詢關(guān)鍵字就是測(cè)試時(shí)間信息,例如測(cè)試開始時(shí)刻的年、月、日、小時(shí)、分等。索引號(hào)包括月記錄號(hào)和日記錄號(hào)。假設(shè)測(cè)試數(shù)據(jù)包含實(shí)時(shí)測(cè)試數(shù)據(jù)字節(jié)和測(cè)試周期共計(jì)n個(gè)字節(jié),測(cè)試數(shù)據(jù)開始時(shí)間信息為5個(gè)字節(jié)(年、月、日、時(shí)、分),月記錄號(hào)為1個(gè)字節(jié),日記錄號(hào)為1個(gè)字節(jié),則一組測(cè)試數(shù)據(jù)占用的字節(jié)長(zhǎng)度為L(zhǎng)字節(jié)(n+ 7)。采用小端模式設(shè)計(jì)的測(cè)試數(shù)據(jù)存儲(chǔ)格式如圖6所示。
圖6 RAM緩沖器測(cè)試數(shù)據(jù)存儲(chǔ)格式
在圖6中,偏移地址+0的存儲(chǔ)單元在FRAM中映射為月記錄號(hào),即1個(gè)月中的記錄總條數(shù),應(yīng)根據(jù)FRAM存儲(chǔ)的現(xiàn)有月記錄號(hào)基礎(chǔ)上遞增更新回寫,到該保留字節(jié)。偏移地址+(L–1)的存儲(chǔ)單元在FRAM中映射為日記錄號(hào),即一天中的記錄總條數(shù),應(yīng)根據(jù)FRAM存儲(chǔ)的現(xiàn)有日記錄號(hào)基礎(chǔ)上遞增更新回寫到該保留字節(jié)。測(cè)試數(shù)據(jù)采用BCD碼格式存放是為了便于轉(zhuǎn)換成LCD碼顯示。
(2)RAM和FRAM的映射圖
在測(cè)試日期下,RAM緩沖器暫存的實(shí)時(shí)測(cè)試數(shù)據(jù),用保存命令陸續(xù)寫入FRAM的不同存儲(chǔ)空間。故只需設(shè)置一個(gè)內(nèi)存RAM緩沖器,但索引號(hào)要根據(jù)FRAM存放的對(duì)應(yīng)年、月上一條記錄的索引號(hào)來(lái)計(jì)算確定,并加載到RAM緩沖器測(cè)試數(shù)據(jù)的索引號(hào)單
元中。索引號(hào)的計(jì)算公式為:
若本測(cè)試數(shù)據(jù)的日號(hào)=上一條測(cè)試記錄的日號(hào),且上一條測(cè)試記錄的日記錄號(hào)<日記錄號(hào)上限,且上一條測(cè)試記錄的月記錄號(hào)<月記錄號(hào)上限,則本測(cè)試數(shù)據(jù)日記錄號(hào)=(上一條測(cè)試記錄的日記錄號(hào)+1),且本測(cè)試數(shù)據(jù)月記錄號(hào)=(上一條測(cè)試記錄的月記錄號(hào)+1),否則,本測(cè)試數(shù)據(jù)不能保存。
若本測(cè)試數(shù)據(jù)的日號(hào)(上一條測(cè)試記錄的日號(hào),且上一條測(cè)試記錄的月記錄號(hào)<月記錄號(hào)上限,則本測(cè)試數(shù)據(jù)日紀(jì)錄號(hào)=1,本測(cè)試數(shù)據(jù)月記錄號(hào)= (上一條測(cè)試記錄的月記錄號(hào)+1),否則,本測(cè)試數(shù)據(jù)不能保存。
RAM和FRAM的映射圖如圖7所示。RAM數(shù)據(jù)空間的查詢存儲(chǔ)塊內(nèi)存緩沖器用于緩存從FRAM讀出的多條測(cè)試記錄,便于高效查詢。
圖7 RAM和FRAM的映射圖
5.2 FRAM存儲(chǔ)協(xié)議
FRAM存儲(chǔ)協(xié)議包括制定測(cè)試記錄存儲(chǔ)格式,確定查詢存儲(chǔ)器塊容量,設(shè)置查詢索引號(hào)單元等。
(1)測(cè)試記錄存儲(chǔ)格式
由圖7可知,FRAM的測(cè)試記錄存儲(chǔ)格式就是內(nèi)存測(cè)試數(shù)據(jù)存儲(chǔ)格式的連續(xù)映射。由串行FRAM的存取特性可知,從FRAM存儲(chǔ)器中一次連續(xù)讀多條記錄的效率遠(yuǎn)遠(yuǎn)大于一次讀一條記錄。又從內(nèi)存存儲(chǔ)協(xié)議可知,每條記錄保存有月記錄號(hào)和日記錄號(hào),將一個(gè)月的所有記錄作為一個(gè)查詢存儲(chǔ)器塊一次連續(xù)讀出加載到內(nèi)存再查詢,綜合查詢效率最高。因此,可確定一個(gè)查詢存儲(chǔ)器塊容量Sb為:
其中,N為月記錄號(hào);D為日記錄號(hào)。
將FRAM存儲(chǔ)器按每年12個(gè)月劃分為12個(gè)存儲(chǔ)器塊,就可以制定出測(cè)試記錄存儲(chǔ)格式。以典型I2C總線串行FM24W256為例,存儲(chǔ)器容量為256 KB,即32 KB×8位。假設(shè)每條記錄占用的最大字節(jié)長(zhǎng)度L=32(20H),規(guī)定一天最多允許保存4條測(cè)試記錄,一個(gè)月最多允許測(cè)試保存40條記錄,則一個(gè)查詢存儲(chǔ)器塊的容量為500H。12個(gè)月占用的存儲(chǔ)器塊容量為3C00H。因此,FM24W256可以保存2年的測(cè)試記錄,將32 KB平分為2個(gè)16KB,低16KB (0x0000~0x3FFF)空間存儲(chǔ)奇年測(cè)試記錄,高16KB (0x4000~0x7FFF)空間存儲(chǔ)偶年測(cè)試記錄,例如: 2013年數(shù)據(jù)存于低16 KB內(nèi)存單元,2014年數(shù)據(jù)存于高16 KB內(nèi)存單元。為了簡(jiǎn)化查詢算法,將一年的12個(gè)月份分別對(duì)應(yīng)于12個(gè)不同的存儲(chǔ)器塊,每個(gè)存儲(chǔ)器塊的地址范圍是固定的,每個(gè)存儲(chǔ)器塊中每條記錄的地址范圍也是固定的。FM24W256奇年和偶年測(cè)試記錄存儲(chǔ)格式如圖8所示。
圖8 奇/偶年FM24W256測(cè)試記錄存儲(chǔ)格式
(2)查詢索引號(hào)單元
奇/偶年的12個(gè)查詢索引號(hào)單元用于保存12個(gè)月的測(cè)試記錄總數(shù),約定月測(cè)試記錄總數(shù)最大為40。奇/偶年碼存儲(chǔ)單元用于存放奇/偶測(cè)試年碼,每當(dāng)寫測(cè)試數(shù)據(jù)時(shí),先將測(cè)試年碼讀出,與RAM緩沖器中的測(cè)試數(shù)據(jù)奇/偶年碼存儲(chǔ)單元內(nèi)容比較,若不同,則將12個(gè)索引號(hào)單元清零。然后將奇/偶測(cè)試年碼存入奇/偶年碼存儲(chǔ)單元。若相同,讀取奇/偶測(cè)試年對(duì)應(yīng)月索引號(hào)單元中的內(nèi)容,若小于40,進(jìn)行加一回寫操作,若等于40,說(shuō)明該月記錄已滿。
由此可見(jiàn),滿足串行FRAM查詢的RAM加載存儲(chǔ)器容量下限值Sd為:
其中,Sb為FRAM的一個(gè)查詢存儲(chǔ)器塊容量。
最優(yōu)的查詢機(jī)制是根據(jù)查詢?nèi)掌?能快速定位相匹配的FRAM查詢存儲(chǔ)塊,讀出加載到查詢存儲(chǔ)塊內(nèi)存緩沖器,再執(zhí)行快速查詢算法就能以較少的軟件開銷,高效查詢到相匹配的測(cè)試記錄。
6.1 FRAM塊寫算法
將RAM緩沖器中的測(cè)試數(shù)據(jù)寫入FM24W256存儲(chǔ)器的塊寫算法步驟為:
(1)測(cè)試數(shù)據(jù)奇/偶年碼與從FM24W256奇/偶年號(hào)存儲(chǔ)單元讀出的年碼相比較,若相等,轉(zhuǎn)入步驟(2)。若不相等,表明測(cè)試數(shù)據(jù)年碼是新年碼,本
測(cè)試數(shù)據(jù)為欲寫的第1條記錄,則立即將新年碼寫入FM24W256的奇/偶年碼存儲(chǔ)單元,并將對(duì)應(yīng)該年的12個(gè)月索引號(hào)單元清零,轉(zhuǎn)入步驟(3)。
(2)從FM24W256對(duì)應(yīng)測(cè)試月索引號(hào)單元讀取月記錄號(hào)N,若N為0,表明該測(cè)試月尚無(wú)記錄被保存,轉(zhuǎn)入步驟(3)。若N=40,則說(shuō)明當(dāng)月記錄保存數(shù)已滿,則置本月記錄已滿標(biāo)志為1,退出塊寫操作。若N(40,則轉(zhuǎn)入步驟(4)。
(3)將測(cè)試數(shù)據(jù)月記錄號(hào)存儲(chǔ)單元和日記錄號(hào)存儲(chǔ)單元均置1,由月記錄號(hào)N和日記錄號(hào)D,計(jì)算測(cè)試數(shù)據(jù)保存到FM24W256存儲(chǔ)單元首址Aorg的公式為:
其中,OEorg為寫測(cè)試記錄的FM24W256奇/偶年碼首地址;L為每條記錄的字節(jié)長(zhǎng)度。以Aorg作為FM24W256塊寫子程序入口參數(shù)1,寫測(cè)試記錄RAM緩沖器首址作為入口參數(shù)2,記錄字節(jié)長(zhǎng)度L作為入口參數(shù)3,調(diào)用FM24W256塊寫子程序,塊寫算法結(jié)束。
(4)從FM24W256對(duì)應(yīng)測(cè)試月的上一條測(cè)試記錄的日存儲(chǔ)單元讀取日碼,與測(cè)試數(shù)據(jù)的日碼相比較,若相等,表明測(cè)試數(shù)據(jù)與上一條保存的測(cè)試記錄屬于同天測(cè)試,則再?gòu)腇M24W256保存的上一條測(cè)試記錄的日記錄號(hào)單元讀取日記錄號(hào),若該日記錄號(hào)=4,說(shuō)明當(dāng)日記錄保存數(shù)已滿,則立即置“本日記錄已滿”標(biāo)志為1,退出塊寫操作。若該日記錄號(hào)(4,表明本條測(cè)試記錄可以寫入FM24W256,故將該日記錄號(hào)加1,回寫入RAM緩沖器測(cè)試數(shù)據(jù)的日記錄號(hào)單元,同時(shí),從FM24W256保存的上一條測(cè)試記錄的月記錄號(hào)單元讀取月記錄號(hào),將該月記錄號(hào)加1,回寫到RAM緩沖器測(cè)試數(shù)據(jù)中月記錄號(hào)單元,轉(zhuǎn)入步驟(5)。若不相等,表明待寫測(cè)試數(shù)據(jù)與上一條保存記錄不屬于同一天測(cè)試,則將RAM緩沖器測(cè)試數(shù)據(jù)的日記錄號(hào)存儲(chǔ)單元置1,同時(shí),從FM24W256上一條測(cè)試記錄的月記錄號(hào)單元讀出月記錄號(hào),將該月記錄號(hào)加1,回寫入RAM緩沖器測(cè)試數(shù)據(jù)的月記錄號(hào)單元,轉(zhuǎn)入步驟(5)。
(5)由式(3)計(jì)算Aorg,作為FM24W256塊寫子程序入口參數(shù)1,測(cè)試數(shù)據(jù)RAM緩沖器首址作為入口參數(shù)2,測(cè)試數(shù)據(jù)字節(jié)長(zhǎng)度L作為入口參數(shù)3,調(diào)用FM24W256塊寫子程序。最后,把FM24W256對(duì)應(yīng)測(cè)試月的月索引號(hào)單元內(nèi)容讀出,加1再寫回,塊寫算法結(jié)束。
6.2 FRAM塊讀算法
為了降低查詢FM24W256存儲(chǔ)器數(shù)據(jù)的復(fù)雜度,把存放在FM24W256中對(duì)應(yīng)查詢?cè)碌乃袦y(cè)試記錄,即1個(gè)查詢存儲(chǔ)器塊的全部測(cè)試記錄讀出加載到RAM查詢塊內(nèi)存緩沖器,再進(jìn)行日碼匹配查詢。故只須利用查詢年、月信息來(lái)計(jì)算FM24W256塊讀首地址,將塊長(zhǎng)度為500H的存儲(chǔ)空間的內(nèi)容順序讀出并順序加載到RAM指定查詢塊內(nèi)存緩沖器。一個(gè)查詢存儲(chǔ)器塊讀出加載到RAM查詢塊內(nèi)存緩沖器的塊讀算法步驟如下:
(1)查詢?nèi)掌诘哪甏a與從FM24W256年碼存儲(chǔ)單元讀出年碼相比較,若相等,轉(zhuǎn)入步驟(2)。若不相等,說(shuō)明查詢的年碼不在存儲(chǔ)范圍,立即將無(wú)記錄標(biāo)志位置1退出查詢,通知主程序報(bào)警顯示“無(wú)此年記錄”。
(2)從FM24W256對(duì)應(yīng)查詢?cè)碌脑滤饕?hào)單元讀出索引號(hào)N,若N=0,說(shuō)明本月無(wú)任何記錄,立即置無(wú)記錄標(biāo)志位為1,退出查詢,通知主程序報(bào)警顯示“無(wú)此月記錄”。若N(0,轉(zhuǎn)入步驟(3)。
(3)由查詢?cè)掠?jì)算存放在FM24W256的查詢存儲(chǔ)器塊首址Borg的公式為:
以Borg作為FM24W256塊讀子程序的入口參數(shù)1,RAM查詢塊內(nèi)存緩沖器首地址作為入口參數(shù)2,讀塊長(zhǎng)度N×500H作為入口參數(shù)3,調(diào)用FM24W256塊讀子程序,塊讀算法結(jié)束。
6.3 內(nèi)存映射快速查詢算法
由于每月抽檢測(cè)試的日期是不定的,每月測(cè)試記錄存儲(chǔ)空間第1個(gè)測(cè)試記錄存儲(chǔ)區(qū)可以存放任一日的測(cè)試記錄,這就使RAM查詢塊加載緩沖器的記錄查詢不能采用二分法等傳統(tǒng)快速縮小查詢區(qū)間的查詢法,只能用順序查詢。但可以利用月索引號(hào)N作為查詢次數(shù)計(jì)數(shù)器,大于N條記錄對(duì)應(yīng)的緩沖器空間就不需要查詢,從而可以加快查詢速度。查詢存儲(chǔ)塊內(nèi)存緩沖器快速查詢算法步驟如下:
(1)查詢指針初始化指向RAM查詢塊內(nèi)存緩沖器第1條記錄的“日碼”存放單元首址,查詢?cè)掠涗浻?jì)數(shù)器初始化初值為月索引號(hào)N。查詢結(jié)果指針初始化指向查詢結(jié)果匹配記錄指針表首址,查詢記錄匹配計(jì)數(shù)器始化初值為0。
(2)由查詢指針順序讀取每條記錄的“日、月、年”碼與鍵盤輸入需查詢記錄的“日、月、年”碼逐一相比較,若相等,轉(zhuǎn)入步驟(3)。若不相等,轉(zhuǎn)入步驟(4)。
(3)將查詢記錄匹配計(jì)數(shù)器加1,查詢指針存入查詢結(jié)果指針表中,查詢結(jié)果指針+2指向查詢結(jié)果匹配記錄指針表的下一個(gè)指針單元首址。判月記錄計(jì)數(shù)器當(dāng)前值是否小于等于4,若小于等于4,則立即將月記錄計(jì)數(shù)器減1,轉(zhuǎn)入步驟(4)。若大于4,則立即將月記錄計(jì)數(shù)器置為3,轉(zhuǎn)入步驟(4),因?yàn)槿諟y(cè)試記錄是順序存放的,而且協(xié)議規(guī)定一天只允許保存4條測(cè)試記錄,所以找到第1條日記錄,只要再
順序查詢3條記錄的存儲(chǔ)空間就可以快速結(jié)束查詢,實(shí)現(xiàn)了快速查詢。
(4)查詢指針+每條記錄長(zhǎng)度,指向下一條記錄日碼存放單元首址,記錄計(jì)數(shù)器減1,判斷記錄計(jì)數(shù)器是否為0,若不等于0,轉(zhuǎn)到步驟(2),若等于0,轉(zhuǎn)到步驟(5)。
(5)查詢記錄匹配計(jì)數(shù)器的非零數(shù)字表示查詢到的某天測(cè)試記錄總數(shù)。查詢結(jié)果匹配記錄指針表存放每條匹配記錄的日碼存放單元首址,查詢算法結(jié)束。顯示程序就可以根據(jù)查詢結(jié)果來(lái)調(diào)用測(cè)試記錄顯示和打印。
6.4 RAM與FRAM數(shù)據(jù)一致性保護(hù)
若微處理器正在執(zhí)行FRAM塊寫測(cè)試數(shù)據(jù)操作,突然發(fā)生電源掉電故障,就有可能導(dǎo)致RAM緩沖器測(cè)試數(shù)據(jù)寫入FRAM不完整。為了保障斷電瞬間RAM緩沖器的測(cè)試數(shù)據(jù)與FRAM保存的測(cè)試記錄一致,設(shè)計(jì)一個(gè)電源故障檢測(cè)電路,當(dāng)電源電壓跌落到掉電故障電平以上某一預(yù)警值時(shí),就立即向微處理器發(fā)出NMI(不可屏蔽中斷)或高優(yōu)先級(jí)中斷請(qǐng)求,微處理器響應(yīng)中斷后,立即判斷當(dāng)前是否正在寫測(cè)試數(shù)據(jù),若是,立即停止寫操作,并將RAM緩沖器測(cè)試數(shù)據(jù)立即保存到后備電池保護(hù)RAM中,以便電源故障解除后,根據(jù)重寫標(biāo)志,恢復(fù)數(shù)據(jù),重寫測(cè)試數(shù)據(jù)。一般來(lái)說(shuō),實(shí)時(shí)時(shí)鐘芯片電路都內(nèi)嵌有后備電池保護(hù)RAM電路。設(shè)計(jì)的電源故障檢測(cè)電路如圖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時(shí),MAX813L的電源故障輸出引腳PFO產(chǎn)生一個(gè)低電平脈沖,將PFO連接到微處理器的NMI (不可屏蔽中斷輸入)引腳或高優(yōu)先級(jí)的可屏蔽中斷引腳上,觸發(fā)電源故障中斷請(qǐng)求。
圖9 電源故障檢測(cè)電路
針對(duì)串行FRAM存儲(chǔ)器占用I/O資源少、存取速度快、讀寫無(wú)限次等突出優(yōu)點(diǎn),本文提出采用串行FRAM存儲(chǔ)器構(gòu)建嵌入式系統(tǒng)固態(tài)存儲(chǔ)器的實(shí)用方法。通過(guò)制定FRAM與系統(tǒng)RAM相結(jié)合的最優(yōu)存儲(chǔ)協(xié)議,設(shè)計(jì)出串行FRAM存儲(chǔ)器快速查詢算法。電機(jī)驅(qū)動(dòng)總成載重測(cè)試儀工業(yè)性實(shí)驗(yàn)表明,FRAM存儲(chǔ)器保存的測(cè)試數(shù)據(jù)安全可靠,歷史查詢快速準(zhǔn)確,滿足嵌入式系統(tǒng)長(zhǎ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)洪春.非易失存儲(chǔ)器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ù)存儲(chǔ)單元設(shè)計(jì)與實(shí)現(xiàn)[J].數(shù)據(jù)采集與處理,2010,25(z1): 110-115.
[7]陸 浩,王振占.高速大容量固態(tài)存儲(chǔ)器設(shè)計(jì)[J].計(jì)算機(jī)工程,2011,37(15):226-227,231.
[8]梁亞軍,劉培基.雙口RAM用于閃存實(shí)時(shí)數(shù)據(jù)存儲(chǔ)研究[J].青島大學(xué)學(xué)報(bào):工程技術(shù)版,2008,33(2): 18-21.
[9]2013年Cypress(原RAMTRON)鐵電存儲(chǔ)器選型表[EB/OL].(2013-09-23).http://pan.baidu.com/ share/link shareid=4286959507&uk=4147947078&fid =4137793134.
[10]孫宇航,秦貴和,于新波,等.嵌入式Linux下的FRAM驅(qū)動(dòng)程序設(shè)計(jì)[J].計(jì)算機(jī)工程,2011,37(11): 264-266.
[11]林春平,張興龍.鐵電存儲(chǔ)器在機(jī)艙油氣濃度數(shù)據(jù)記錄儀的應(yīng)用[J].中國(guó)航海,2010,33(1):30-32,69.
[12]黃建軍,張志安,陳 俊,等.基于鐵電存儲(chǔ)器的彈載數(shù)據(jù)高速存儲(chǔ)系統(tǒng)研究[J].測(cè)試技術(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)存儲(chǔ)器構(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