Flash M25P64驅(qū)動開發(fā)與應(yīng)用
隨著信息產(chǎn)業(yè)的飛速發(fā)展,以微處理器為核心的嵌入式系統(tǒng)在智能化儀表、實時控制等應(yīng)用中占有重要地位。而在許多實際應(yīng)用中經(jīng)常要求支持大容量數(shù)據(jù)存儲功能。意法半導(dǎo)體公司推出的一款8 M字節(jié)串行Flash存儲器M25P64則為大容量數(shù)據(jù)存儲提供了一種解決方案。在此詳細(xì)介紹該M25P64型Flash存儲器的主要特點,工作原理,驅(qū)動程序開發(fā)以及典型應(yīng)用實例。
2 M25P64概述
M25P64是一款帶有先進(jìn)寫保護(hù)機(jī)制和高速SPI總線訪問的8 M字節(jié)串行Flash存儲器,該存儲器主要特點:8 M字節(jié)的存儲空間;寫入1頁數(shù)據(jù)所需時間為1.4 ms(典型值);能單塊擦除和整塊擦除:2.7~3.6 V單電源供電電壓;SPI總線和50 MHz數(shù)據(jù)傳輸時鐘頻率;每扇區(qū)擦寫次數(shù)保證10萬次、數(shù)據(jù)保存期限至少20年。該款器件特別適用于一體化打印機(jī)、PC主板、機(jī)頂盒、CD唱機(jī)和DVD視盤機(jī)、數(shù)字電視、數(shù)碼相機(jī)、圖形卡和平面顯示器等各種應(yīng)用的代碼和數(shù)據(jù)存儲需求。
M25P64采用SOl6封裝,其引腳排列圖如圖1所示。其部分主要引腳功能描述如下:引腳Q:輸出串行數(shù)據(jù)。引腳D:輸入串行數(shù)據(jù)。引腳C:串行時鐘信號輸入。引腳S:片選,該引腳低電平有效。若為高電平,串行數(shù)據(jù)輸出(Q)為高阻抗?fàn)顟B(tài)。引腳HOLD:控制端,暫停串行通信。在HOLD狀態(tài)下,串行數(shù)據(jù)輸出(Q)為高阻抗,時鐘輸入(C)和數(shù)據(jù)輸入(D)無效。引腳W:寫保護(hù)端,能夠限制寫指令和擦除指令的操作區(qū)域,低電平有效。
3 M25P64工作原理
M25P64寫入一個字節(jié)數(shù)據(jù)需寫使能(WREN)和寫入(PP)指令,后者具有4個字節(jié)。采用這兩個指令實現(xiàn)單頁編程。對于某個單字節(jié)空間的操作,在使用PP指令之前需要對其擦除(FFh)。擦除操作可通過單塊擦除指令(SE)和整塊擦除(BE)來完成。擦除之前需要先執(zhí)行WREN指令。當(dāng)片選S信號為低電平,則選中該器件,此時處于有效電源模式;當(dāng)片選S信號為高電平,器件未被選中,但能在所有內(nèi)部指令周期(寫入,擦除,寫狀態(tài)寄存器)完成前保持有效電源模式。等指令周期完成則進(jìn)入備用電源模式。通過特殊指令來讀取或設(shè)置狀態(tài)寄存器內(nèi)的狀態(tài)位和控制位,實現(xiàn)相應(yīng)操作。
在該器件所有輸入輸出的指令、地址和數(shù)據(jù)中,數(shù)據(jù)置于首位。當(dāng)片選信號被拉為低電平,在時鐘信號的第一個下降沿開始采樣數(shù)據(jù)輸入信號。每個指令序列都是以單字節(jié)指令代碼開頭,緊接著就是地址或數(shù)據(jù)。在讀取數(shù)據(jù)、快速讀取數(shù)據(jù)、讀狀態(tài)寄存器、讀標(biāo)識和讀電子簽名時,數(shù)據(jù)輸出序列緊隨輸入指令序列。當(dāng)數(shù)據(jù)輸出序列的所有數(shù)據(jù)位都輸出后,片選信號置為高電平。而在頁面數(shù)據(jù)寫入、單塊擦除、整塊擦除、寫狀態(tài)寄存器、寫使能和寫無效時,片選信號必須在一個字節(jié)內(nèi)置為高電平。否則,指令不執(zhí)行。也就是說,拉低片選信號后,時鐘信號必須是8的整數(shù)倍。在寫狀態(tài)寄存器周期、數(shù)據(jù)寫入周期或者擦除周期,則忽略任何對存儲空間的訪問,并不會對這些周期產(chǎn)生影響。表l為M25P64的指令表。
(1)寫使能(WREN) 寫使能指令用于設(shè)置內(nèi)部寫使能鎖存器位。在頁面數(shù)據(jù)寫入、單塊擦除、整塊擦除和寫狀態(tài)寄存器之前,必須先執(zhí)行寫使能。當(dāng)片選信號拉低后,就開始執(zhí)行寫使能指令,接著傳輸指令。指令發(fā)送完后,片選信號置為高電平。寫使能時序如圖2所示。
(2)讀狀態(tài)寄存器(RDSR)幾乎在任何時刻都能讀取狀態(tài)寄存器的值,甚至器件處于寫入數(shù)據(jù)、擦除或?qū)憼顟B(tài)寄存器周期時。此時建議在傳輸新指令之前應(yīng)先檢查WIP位。狀態(tài)寄存器的格式如表2所示。
表2中,WIP位能夠確定存儲空間是否處于寫狀態(tài)寄存器、寫入或擦除周期。WIP為“1”時則處于以上幾個周期。WEL位能夠確定內(nèi)部寫使能鎖存器的狀態(tài)。寫入“1”時置位。寫入“0”時,寫狀態(tài)寄存器、數(shù)據(jù)寫入和擦除指令都無效。BP2,BPl,BPO位確定軟件寫保護(hù)的區(qū)域大小,并且是非易失性的。SRWD位用于在寫無效位和寫保護(hù)引腳工作時可使該器件處于硬件保護(hù)模式。此模式下,3個非易失性位變?yōu)橹蛔x位,并且寫狀態(tài)寄存器指令不會執(zhí)行。
(3)讀取數(shù)據(jù)(READ) 首先需將片選信號拉為低電平,接著讀取數(shù)據(jù)指令和3個字節(jié)的地址(A23~A0)。然后通過數(shù)據(jù)輸出引腳(O)輸出該地址存儲內(nèi)容。地址的首字節(jié)可以是任意值。在輸出每個字節(jié)數(shù)據(jù)后,地址自動加1,跳至下一地址。因此,整個存儲空間的數(shù)據(jù)讀取可通過一個簡單的數(shù)據(jù)讀取指令(READ)完成。當(dāng)達(dá)到最高地址時,地址計數(shù)器自動清零。片選信號置為高電平可終止數(shù)據(jù)讀取指令(READ)。數(shù)據(jù)輸出的任何時候,片選信號都置為高電平。該器件處于擦除或數(shù)據(jù)寫入周期時,數(shù)據(jù)讀取指令無效并且對當(dāng)前周期無任何影響。其頁面數(shù)據(jù)寫入指令時序如圖3所示。
(4)頁面數(shù)據(jù)寫入(PP)執(zhí)行PP指令之前,必須先執(zhí)行寫使能指令。寫使能指令解碼后,器件設(shè)置為寫使能鎖存器。片選信號必須拉低,接著是PP指令代碼、3字節(jié)的地址和數(shù)據(jù)輸入(至少一個字節(jié))。如果地址的低8位(A7~AO)不全是O而寫入的數(shù)據(jù)字節(jié)超出當(dāng)前頁的地址,超出部分則從下一頁首地址開始寫入。在整個數(shù)據(jù)寫入時序中,片選信號必須拉低。如果寫入的數(shù)據(jù)字節(jié)數(shù)大于256,則先前所鎖存的數(shù)據(jù)被丟棄。將正確寫入最后256態(tài)寄存器核對WIP位的值。若為1,則表明處于自定時數(shù)據(jù)寫入周期;若為0,則此周期完成。如果某一頁受到塊保護(hù)(BP2,BPl,BP0位),則不能執(zhí)行對此頁的數(shù)據(jù)寫入操作。按照上述指令操作,能夠獲得驅(qū)動程序的流程圖。圖4為數(shù)據(jù)寫入(PP)操作的程序流程。
4 典型應(yīng)用
LPC2138是基于支持實時仿真和嵌入式跟蹤的32/16位ARM7TDMIS CPU的微控制器,帶有512 KB高速Flash和32KB的SRAM。128位寬度的存儲器接口和獨特的加速結(jié)構(gòu)使32位代碼能夠在最大時鐘速率下運行,非常適合嵌入式產(chǎn)品。LPC2138帶有SPI接口。該器件與M25P64連接所構(gòu)成的存儲系統(tǒng)簡單易行,使用方便。圖5是其硬件連接圖。M25P64的片選信號(S)與LPC2138的PO.20相連,寫保護(hù)端(W)與P0.2l相連。PO.20和PO.2l作為普通I/O端口。M25P64的串行數(shù)據(jù)輸出(Q)、串行數(shù)據(jù)輸入(D)和串行時鐘輸入(C)與SPI接口的輸入輸出分別對應(yīng)相連。由M25P64指令時序圖可知:片選信號(S)在指令執(zhí)行之前為低電平,等到指令執(zhí)行完則才置為高電平。因此,與其連接的PO.20必須是普通的I/O端口功能,而不是引腳第2功能SSEL1。一般情況下,與寫保護(hù)端(W)相連的PO.2l置低電平即可。該電路圖連接簡單。試驗表明由LPC2138與M25P64連接所構(gòu)成的存儲系統(tǒng)能夠有效穩(wěn)定運行。
5 結(jié)語
本文介紹了一款新型的串行Flash存儲器M25P64的主要特點,工作原理,驅(qū)動程序的開發(fā),并且設(shè)計了一個典型的M25P64應(yīng)用系統(tǒng)。該系統(tǒng)結(jié)構(gòu)簡單、運行穩(wěn)定,能實現(xiàn)大容量數(shù)據(jù)存儲。