0 引言
隨著數據處理系統智能化程度的越來越高,經常需要在無人干預的情況下,自動加載某些數據或參數到系統工作單元,以保證系統的正常工作。這些數據或參數通常都以數據文件形式保存在大容量、低功耗、可快速重復擦寫的存儲器中,而且掉電后數據不丟失,以便用戶根據需要隨時讀取。S29AL016D70能很好的滿足這些需求。
1 閃存S29AL016D簡介
1.1 主要性能
S29AL016D70是Spansion公司生產的容量為2Mx8 bit/1 Mx16 bit的閃存器件,該器件采用3 V供電,訪問時間為70 ns,工作溫度范圍為-40℃~125℃,靜態(tài)電流200 nA,讀數據電流為9 mA,擦寫數據電流為20 mA可擦寫次數在一百萬次以上,具有存儲容量大,速度快,功耗低等優(yōu)點。S29AL016D的芯片邏輯圖如圖1所示。其中,A0~A19和D0~D15分別為地址線和數據線,CE為片選信號,低有效;OE為輸出使能信號,低有效;WE是寫選通信號,低有效;BYTE為8位或16位數據模式選擇端,低電平為8位,高電平為16位。采用8位模式時,DO~D7為有效數據線,D15為地址線:RY/BY為準備好和忙狀態(tài)輸出。S29AL016D70內部包括35個數據段(Sector),其中段0到段30為64 KB,段31為32KB,段32、33為8 KB,段34為16 KB。
1.2 操作模式
S29AL016D70的操作模式如表1所列,實際工作中,經常用到的操作包括片擦除、段擦除、寫入數據、讀出數據等。
2 應用設計
2.1 硬件設計
根據設計需要,可利用數字信號處理器DSP通過雙口RAM和232串行通信獲得數據,并將數據保存在FLASH對應地址。
FLASH的數據讀寫有8位數據讀寫和16位數據讀寫兩種方式。
利用232串口通信時,收發(fā)的數據大多都是8位。若在16位數據工作模式下,直接寫入要浪費一半存儲區(qū),否則需將兩個8位字節(jié)數據拼成一個16位字數據再寫入,也會消耗很多工作時間,而采用8位數據工作模式,則不需要進行數據拼接,使用比較方便。因此,實際工作中,大多采用8位數據工作模式。同樣,雙口RAM也采用8位數據的雙口RAM,設計中可使用IDT7132。圖2所示是其硬件連接原理圖。
工作中,若采用16位數據工作模式,只需將FLASH芯片的BYTE腳接至高電平即可。
2.2 操作模式
要向FLASH寫入數據,必須先對FLASH進行擦除操作。擦出操作可通過給FIASH芯片寫入擦除指令時序來完成,擦除的結果是將FLASH存儲區(qū)中所有數據變?yōu)?xff(8位)或0xffff(16位),這樣,可以方便地寫入數據。[!--empirenews.page--]
擦除操作分為片擦除和段擦除兩種。片擦除為整片擦除,段擦除只擦除指定段。為使用方便,在擦除某段數據時,應保證其他段數據不受影響。因此,軟件多采用段擦除模式。其代碼如下:
段擦除函數(flash基地址為0xb0000000);
void erase_flash(unsigned int sector_num)//sector為段號片擦除函數可參照編寫
{
將數據保存在FLASH中后,若要對擦除后的段數據地址執(zhí)行寫操作,也可以通過給芯片寫入編程操作時序來完成。寫操作的結果是將地址總線指定地址的數據相應位1變?yōu)?,通俗的說,就是擦除后的數據各位都為1,寫操作是將待寫入數據的不為1的位變?yōu)?。其寫操作函數如下:
[!--empirenews.page--] |
進行擦除和寫入操作時,應在進行寫入時序操作時,對寄存器的偏移地址左移一位進行操作,這是因為8位數據工作模式下,芯片地址線的最低位為A-1,而處理器地址線的最低位為A0;若是16位數據操作模式,尋址寄存器時,則不需要進行移位操作。
此外,16位數據操作模式和8位數據操作模式在編寫指令時序時也有區(qū)別,即寫入寄存器的指令的位數要和數據位數相同,如8位指令為:*(int*)(Oxb0000000+(0x555<<1))=0x80,而16位指令應為:*(int*)(0xb0000000+0x555)=0x8080。
3 結束語
應用本文的設計可以成功地完成對FLASH的各種操作,實現向FLASH中保存數據的功能。事實上,各廠家生產的FLASH在性能上和使用方法都有所不同,S29AL016D除了速度快、容量大之外,還有一個特點就是可選擇性地進行8位或16位數據操作。但在軟硬件設計上要做些相應改變,筆者根據工作實踐寫出一點體會,希望能給同行提供幫助。