<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 串行DataFlash存儲器及其與單片機的接口

串行DataFlash存儲器及其與單片機的接口

作者: 時(shí)間:2004-12-08 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:是Atmel公司新推出的大容量Flash產(chǎn)品,具有體積小、容量大、功耗低和硬件接口簡(jiǎn)單的特點(diǎn),非常易于構成微型測量系統。本文重點(diǎn)介紹此類(lèi)的接口,并給出實(shí)際的電路設計和軟件代碼示例。

關(guān)鍵詞:Flash 接口 AT45DB161B

1 概述

Flash存儲器按其接口可分為和并行兩大類(lèi)。串行Flash存儲器大多采用I2C接口或SPI接口進(jìn)行讀寫(xiě);與并行Flash存儲器相比,所需引腳少、體積小、易于擴展、與或控制器連接簡(jiǎn)單、工作可靠,所以串行Flash存儲器越來(lái)越多地用在各類(lèi)電子產(chǎn)品和工業(yè)測控系統中。

是美國Atmel公司新推出的大容量串行Flash存儲器產(chǎn)品,采用NOR技術(shù)制造,可用于存儲數據或程序代碼,其產(chǎn)品型號為AT45DBxxxx。此系列存儲器容量較大,從1Mb~256Mb;封裝尺寸小,最小封裝型式(CBGA)尺寸為6mm8mm;采用SPI接口進(jìn)行讀寫(xiě),硬件連線(xiàn)少;內部頁(yè)面尺寸較小,8Mb容量的頁(yè)面尺寸為264字節,16Mb和32Mb容量的頁(yè)面尺寸為512字節,64Mb容量的頁(yè)面尺寸為1056字節,128Mb容量和256Mb容量的頁(yè)面尺寸為2112字節。另外,AT45DBxxxx系列存儲器內部集成了兩個(gè)與主存頁(yè)面相同大小的SRAM緩存,極大地提高了整個(gè)系統的靈活性,簡(jiǎn)化了數據的讀寫(xiě)過(guò)程。此外,AT45DBxxxx系列存儲器工作電壓較低,只需2.7~3.6V;整個(gè)芯片的功耗也較小,典型的讀取電流為4mA,待機電流僅為2μA。所有這些特點(diǎn)使得此系列存儲器非常適合于構成微型、低功耗的測控系統。筆者就使用AT45DB161B存儲器和PIC16LC73B及微型壓力傳感器構成了用兩片紐扣電池驅動(dòng)的微型壓力測量裝置,其外形尺寸僅為φ10mm20mm。

2 芯片簡(jiǎn)介

2.1 引腳排列和功能

AT45DB161B為系列中的中檔產(chǎn)品,單片容量為16Mb。其引腳排列如圖1所示,引腳功能如表1所列。

表1 AT45DB161B引腳功能

引腳名稱(chēng)功能描述
CS片選
SCK串行時(shí)鐘
SI串行輸入
SO串行輸出
WP頁(yè)面寫(xiě)保護
RESET復位
RDY/BUSY準備好/忙
NC未使用

2.2 芯片內部邏輯結構

AT45DB161B的內部邏輯結構分為三個(gè)部分:存儲器頁(yè)陣列(主存)、緩存與I/O接口。AT45DB161B的存儲頁(yè)面大小為528字節,整個(gè)存儲器共分為4096頁(yè),片內集成了兩個(gè)528字節的SRAM緩存,內部邏輯結構如圖2所示。

3 存儲器讀寫(xiě)接口

3.1 SPI接口及操作模式

AT45DB161B存儲器采用SPI接口進(jìn)行讀寫(xiě)。SPI接口是一種通用串行接口總線(xiàn),字長(cháng)為8位,用來(lái)與外部設備(例如EEPROM、A/D轉換器等)進(jìn)行通信。SPI接口利用SCK、SI和SO三根線(xiàn)進(jìn)行數據的讀/寫(xiě)。其中,SCK為時(shí)鐘信號,SI和SO為數據輸入和輸出線(xiàn)。AT45DB161B的SCK引腳的時(shí)鐘信號必須由外部單片機或控制器輸入,讀/寫(xiě)命令字由SI引腳輸入,數據由SO引腳輸出。

SPI接口共有四種操作模式,分別為0、1、2和3。SPI操作模式?jīng)Q定了設備接收和發(fā)送數據時(shí)的時(shí)鐘相位和極性,即決定了時(shí)鐘信號的上升和下降沿與數據流行方向之間的關(guān)系,如圖3所示。

DataFlash系列存儲器僅支持使用得最為廣泛的SPI模式0和3。在這兩種模式下,SCK信號的上升沿觸發(fā)數據輸入,下降沿觸發(fā)數據輸出。二者的區別是SCK信號的起始電平不同。

3.2 存儲器命令接口與狀態(tài)機

除了基本存儲單元外,DataFlash系列存儲器內部還包括命令用戶(hù)接口CUI(Command User Interface)和狀態(tài)機。CUI接收用戶(hù)軟件的操作命令,將其翻譯成狀態(tài)機內部操作碼并進(jìn)行命令的有效性檢驗。狀態(tài)機控制存儲器所有的內部操作,包含一個(gè)8位的狀態(tài)寄存器(status register),用來(lái)指示設備的操作狀態(tài)。向存儲器輸入讀狀態(tài)寄存器命令可將狀態(tài)寄存器的數據從最高位開(kāi)始依次讀出。狀態(tài)寄存器各位的意義如表2所列。

表2 狀態(tài)寄存器各位定義

位7位6位5位4位3
準備好/忙比較容 量
位2位1位0 
將來(lái)使用

3.3 存儲器操作命令及其模式

為了使存儲器進(jìn)行所需的操作,例如讀、寫(xiě)、擦除等,必須從SI引腳輸入相應的操作命令,然后從SO或SI引腳讀取或寫(xiě)入數據。除讀狀態(tài)寄存器命令外,所有的命令格式為:1字節操作碼+3字節地址碼。操作碼指示所需的操作,DataFlash系列節地址碼用來(lái)尋址存儲器頁(yè)陣列或緩存。圖4為AT45DB161B的讀/寫(xiě)命令格式。

4 存儲器與單片機接口實(shí)例

4.1 硬件電路

DataFlash系列存儲器幾乎可以和任何類(lèi)型的單片機接口,無(wú)論單片機是否有SPI接口。當然,如果單片機有SPI接口,那么存儲器讀/寫(xiě)程序就相對簡(jiǎn)單些;如果單片機沒(méi)有SPI接口,則可以用軟件仿真SPI接口與存儲器通信。

圖5為微型壓力測量系統的一部分。存儲器采用AT45DB161B-TC,TSOD封裝;單片機為美國Microchip公司的PIC16LC73B-04/SS,SSOP封裝。單片機采用軟件仿真SPI接口的方式與存儲器通信,存儲器工作于SPI模式0。

4.2 AT45DB161B存儲器讀/寫(xiě)子程序

DataFlash系列存儲器可以按地址從低到高順序讀寫(xiě),也可以隨機讀寫(xiě)任一字節的數據。對于順序讀數據,可以使用連續讀主存頁(yè)陣列命令(操作碼68H或E8H)從給定的起始地址開(kāi)始連續讀出,中間不需用戶(hù)干預,也可使用讀單頁(yè)主存命令(操作碼52H或D2H),自行提供頁(yè)地址讀取數據。對于順序寫(xiě)數據,可以使用通過(guò)緩存寫(xiě)主存頁(yè)命令(操作碼82H或85H),直接將數據寫(xiě)入主存;也可以先使用寫(xiě)緩存命令(操作碼84H或87H),將數據寫(xiě)入緩存,在適當的時(shí)刻再使用緩存寫(xiě)主存頁(yè)命令(操作碼83H或86H),將緩存中的數據寫(xiě)入主存,如圖6所示。使用何種方式讀寫(xiě)取決于特定的應用場(chǎng)合與要求。

下面的子程序為順序讀/寫(xiě)存儲器的例子。子程序spiwt采用了通過(guò)緩存寫(xiě)主存頁(yè)的方法,向存儲器寫(xiě)入1字節數據。順序讀存儲器子程序spicrd采用了邊疆讀主存頁(yè)陣列命令。從給定地址處連續讀出數據,用圖5所示的PIC16LC73B單片機匯編語(yǔ)言編寫(xiě),使用MPLAB5.4.00編譯器編譯通過(guò)并燒寫(xiě)入單片機,按圖5所示系統實(shí)測通過(guò)。

;順序寫(xiě)子程序,用spiwt名稱(chēng)調用

spiwt bcf STATUS,RP0

bcf PORTB,SCK ;模式0

bcf PORTB,cs ;片選

movlw 82H ;加載操作碼

movwf spi_out ;置入寄存器

call spiout ;調用子程序輸出操作碼

movf PA1,w ;加載第一字節地址

movwf spi_out ;置入寄存器

call spiout ;調用子程序輸出

movf BA1,w

xorwf PA2,w ;獲得第二字節地址

movwf spi_out ;置入寄存器

call spiout ;調用子程序輸出

movf BA2,w ;加載第三字節地址

movwf spi_out ;置入寄存器

call spiout ;調用子程序輸出

movf spi_wt,w ;加載待寫(xiě)數據

movwf spi_out ;置入寄存器

call spiout ;調用子程序輸出

bsf PORTB,cs ;觸發(fā)寫(xiě)入操作

nop ;延時(shí)

retlw 0 ;從子程序返回

;輸出子程序,用spiout名稱(chēng)調用

spiout movlw 0x08 ;加載輸出位數

movwf spi_cnt ;置入寄存器

nspiout rlf spi_out ;先輸出最高位

btfsc STATUS,C ;是否為1

bsf PORTB,SDO ;輸出1

btfss STATUS,C ;是否為0

bcf PORTB,SDO ;輸出0

nop ;延時(shí)

bsf PORTB,SCK ;時(shí)鐘信號上升沿

nop ;延時(shí)

bcf PORTB,SCK ;時(shí)鐘信號下降沿

decfsz spi_cnt ;檢查輸出位數

goto nspiout ;輸出下一位

retlw 0 ;從子程序返回

;順序讀子程序,用名稱(chēng)spicrd調用

spicrd bcf STATUS,RP0

bcf PORTB,cs ;片選

bcf PORTB,SCK ;模式0

movlw E8H ;加載操作碼

movwf spi_out ;置入寄存器

call spiout ;調用子程序輸出

movf PA1,w ;加載第一字節地址

movwf spi_out ;置入寄存器

call spiout ;調用子程序輸出

movf BA1,w

xorwf PA2,w ;獲得第二字節地址

movwf spi_out ;置入寄存器

call spiout ;調用子程序輸出

movf BA2,w ;加載第三字節地址

movwf spi_out ;置入寄存器

call spiout ;調用子程序輸出

movf DCRE,w ;加載任意位字節

movwf spi_out ;置入寄存器

call spiout ;調用子程序輸出

movf DCRE,w ;共需4個(gè)任意位字節

movwf spi_out

call spiout

movf DCRE,w

movwf spi_out

call spiout

movf DCRE,w

movwf spi_out

call spiout

retlw 0 ;從子程序返回



關(guān)鍵詞: DataFlash 串行 存儲器 單片機

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>