2 AT45DB161B串行存儲器
ATMEL公司的Data-Flash產(chǎn)品的代表型號為AT45DBxxxx,。此系列存儲器容量較大(從1~256MB);封裝尺寸小,,最小封裝型式(CBGA)的尺寸為6 mm×8 mm:可采用SPI接口進(jìn)行讀寫,;硬件連線少;內(nèi)部頁面尺寸較小,,8 MB容量的頁面尺寸為264字節(jié),,16 MB和32 MB容量的頁面尺寸為512字節(jié),64 MB容量的頁面尺寸為1056字節(jié),,128 MB容量和256 MB容量的頁面尺寸為2112字節(jié),。另外,AT45DBxxxx系列存儲器內(nèi)部有兩個與主存頁面大小相同的SRAM緩存,,可提高系統(tǒng)的靈活性,,簡化數(shù)據(jù)的讀寫過程。AT45DBxxxx系列存儲器的工作電壓只需2.7~3.6 V,;整個芯片的功耗也較小,;典型讀取電流為4 mA,,待機電流僅為2 μA:讀寫的速度最大為20 Mbps。
AT45DB161B的容量為16 MB,。分成4096頁,,每頁有528個字節(jié)[3],。另外還有兩個528字節(jié)的數(shù)據(jù)緩沖器SRAM。在對主存儲器進(jìn)行操作時,,這兩個SRAM也可以接收數(shù)據(jù),。因此,和串行EEP-ROM相比,。該器件可大大縮短讀寫時間,。而采用SPI總線接口和并行的flash相比.其速度并不慢,而且抗干擾能力也比較強,。
2.1 AT45DB161B引腳接口定義
表1所列是AT45DB161B的部分接口引腳定義,。其中CS為片選信號,RESET為復(fù)位端,,SCK,、SI、SO為SPI總線,,RDY/BUSY為忙信號,,WP為前256頁的寫保護(hù)。
SPI接口是一種通用串行接口總線,,利用SCK,、SI和SO三根線可進(jìn)行數(shù)據(jù)的讀/寫控制。數(shù)據(jù)以字節(jié)(8 bit)為單位,。其中,,SCK為時鐘信號,SI和SO為數(shù)據(jù)輸人和輸出線,。
AT45DB161B僅支持SPI模式0和3,。在這兩種模式下。SCK信號的上升沿觸發(fā)數(shù)據(jù)輸入,,下降沿觸發(fā)數(shù)據(jù)輸出,,二者的區(qū)別是SCK的起始電平不同。AT45DB161B復(fù)位時,,默認(rèn)為SPI模式3,。
2.2 指令
除了存儲單元外,AT45DB161B內(nèi)部還包括命令用戶接口CUI(Command User Interface)和狀態(tài)機,。CUI接收用戶的軟件指令,,以將其翻譯成狀態(tài)機內(nèi)部操作碼并進(jìn)行命令的有效性檢驗。狀態(tài)機則可控制存儲器所有的內(nèi)部操作,。器件內(nèi)部包含一個8位的狀態(tài)寄存器,,可用來指示設(shè)備的操作狀態(tài)。向存儲器輸入讀狀態(tài)寄存器命令可將狀態(tài)寄存器的數(shù)據(jù)讀出。下面簡單介紹模式SPI0和模式SPI3的讀寫存儲單元和狀態(tài)寄存器指令,。 (1)讀狀態(tài)寄存器
發(fā)送命令字0XD7,。可以直接得到狀態(tài)字(一個字節(jié)),,其格式如下:
其中RDY/BUSY為1時表示不忙,,可以接收下一條指令;為0則表示忙,。
設(shè)計時可通過讀狀態(tài)寄存器或SO端口來判斷前一條指令是否讀寫完畢,。當(dāng)存儲器不忙時,SO端口從O變到1,。此外,,RDY/BUSY端口也可以用來判斷前一條指令是否讀寫完畢。
COMP用來指示主存儲單元數(shù)據(jù)和緩沖器中數(shù)據(jù)的比較結(jié)果:COMP為0表示相等,。COMP為1表示不同,。
Bit5一Bit2可表示存儲器的容量大小。
(2)讀存儲器指令
讀存儲器的數(shù)據(jù)有兩種方式,,具體如圖1所示,。其中一種是直接讀存儲器任意地址的數(shù)據(jù),這可用指令D2H加3個字節(jié)的Dataflash地址再加上四個字節(jié)的空數(shù)據(jù)來實現(xiàn),,以SPI模式3為例,,其工作時序如圖2所示。
另一種是通過緩沖器1(2)來讀存儲器上某一頁的數(shù)據(jù),。該方式可分兩個步驟:一是將數(shù)據(jù)讀到數(shù)據(jù)緩沖器1(2),,即指令53H(55H)+3個字節(jié)的Dataflash中的頁地址(在任意SCK的模式下);二是讀數(shù)據(jù)緩沖器1(2),,這可用指令D4H(D6H)+3個字節(jié)地址(主要表示從數(shù)據(jù)緩沖器的哪個地址開
始讀)+1個字節(jié)空數(shù)據(jù)來實現(xiàn),。以SPI模式3為例的讀數(shù)據(jù)緩沖器時序如圖3所示。
(3)向存儲器寫數(shù)據(jù)
寫存儲器也有兩種模式,,具體如圖4所示,。其中一種是通過緩沖器1(2)直接寫到存儲器中;另一種是先寫到緩沖器,,再將緩沖器的數(shù)據(jù)寫到存儲器中,。具體的命令過程如圖5所示。
上述幾個命令的格式都是一個字節(jié)的命令+3個字節(jié)的地址,。
3 W77E58和AT45DB161B的接口電路
W77E58是華邦電子公司(WinBond)推出的高速增強型:MCS-51系列單片機,。使用W77E58的系統(tǒng)速度要比傳統(tǒng)51系列單片機快2.5倍。工作頻率為40 MHz的W77E58相當(dāng)于100 MHz的8051,,加上其內(nèi)置32 KB可重復(fù)編程的Flash EPROM和1KB用MOV指令訪問的內(nèi)部SRAM(節(jié)省了16條數(shù)據(jù)/地址I/O口線),,以及2個增強型全雙工串行口和較低的價格,,W77E58無疑是一款高性能、多功能,、的高集成度8位微控制器,非常適合高速,、雙串口,、外圍簡捷、低成本系統(tǒng),。其抗干擾性能和加密性能相對也是比較好的[4],。
采用W77E58和AT45DB161B進(jìn)行接口的汽車行駛記錄儀的電路連接如圖6所示。
4 軟件實現(xiàn)
由于W77E58沒有SPI總線,,因而需要用軟件來實現(xiàn),,下面給出SPI總線模擬程序和對AT45DB161B的讀寫程序。
該軟件采用Keil C編程,,其源程序代碼如下:
4.1 SPI總線的模擬
(1)從SPI上讀一個字節(jié)
4.2 對AT45DB161B的讀寫
(2)寫Datanash中的數(shù)據(jù)
下面的程序采用先寫到緩沖器,,再將緩沖器的數(shù)據(jù)寫到存儲器中的方式存儲數(shù)據(jù):