中文字幕无码不卡一区二区三区_少妇被又大又粗又爽毛片久久黑人_91精品国产在热久久无毒不卡_久久久久久亚洲综合网站

技術(shù)熱線: 4007-888-234

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

技術(shù)支持

串行DataFlash存儲器及其與單片機(jī)的接口

更新時間: 2019-03-22

十年單片機(jī)開發(fā)方案公司深圳英銳恩分享串行DataFlash存儲器及其與單片機(jī)的接口。

1 概述 

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

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

2 芯片簡介

2.1 引腳排列和功能

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

表1 AT45DB161B引腳功能

引腳名稱

功能描述

CS

片選

SCK

串行時鐘

SI

串行輸入

SO

串行輸出

WP

頁面寫保護(hù)

RESET

復(fù)位

RDY/BUSY

準(zhǔn)備好/忙

NC

未使用

2.2 芯片內(nèi)部邏輯結(jié)構(gòu)

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

3 存儲器讀寫接口

3.1 SPI接口及操作模式

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

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

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

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

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

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

位7

位6

位5

位4

位3

準(zhǔn)備好/忙

比較

容 量

位2

位1

位0


將來使用

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

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

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

4.1 硬件電路

DataFlash系列存儲器幾乎可以和任何類型的單片機(jī)接口,無論單片機(jī)是否有SPI接口。當(dāng)然,如果單片機(jī)有SPI接口,那么存儲器讀/寫程序就相對簡單些;如果單片機(jī)沒有SPI接口,則可以用軟件仿真SPI接口與存儲器通信。

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

4.2 AT45DB161B存儲器讀/寫子程序

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

下面的子程序?yàn)轫樞蜃x/寫存儲器的例子。子程序spiwt采用了通過緩存寫主存頁的方法,向存儲器寫入1字節(jié)數(shù)據(jù)。順序讀存儲器子程序spicrd采用了邊疆

讀主存頁陣列命令。從給定地址處連續(xù)讀出數(shù)據(jù),用圖5所示的PIC16LC73B單片機(jī)匯編語言編寫,使用MPLAB5.4.00編譯器編譯通過并燒寫入單片機(jī),按圖5所示系統(tǒng)實(shí)測通過。

;順序?qū)懽映绦?,用spiwt名稱調(diào)用

spiwt bcf STATUS,RP0

bcf PORTB,SCK ;模式0

bcf PORTB,cs ;片選

movlw 82H ;加載操作碼

movwf spi_out ;置入寄存器

call spiout ;調(diào)用子程序輸出操作碼

movf PA1,w ;加載第一字節(jié)地址

movwf spi_out ;置入寄存器

call spiout ;調(diào)用子程序輸出

movf BA1,w

xorwf PA2,w ;獲得第二字節(jié)地址

movwf spi_out ;置入寄存器

call spiout ;調(diào)用子程序輸出

movf BA2,w ;加載第三字節(jié)地址

movwf spi_out ;置入寄存器

call spiout ;調(diào)用子程序輸出

movf spi_wt,w ;加載待寫數(shù)據(jù)

movwf spi_out ;置入寄存器

call spiout ;調(diào)用子程序輸出

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

nop ;延時

retlw 0 ;從子程序返回

;輸出子程序,用spiout名稱調(diào)用

spiout movlw 0x08 ;加載輸出位數(shù)

movwf spi_cnt ;置入寄存器

nspiout rlf spi_out ;先輸出最高位

btfsc STATUS,C ;是否為1

bsf PORTB,SDO ;輸出1

btfss STATUS,C ;是否為0

bcf PORTB,SDO ;輸出0

nop ;延時

bsf PORTB,SCK ;時鐘信號上升沿

nop ;延時

bcf PORTB,SCK ;時鐘信號下降沿

decfsz spi_cnt ;檢查輸出位數(shù)

goto nspiout ;輸出下一位

retlw 0 ;從子程序返回

;順序讀子程序,用名稱spicrd調(diào)用

spicrd bcf STATUS,RP0

bcf PORTB,cs ;片選

bcf PORTB,SCK ;模式0

movlw E8H ;加載操作碼

movwf spi_out ;置入寄存器

call spiout ;調(diào)用子程序輸出

movf PA1,w ;加載第一字節(jié)地址

movwf spi_out ;置入寄存器

call spiout ;調(diào)用子程序輸出

movf BA1,w

xorwf PA2,w ;獲得第二字節(jié)地址

movwf spi_out ;置入寄存器

call spiout ;調(diào)用子程序輸出

movf BA2,w ;加載第三字節(jié)地址

movwf spi_out ;置入寄存器

call spiout ;調(diào)用子程序輸出

movf DCRE,w ;加載任意位字節(jié)

movwf spi_out ;置入寄存器

call spiout ;調(diào)用子程序輸出

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

movwf spi_out

call spiout

movf DCRE,w

movwf spi_out

call spiout

movf DCRE,w

movwf spi_out

call spiout

retlw 0 ;從子程序返回

404
返回首頁 |  返回上一頁
永平县| 云霄县| 武强县| 镇巴县| 金沙县| 仙居县| 乐平市| 博兴县| 衡南县| 大渡口区| 张掖市| 台中市| 凤庆县| 宣威市| 开原市| 弥渡县| 双鸭山市| 南开区| 峡江县| 雷波县| 西平县| 同心县| 融水| 徐州市| 淅川县| 定安县| 南岸区| 遂平县| 湘潭县| 子长县| 康乐县| 崇明县| 吉安市| 德惠市| 百色市| 清原| 三穗县| 馆陶县| 柳江县| 石渠县| 台中市|