- 相關推薦
串行DataFlash存儲器及其與單片機的接口
摘要:DataFlash是Atmel公司新推出的大容量串行Flash存儲器產品,具有體積小、容量大、功耗低和硬件接口簡單的特點,非常易于構成微型測量系統。本文重點介紹此類存儲器與單片機的接口,并給出實際的電路設計和軟件代碼示例。關鍵詞:串行Flash存儲器接口AT45DB161B
1概述
Flash存儲器按其接口可分為串行和并行兩大類。串行Flash存儲器大多采用I2C接口或SPI接口進行讀寫;與并行Flash存儲器相比,所需引腳少、體積小、易于擴展、與單片機或控制器連接簡單、工作可靠,所以串行Flash存儲器越來越多地用在各類電子產品和工業測控系統中。
DataFlash是美國Atmel公司新推出的大容量串行Flash存儲器產品,采用NOR技術制造,可用于存儲數據或程序代碼,其產品型號為AT45DBxxxx。此系列存儲器容量較大,從1Mb~256Mb;封裝尺寸小,最小封裝型式(CBGA)尺寸為6mm×8mm;采用SPI接口進行讀寫,硬件連線少;內部頁面尺寸較小,8Mb容量的頁面尺寸為264字節,16Mb和32Mb容量的頁面尺寸為512字節,64Mb容量的頁面尺寸為1056字節,128Mb容量和256Mb容量的頁面尺寸為2112字節。另外,AT45DBxxxx系列存儲器內部集成了兩個與主存頁面相同大小的SRAM緩存,極大地提高了整個系統的靈活性,簡化了數據的讀寫過程。此外,AT45DBxxxx系列存儲器工作電壓較低,只需2.7~3.6V;整個芯片的功耗也較小,典型的讀取電流為4mA,待機電流僅為2μA。所有這些特點使得此系列存儲器非常適合于構成微型、低功耗的測控系統。筆者就使用AT45DB161B存儲器和PIC16LC73B單片機及微型壓力傳感器構成了用兩片紐扣電池驅動的微型壓力測量裝置,其外形尺寸僅為φ10mm×20mm。
2芯片簡介
2.1引腳排列和功能
AT45DB161B為DataFlash系列中的中檔產品,單片容量為16Mb。其引腳排列如圖1所示,引腳功能如表1所列。
表1AT45DB161B引腳功能
引腳名稱功能描述CS片選SCK串行時鐘SI串行輸入SO串行輸出WP頁面寫保護RESET復位RDY/BUSY準備好/忙NC未使用
2.2芯片內部邏輯結構
AT45DB161B的內部邏輯結構分為三個部分:存儲器頁陣列(主存)、緩存與I/O接口。AT45DB161B的存儲頁面大小為528字節,整個存儲器共分為4096頁,片內集成了兩個528字節的SRAM緩存,內部邏輯結構如圖2所示。
3存儲器讀寫接口
3.1SPI接口及操作模式
AT45DB161B存儲器采用SPI接口進行讀寫。SPI接口是一種通用串行接口總線,字長為8位,用來與外部設備(例如EEPROM、A/D轉換器等)進行通信。SPI接口利用SCK、SI和SO三根線進行數據的讀/寫。其中,SCK為時鐘信號,SI和SO為數據輸入和輸出線。AT45DB161B的SCK引腳的時鐘信號必須由外部單片機或控制器輸入,讀/寫命令字由SI引腳輸入,數據由SO引腳輸出。
SPI接口共有四種操作模式,分別為0、1、2和3。SPI操作模式決定了設備接收和發送數據時的時鐘相位和極性,即決定了時鐘信號的上升和下降沿與數據流行方向之間的關系,如圖3所示。
DataFlash系列存儲器僅支持使用得最為廣泛的SPI模式0和3。在這兩種模式下,SCK信號的上升沿觸發數據輸入,下降沿觸發數據輸出。二者的區別是SCK信號的起始電平不同。
3.2存儲器命令接口與狀態機
除了基本存儲單元外,DataFlash系列存儲器內部還包括命令用戶接口CUI(CommandUserInterface)和狀態機。CUI接收用戶軟件的操作命令,將其翻譯成狀態機內部操作碼并進行命令的有效性檢驗。狀態機控制存儲器所有的內部操作,包含一個8位的狀態寄存器(statusregister),用來指示設備的操作狀態。向存儲器輸入讀狀態寄存器命令可將狀態寄存器的數據從最高位開始依次讀出。狀態寄存器各位的意義如表2所列。
表2狀態寄存器各位定義
位7位6位5位4位3準備好/忙比較容量位2位1位0將來使用
3.3存儲器操作命令及其模式
為了使存儲器進行所需的操作,例如讀、寫、擦除等,必須從SI引腳輸入相應的操作命令,然后從SO或SI引腳讀取或寫入數據。除讀狀態寄存器命令外,所有的命令格式為:1字節操作碼+3字節地址碼。操作碼指示所需的操作,DataFlash系列節地址碼用來尋址存儲器頁陣列或緩存。圖4為AT45DB161B的讀/寫命令格式。
4存儲器與單片機接口實例
4.1硬件電路
DataFlash系列存儲器幾乎可以和任何類型的單片機接口,無論單片機是否有SPI接口。當然,如果單片機有SPI接口,那么存儲器讀/寫程序就相對簡單些;如果單片機沒有SPI接口,則可以用軟件仿真SPI接口與存儲器通信。
圖5為微型壓力測量系統的一部分。存儲器采用AT45DB161B-TC,TSOD封裝;單片機為美國Microchip公司的PIC16LC73B-04/SS,SSOP封裝。單片機采用軟件仿真SPI接口的方式與存儲器通信,存儲器工作于SPI模式0。
4.2AT45DB161B存儲器讀/寫子程序
DataFlash系列存儲器可以按地址從低到高順序讀寫,也可以隨機讀寫任一字節的數據。對于順序讀數據,可以使用連續讀主存頁陣列命令(操作碼68H或E8H)從給定的起始地址開始連續讀出,中間不需用戶干預,也可使用讀單頁主存命令(操作碼52H或D2H),自行提供頁地址讀取數據。對于順序寫數據,可以使用通過緩存寫主存頁命令(操作碼82H或85H),直接將數據寫入主存;也可以先使用寫緩存命令(操作碼84H或87H),將數據寫入緩存,在適當的時刻再使用緩存寫主存頁命令(操作碼83H或86H),將緩存中的數據寫入主存,如圖6所示。使用何種方式讀寫取決于特定的應用場合與要求。
下面的子程序為順序讀/寫存儲器的例子。子程序spiwt采用了通過緩存寫主存頁的方法,向存儲器寫入1字節數據。順序讀存儲器子程序spicrd采用了邊疆讀主存頁陣列命令。從給定地址處連續讀出數據,用圖5所示的PIC16LC73B單片機匯編語言編寫,使用MPLAB5.4.00編譯器編譯通過并燒寫入單片機,按圖5所示系統實測通過。
;順序寫子程序,用spiwt名稱調用
spiwtbcfSTATUS,RP0
bcfPORTB,SCK;模式0
bcfPORTB,cs;片選
movlw82H;加載操作碼
movwfspi_out;置入寄存器
callspiout;調用子程序輸出操作碼
movfPA1,w;加載第一字節地址
movwfspi_out;置入寄存器
callspiout;調用子程序輸出
movfBA1,w
xorwfPA2,w;獲得第二字節地址
movwfspi_out;置入寄存器
callspiout;調用子程序輸出
movfBA2,w;加載第三字節地址
movwfspi_out;置入寄存器
callspiout;調用子程序輸出
movfspi_wt,w;加載待寫數據
movwfspi_out;置入寄存器
callspiout;調用子程序輸出
bsfPORTB,cs;觸發寫入操作
nop;延時
retlw0;從子程序返回
;輸出子程序,用spiout名稱調用
spioutmovlw0x08;加載輸出位數
movwfspi_cnt;置入寄存器
nspioutrlfspi_out;先輸出最高位
btfscSTATUS,C;是否為1
bsfPORTB,SDO;輸出1
btfssSTATUS,C;是否為0
bcfPORTB,SDO;輸出0
nop;延時
bsfPORTB,SCK;時鐘信號上升沿
nop;延時
bcfPORTB,SCK;時鐘信號下降沿
decfszspi_cnt;檢查輸出位數
gotonspiout;輸出下一位
retlw0;從子程序返回
;順序讀子程序,用名稱spicrd調用
spicrdbcfSTATUS,RP0
bcfPORTB,cs;片選
bcfPORTB,SCK;模式0
movlwE8H;加載操作碼
movwfspi_out;置入寄存器
callspiout;調用子程序輸出
movfPA1,w;加載第一字節地址
movwfspi_out;置入寄存器
callspiout;調用子程序輸出
movfBA1,w
xorwfPA2,w;獲得第二字節地址
movwfspi_out;置入寄存器
callspiout;調用子程序輸出
movfBA2,w;加載第三字節地址
movwfspi_out;置入寄存器
callspiout;調用子程序輸出
movfDCRE,w;加載任意位字節
movwfspi_out;置入寄存器
callspiout;調用子程序輸出
movfDCRE,w;共需4個任意位字節
movwfspi_out
callspiout
movfDCRE,w
a
movwfspi_out
callspiout
movfDCRE,w
movwfspi_out
callspiout
retlw0;從子程序返回
【串行DataFlash存儲器及其與單片機的接口】相關文章:
串行接口鍵盤控制器SK5278及其在單片機系統中的應用08-06
一種用于單片機的紅外串行通信接口08-06
并行接口鐵電存儲器FM1808及其應用08-06
異步串行通信接口的IP核設計08-06
C語言實的串行通信接口程序08-06
C語言實現串行通信接口程序08-06