找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5242|回復(fù): 0
收起左側(cè)

SPI接口的FLASH ROM AT45DB161D的驅(qū)動(dòng)方法

[復(fù)制鏈接]
ID:95490 發(fā)表于 2015-11-12 10:50 | 顯示全部樓層 |閱讀模式
SPI接口的FLASH ROM AT45DB161D的驅(qū)動(dòng)方法
(1)芯片介紹
AT45DB161D是串行接口的閃存芯片,可工作在2.5V~2.7V,可廣泛應(yīng)用于數(shù)據(jù)語(yǔ)音、圖像、程序代碼數(shù)據(jù)存儲(chǔ)中。AT45DB161D支持RapidS串行接口,適用于高速場(chǎng)合。RapidS串行接口是與SPI相兼容的,速度可達(dá)到66MHz。它包含有17,301,504個(gè)位,被組織為4096個(gè)頁(yè),每個(gè)頁(yè)512或528個(gè)字節(jié)。除了主存儲(chǔ)器,AT45DB161D還包括兩個(gè)SRAM數(shù)據(jù)緩沖區(qū),每個(gè)緩沖區(qū)512/528個(gè)字節(jié)。在主存儲(chǔ)器正在編程時(shí),緩沖區(qū)是允許接收數(shù)據(jù)的,并且支持?jǐn)?shù)據(jù)流式寫(xiě)入。與并行FLASH儲(chǔ)存器不同,它采用RapidS串行接口,從而大大減少了可用引腳數(shù)量,同時(shí)也提高了系統(tǒng)可靠性,降低了開(kāi)關(guān)噪聲,縮小了封裝體積?梢詰(yīng)用于商業(yè)、工業(yè)等需要高密度、低引腳數(shù)、低電壓與低功耗的應(yīng)用場(chǎng)合。
AT45DB161D允許簡(jiǎn)單的在系統(tǒng)重新編程,而無(wú)需輸入高編程電壓。芯片可以采用2.5V~3.6V或2.7V~3.6V單電源供電,進(jìn)行編程與讀取操作。它可以通過(guò)#CS來(lái)進(jìn)行使能,并通過(guò)三線(xiàn)接口(SI、SO、SCK)進(jìn)行數(shù)據(jù)通信。
(2)引腳配置與封裝
1.芯片封裝圖



2.引腳功能詳述
  
符號(hào)
  
名稱(chēng)與功能
有效電平
類(lèi)型
#CS
片選:#CS用以選中芯片。當(dāng)#CS被設(shè)置為無(wú)效狀態(tài)時(shí),芯片則不被選中,并且處于閑置狀態(tài)(不是深度睡眠狀態(tài)),輸出引腳SO處于高阻態(tài)。當(dāng)芯片未被選中時(shí),從輸入引腳SI輸入的數(shù)據(jù)將不被接受。
  
#CS引腳上的下降沿將會(huì)啟動(dòng)一個(gè)操作,而上跳沿則會(huì)結(jié)束一個(gè)操作。在一個(gè)內(nèi)部操作如芯片內(nèi)部的編程或擦除周期內(nèi),芯片不會(huì)進(jìn)入閑置狀態(tài),直到操作完畢。
LOW
輸入
SCK
串行時(shí)鐘:此引腳用來(lái)向芯片提供時(shí)鐘信號(hào),有來(lái)控制數(shù)據(jù)流的出入。SI引腳上的命令、地址與輸入數(shù)據(jù)在時(shí)鐘SCK的上升沿被寫(xiě)入,而SO引腳上的輸出數(shù)據(jù)則在時(shí)鐘的下降沿變化。
-
輸入
SI
串行輸入:SI引腳用來(lái)向芯片以移位方式寫(xiě)入數(shù)據(jù)。SI引腳上的所有數(shù)據(jù)輸入包括命令與地址。SI上的數(shù)據(jù)在時(shí)鐘的上升沿寫(xiě)入芯片。
-
輸入
SO
串行輸出:SO引腳用來(lái)從芯片以移位方式輸出數(shù)據(jù)。SI上的數(shù)據(jù)在時(shí)鐘的下降沿變化。
-
輸出
#WP
寫(xiě)保護(hù):當(dāng)#WP被設(shè)置為有效時(shí)芯片的扇區(qū)將被保護(hù)起來(lái),以防止編程與擦除對(duì)數(shù)據(jù)的破壞。但是扇區(qū)保護(hù)使能與扇區(qū)死鎖命令仍然可以被芯片識(shí)別。#WP引腳在內(nèi)部被拉高,可以懸空。但是仍然建議在外部接到VCC。
LOW
輸入
#RESET
復(fù)位:#RESET引腳上的低電平會(huì)終止正在處理的操作并復(fù)位內(nèi)部狀態(tài)機(jī)到閑置狀態(tài)。#RESET引腳上的低電平會(huì)使芯片一直處于復(fù)位狀態(tài)。當(dāng)#RESET上轉(zhuǎn)為高電平后,才能進(jìn)行正常的操作。
  
芯片內(nèi)部設(shè)置上電復(fù)位電路。當(dāng)此引腳不用時(shí),外部接到高電平。
LOW
輸入
RDY/#BUSY
就緒/忙碌狀態(tài)指示:此引腳是漏極開(kāi)路的輸出引腳。當(dāng)芯片處于忙狀態(tài)時(shí)(內(nèi)部操作過(guò)程中)此引腳為低電平,此引腳在正常狀態(tài)下為高電平(外部接上拉電阻)。當(dāng)正在進(jìn)行編程/擦除操作,比較操作與頁(yè)-緩沖區(qū)傳送時(shí),被拉低。
  
忙狀態(tài)指示FLASH儲(chǔ)存陣列與某一個(gè)緩沖區(qū)不能被操作,而對(duì)另一個(gè)緩沖區(qū)的讀與寫(xiě)操作仍然可以進(jìn)行。
-
輸出
VCC
芯片電源供給
-
電源
GND
地:此引腳應(yīng)與系統(tǒng)地接在一起。
-
(3)AT45DB161D的功能框圖:
(4)存儲(chǔ)器陣列:
AT45DB161D的儲(chǔ)存器陣列被分為3個(gè)級(jí)別的粒度,分別為扇區(qū)、塊與頁(yè)。下面的“存儲(chǔ)器結(jié)構(gòu)圖”對(duì)各個(gè)級(jí)別進(jìn)行了分析,詳細(xì)說(shuō)明了每個(gè)扇區(qū)與塊的頁(yè)數(shù)。所有的編程操作都是針對(duì)于頁(yè)的。擦除操作可以作用于芯片、扇區(qū)、塊或頁(yè)。
          扇區(qū)結(jié)構(gòu):
  
(扇區(qū) 0A)=8頁(yè)   4096  /4224    字節(jié)
  
(扇區(qū) 0B)=248頁(yè) 126,976/130,944字節(jié)
(扇區(qū) 1 )=256頁(yè) 131,072/135,168字節(jié)
(扇區(qū) 2 )=256頁(yè) 131,072/135,168字節(jié)
                 ……
(扇區(qū) 14)=256頁(yè) 131,072/135,168字節(jié)
(扇區(qū) 15)=256頁(yè) 131,072/135,168字節(jié)
          塊結(jié)構(gòu):
  
0
  
扇區(qū)0
1

  
  
  
扇區(qū)1
2
……
30
31
32
33
……

  
扇區(qū)2
62
63
64


65


……


510


511


          頁(yè)結(jié)構(gòu):
  
頁(yè)0
  

  
  
0
頁(yè)1
……
頁(yè)6
頁(yè)7
頁(yè)8

  
  
1
頁(yè)9
……
頁(yè)14
頁(yè)15
頁(yè)16

  
  
  
……
頁(yè)17
頁(yè)18
……
頁(yè)4093
頁(yè)4094
頁(yè)4095
(5)芯片操作:
芯片的操作是通過(guò)單片機(jī)的指令來(lái)完成的。指令列表與指令操作碼在后面的“指令表”中有詳細(xì)的說(shuō)明。一個(gè)有效的指令由#CS的下降沿來(lái)指示它的開(kāi)始,隨后是一個(gè)有意義的8位操作碼與緩存區(qū)或主存儲(chǔ)器的地址。當(dāng)#CS為低時(shí),由時(shí)鐘SCK引腳來(lái)控制由SI引腳寫(xiě)入的操作碼與緩存區(qū)或主存儲(chǔ)器的地址。所有的指令、地址與數(shù)據(jù)在傳輸時(shí)都是高位在前的。
528字節(jié)模式下,緩沖區(qū)中數(shù)據(jù)的地址由BFA9~BFA0來(lái)表示。主存儲(chǔ)器中數(shù)據(jù)的地址由PA11~PA0與BA9~BA0來(lái)表示,PA11~PA0用來(lái)表示12位頁(yè)地址,BA9~BA0表示10位的頁(yè)內(nèi)字節(jié)地址。在512字節(jié)模式下,緩沖區(qū)中數(shù)據(jù)地址由BFA8~BFA0來(lái)表示。主存儲(chǔ)器中數(shù)據(jù)的地址由A20~A0來(lái)表示,其中A20~A9是12位的頁(yè)地址,A8~A0為9位的頁(yè)內(nèi)字節(jié)地址。


(6)讀命令
     使用相應(yīng)的操作碼,數(shù)據(jù)可以從主存儲(chǔ)器或某一個(gè)SRAM緩沖區(qū)中讀出。
1.      連續(xù)讀(命令碼:E8H):可以達(dá)到66MHz
在提供了主存儲(chǔ)器陣列的開(kāi)始地址后,在時(shí)鐘信號(hào)的作用下連續(xù)讀命令可以從芯片中以數(shù)據(jù)流方式進(jìn)行數(shù)據(jù)讀取,而無(wú)需額外的地址信息或控制信號(hào)。芯片內(nèi)部的地址計(jì)數(shù)器會(huì)在每一個(gè)時(shí)鐘周期后自動(dòng)自增,因而可以在不用寫(xiě)入新的地址的情況下繼續(xù)讀取下一個(gè)字節(jié)。要進(jìn)行一次對(duì)頁(yè)(528字節(jié))的連續(xù)讀操作,操作碼E8H必須要寫(xiě)入芯片中,隨后是3個(gè)字節(jié)的地址(22位的頁(yè)與字節(jié)地址序列)與4個(gè)無(wú)關(guān)字節(jié)。開(kāi)始的12位(PA11~PA0)來(lái)用表示將要讀取的數(shù)據(jù)在主存儲(chǔ)器中的頁(yè)地址。后10位(BA9~BA0)用來(lái)表示字節(jié)在頁(yè)中的地址。而要進(jìn)行一次對(duì)頁(yè)(512字節(jié))的連續(xù)讀時(shí),操作碼E8H同樣也要先寫(xiě)入到芯片中,隨后是三個(gè)字節(jié)的地址與4個(gè)無(wú)關(guān)字節(jié)。21位序列中前12位(A20~A9)表示要讀的數(shù)據(jù)在主存儲(chǔ)器的頁(yè)地址,后9位(A8~A0)是頁(yè)內(nèi)的字節(jié)地址。那些無(wú)關(guān)字節(jié)在讀操作初始化時(shí)是必需的。在無(wú)關(guān)字節(jié)后,SCK引腳上的時(shí)鐘信號(hào)使數(shù)據(jù)從SO引腳輸出。
在操作寫(xiě)入地址字節(jié)、無(wú)關(guān)字節(jié)與數(shù)據(jù)讀取的過(guò)程中,#CS引腳上要保持低電平。連續(xù)讀到達(dá)一個(gè)頁(yè)的結(jié)尾時(shí),芯片會(huì)從下個(gè)頁(yè)的開(kāi)頭繼續(xù)讀取,頁(yè)間的跨越是沒(méi)有延時(shí)的。當(dāng)主存儲(chǔ)器的最后一個(gè)位被讀出后,芯片會(huì)自動(dòng)返回到第一頁(yè)的開(kāi)頭繼續(xù)讀取。與頁(yè)間跨越相同的,從存儲(chǔ)器陣列結(jié)尾轉(zhuǎn)到開(kāi)頭也是無(wú)延時(shí)的。
2.      連續(xù)讀(命令碼:0BH 高速模式):可以達(dá)到66MHz
此命令可以在最高頻率以下的任意時(shí)鐘頻率下通過(guò)串行接口對(duì)主存儲(chǔ)器進(jìn)行高速讀取。要進(jìn)行一次連續(xù)讀(頁(yè)容量為528字節(jié)),#CS必須處于有效狀態(tài),然后操作碼0BH必須寫(xiě)入到芯片中,隨后是3字節(jié)地址與一個(gè)字節(jié)。22位地址序列中的前12位(PA11~PA0)表示將要讀取的數(shù)據(jù)在主存儲(chǔ)器中的頁(yè)地址,后10位(BA9~BA0)表示頁(yè)內(nèi)的字節(jié)地址。要進(jìn)行一次連續(xù)讀(頁(yè)容量為512字節(jié)),同樣地,操作碼OBH也要先寫(xiě)入芯片中,隨后是3字節(jié)地址(A20~A0)與一個(gè)字節(jié)。在此字節(jié)后數(shù)據(jù)將在SCK引腳上的時(shí)鐘信號(hào)作用下從SO引腳輸出。
同1中的內(nèi)容。
3.      連續(xù)讀(命令碼:03H 低速模式):可以達(dá)到33MHz
大部分與高速模式下的連續(xù)讀是相同的。不同的在于3字節(jié)地址寫(xiě)入后無(wú)需再寫(xiě)入一個(gè)字節(jié)。
4.      主存儲(chǔ)器頁(yè)讀(操作碼:D2H)
主存儲(chǔ)器頁(yè)讀允許直接從4096個(gè)頁(yè)中某一個(gè)頁(yè)中讀取數(shù)據(jù),而不影響緩沖區(qū)中的數(shù)據(jù)。其它的內(nèi)容與1相同。
5.      緩存區(qū)讀(操作碼:緩沖區(qū)1D4H或D1H 緩沖區(qū)2 D6H或D3H)
主存儲(chǔ)陣列中的數(shù)據(jù)可以放在SRAM數(shù)據(jù)緩存區(qū)內(nèi),使用緩存區(qū)讀命令允許直接從緩沖區(qū)中讀取數(shù)據(jù)。操作碼的選用要根據(jù)時(shí)鐘頻率而定。D4H、D6H與D1H、D3H可以分別使用在頻率低于66MHz與33MHz的情況下。要進(jìn)行一次緩沖區(qū)讀(528字節(jié)),操作碼必須先寫(xiě)入芯片,隨后是3字節(jié)地址(14個(gè)無(wú)關(guān)位與10位緩沖區(qū)地址)。要進(jìn)行一次緩沖區(qū)讀(512字節(jié)),操作同樣也要先寫(xiě)入芯片,隨后是3字節(jié)地址(15個(gè)無(wú)關(guān)位與9位緩沖區(qū)地址)。在地址字節(jié)后,一個(gè)無(wú)關(guān)字節(jié)必須要寫(xiě)入芯片以初始化讀操作。在操作碼、地址字節(jié)、無(wú)關(guān)字節(jié)寫(xiě)入的過(guò)程中,#CS引腳必須保持低電平。當(dāng)?shù)竭_(dá)緩沖區(qū)的結(jié)尾時(shí),芯片會(huì)自動(dòng)返回到緩沖區(qū)的開(kāi)始。#CS的上跳沿將終止讀操作。
(7)編程與擦除命令
1.  緩沖區(qū)寫(xiě)(操作碼:緩沖區(qū)1 84H 緩沖區(qū)2 87H)
數(shù)據(jù)可以通過(guò)SI引腳寫(xiě)入緩沖區(qū)1或2中。要將數(shù)據(jù)寫(xiě)入緩沖區(qū)(528字節(jié)),操作碼必須先寫(xiě)入芯片,隨后是3字節(jié)地址(14位無(wú)關(guān)位與10位緩沖區(qū)地址 BFA9~BFA0)。這10位地址表示要寫(xiě)入的數(shù)據(jù)的第一個(gè)字節(jié)的緩沖區(qū)地址。李將數(shù)據(jù)寫(xiě)入緩沖區(qū)(512字節(jié)),操作碼同樣也要先寫(xiě)入芯片,隨后是3字節(jié)地址(15個(gè)無(wú)關(guān)位與9位緩沖區(qū)地址 BFA8~BFA0)。這9位緩沖區(qū)地址表示要寫(xiě)入的每個(gè)字節(jié)的地址。在最后一個(gè)地址位寫(xiě)入后,就可以開(kāi)始向其寫(xiě)入數(shù)據(jù)了。如果到達(dá)了緩沖區(qū)的結(jié)尾,則芯片會(huì)自動(dòng)返回到緩沖區(qū)的開(kāi)頭。數(shù)據(jù)會(huì)繼續(xù)寫(xiě)入到緩沖區(qū)中,直到#CS引腳上產(chǎn)生上跳沿為止。
2.  緩沖向主存儲(chǔ)器頁(yè)編程(帶預(yù)擦除操作碼:緩沖區(qū)1 83H 緩沖區(qū)2 86H)
被寫(xiě)入到緩沖中的數(shù)據(jù)可以被編程到主存儲(chǔ)器中。先寫(xiě)入操作碼,對(duì)于頁(yè)容量為528字節(jié)的情況,隨后是3字節(jié)地址(2個(gè)無(wú)關(guān)位,12位頁(yè)地址 PA11~PA0 與10個(gè)無(wú)關(guān)位)。而對(duì)于容量為512字節(jié)的情況,操作碼寫(xiě)入后,隨后是3字節(jié)地址(3個(gè)無(wú)關(guān)位,12位的地址位 A20~A9 與9個(gè)無(wú)關(guān)位)。當(dāng)#CS引腳的上跳沿時(shí),芯片會(huì)先擦除主存儲(chǔ)器中所選中的頁(yè)(擦除后都為邏輯1),然后將緩沖區(qū)中的數(shù)據(jù)編程到頁(yè)中。擦除與編程操作都是內(nèi)部進(jìn)行的,并會(huì)在一定時(shí)間內(nèi)完成。在這期間,狀態(tài)寄存器與RDY/#BUSY都會(huì)指示芯片處于忙狀態(tài)。
3.  緩沖區(qū)向主存儲(chǔ)器頁(yè)編程(無(wú)預(yù)擦除操作碼:緩沖區(qū)1 88H 緩沖區(qū)2 89H)
        主存儲(chǔ)器中已經(jīng)被擦除的頁(yè)可以通過(guò)此操作由緩沖區(qū)向其編程。與有預(yù)擦除的操作不同就在于它是無(wú)預(yù)擦除的。
4.  頁(yè)擦除(操作碼:81H)
頁(yè)擦除操作可以獨(dú)立對(duì)主存儲(chǔ)陣列中某一個(gè)頁(yè)進(jìn)行擦除,隨后可以對(duì)該頁(yè)進(jìn)行緩沖區(qū)向主存儲(chǔ)器頁(yè)編程(無(wú)預(yù)擦除)操作。對(duì)于頁(yè)容量為528字節(jié)的情況,先要寫(xiě)入操作碼,隨后是3字節(jié)地址(2個(gè)無(wú)關(guān)位,12位頁(yè)地址 PA11~P10 與10個(gè)無(wú)關(guān)位)。對(duì)于頁(yè)容量512字節(jié)的情況,也要先寫(xiě)入操作碼,隨后是3字節(jié)地址(3個(gè)無(wú)關(guān)位,12位頁(yè)地址 A20~A9 與9個(gè)無(wú)關(guān)位)。當(dāng)#CS引腳上產(chǎn)生上跳沿時(shí),芯片會(huì)擦除所選中的頁(yè)(擦除后都為邏輯1)。擦除操作是內(nèi)部進(jìn)行的,并會(huì)在一定時(shí)間內(nèi)完成。在這期間,狀態(tài)寄存器與RDY/#BUSY都會(huì)指示芯片處于忙狀態(tài)。
5.       塊擦除(操作碼:50H)
塊擦除操作可以使塊內(nèi)的8個(gè)頁(yè)一次全部擦除。這個(gè)命令可以用在有大量數(shù)據(jù)需要寫(xiě)入的時(shí)候,可以避免多次調(diào)用寫(xiě)擦除命令。在頁(yè)容量為528字節(jié)時(shí),操作碼先要寫(xiě)入芯片,隨后是3字節(jié)地址(2個(gè)無(wú)關(guān)位,9位頁(yè)地址 PA11~PA3 ,13個(gè)無(wú)關(guān)位)。要進(jìn)行一次塊擦除操作(頁(yè)容量512字節(jié)),也要先寫(xiě)入操作碼,隨后是3字節(jié)地址(3個(gè)無(wú)關(guān)位,9位頁(yè)地址 A20~A12與12個(gè)無(wú)關(guān)位)。當(dāng)#CS上產(chǎn)生上跳沿時(shí),芯片將擦除選中的塊。擦除操作是內(nèi)部進(jìn)行的,并會(huì)在一定時(shí)間內(nèi)完成。在這期間,狀態(tài)寄存器與RDY/#BUSY都會(huì)指示芯片處于忙狀態(tài)。
塊擦除地址如下表所示:
  
PA11/
  
A20
  
PA10/
  
A19
PA9/
  
A18
PA8/
  
A17
PA7/
  
A16
PA6/
  
A15
PA5/
  
A14
PA4/
  
A13
PA3/
  
A12
PA2/
  
A11
PA1/
  
A10
PA0/
  
A9
BLOCK
0
0
0
0
0
0
0
0
0
X
X
X
0
0
0
0
0
0
0
0
0
1
X
X
X
1
0
0
0
0
0
0
0
1
0
X
X
X
2
0
0
0
0
0
0
0
1
1
X
X
X
3
……
……
……
……
……
……
……
……
……
……
……
……
……
1
1
1
1
1
1
0
0


X
X
X
508
1
1
1
1
1
1
0
1


X
X
X
509
1
1
1
1
1
1
1
0


X
X
X
510
1
1
1
1
1
1
1
1


X
X
X
511


6.       扇區(qū)擦除(操作碼:7CH)
扇區(qū)擦除命令可以獨(dú)立對(duì)主存儲(chǔ)器中的某一個(gè)扇區(qū)進(jìn)行擦除。一共有16個(gè)扇區(qū),每次扇區(qū)擦除操作只能對(duì)一個(gè)扇區(qū)進(jìn)行擦除。頁(yè)容量為528字節(jié)時(shí),要對(duì)扇區(qū)0A或扇區(qū)0B進(jìn)行擦除,需要先寫(xiě)入操作碼,隨后是3字節(jié)地址(2個(gè)無(wú)關(guān)位,9位頁(yè)地址 PA11~PA3 與13個(gè)無(wú)關(guān)位)。要擦除扇區(qū)1~15,也要先寫(xiě)入操作碼,隨后是3字節(jié)地址(2個(gè)無(wú)關(guān)位,4位頁(yè)地址PA11~PA8 與18個(gè)無(wú)關(guān)位)。頁(yè)容量為512字節(jié)時(shí),要對(duì)扇區(qū)0A或扇區(qū)0B進(jìn)行擦除,先寫(xiě)入操作碼,隨后是3字節(jié)地址(3個(gè)無(wú)關(guān)位,9位頁(yè)地址 A20~A12 與12個(gè)無(wú)關(guān)位)。要擦除扇區(qū)1~15,也要先寫(xiě)入操作碼,隨后是4字節(jié)地址(3個(gè)無(wú)關(guān)位,4位頁(yè)地址 A20~A17 與17個(gè)無(wú)關(guān)位)。擦除操作是內(nèi)部進(jìn)行的,并會(huì)在一定時(shí)間內(nèi)完成。在這期間,狀態(tài)寄存器與RDY/#BUSY都會(huì)指示芯片處于忙狀態(tài)。
    7.  片擦除(操作碼:C7H、94H、80H與9AH)
        主存儲(chǔ)器可以使用片擦除命令一次全部擦除。要進(jìn)行一次片擦除操作,先要寫(xiě)入操作碼,無(wú)須寫(xiě)入地址,交且操作過(guò)程中任何寫(xiě)入的數(shù)據(jù)都是無(wú)效的。操作碼寫(xiě)入后,#CS引腳上的上跳沿可以開(kāi)始擦除過(guò)程。在操作過(guò)程中,狀態(tài)寄存器指示芯片處于忙狀態(tài)。那些被保護(hù)或死鎖的扇區(qū)不受此命令的影響,其數(shù)據(jù)不會(huì)發(fā)生改變。只有那些沒(méi)有保護(hù)或死鎖的扇區(qū)會(huì)被擦除。芯片在進(jìn)行擦除操作的過(guò)程中#WP引腳可以設(shè)為有效,但是在內(nèi)部擦除周期完成前保護(hù)不會(huì)生效。
8.  通過(guò)緩沖區(qū)對(duì)主存儲(chǔ)器頁(yè)編程(操作碼:緩沖區(qū)1 82H 緩沖區(qū)2 85H)
這個(gè)命令是緩沖區(qū)寫(xiě)與緩沖區(qū)向主存儲(chǔ)器頁(yè)編程(帶預(yù)擦除)兩條命令的綜合。數(shù)據(jù)先從輸入引腳SI寫(xiě)入緩沖區(qū)1或2,再?gòu)木彌_區(qū)向指定的頁(yè)編程。在頁(yè)容量為528字節(jié)時(shí),要進(jìn)行一次此操作,先要寫(xiě)入操作碼,再將數(shù)據(jù)寫(xiě)入到緩沖區(qū)中,然后向芯片寫(xiě)入3字節(jié)地址(2個(gè)無(wú)關(guān)位,12位頁(yè)地址 PA11~PA0 與10位緩沖區(qū)地址 BFA9~BFA0)。在頁(yè)容量為512字節(jié)時(shí),要進(jìn)行此操作,也要先將操作碼寫(xiě)入,再將數(shù)據(jù)寫(xiě)入到緩沖區(qū)中,隨后是3字節(jié)地址(3個(gè)無(wú)關(guān)位,12位頁(yè)地址 A20~A9 與9位緩沖區(qū)地址 BFA8~BFA0)。所有的地址字節(jié)都被寫(xiě)入后,就可以通過(guò)輸入引腳向芯片寫(xiě)入數(shù)據(jù)了。當(dāng)#CS引腳上出現(xiàn)上跳沿時(shí),芯片先會(huì)擦除主存儲(chǔ)器所選中的頁(yè),然后將存在緩沖區(qū)中的數(shù)據(jù)編程到頁(yè)中去。編程操作是在芯片內(nèi)部進(jìn)行的,并會(huì)在一定時(shí)間內(nèi)完成。在這期間,狀態(tài)寄存器與RDY/#BUSY都會(huì)指示芯片處于忙狀態(tài)。
(8)扇區(qū)保護(hù)
    AT45DB161D提供硬件與軟件兩種方法對(duì)扇區(qū)進(jìn)行保護(hù),以使其避免數(shù)據(jù)的破壞。軟件的方法是通過(guò)軟件命令來(lái)實(shí)現(xiàn)扇區(qū)保護(hù)的使能與禁止的。而硬件的方法則是通過(guò)使用#WP引腳來(lái)實(shí)現(xiàn)的。通過(guò)“扇區(qū)保護(hù)寄存器”對(duì)哪一個(gè)扇區(qū)保護(hù)或不保護(hù)進(jìn)行選擇。要知道某一個(gè)扇區(qū)是否有保護(hù),可以查詢(xún)狀態(tài)寄存器。
1.  扇區(qū)保護(hù)的軟件方法
   1)扇區(qū)保護(hù)使能命令(操作碼:3DH-2AH-7FH-A9H)
      指定的扇區(qū)通過(guò)使扇區(qū)保護(hù)使能命令可使其在編程與擦除操作中得以保護(hù)。要采用方法使能扇區(qū)保護(hù),#CS引腳必須處于有效狀態(tài),從輸入引腳SI寫(xiě)入4字節(jié)命令序列。寫(xiě)入后,#CS引腳轉(zhuǎn)為無(wú)效狀態(tài),此時(shí)扇區(qū)保護(hù)就被使能了。
  
命令
  
字節(jié)1
字節(jié)2
字節(jié)3
字節(jié)4
扇區(qū)保護(hù)使能命令
3DH
  2AH
7FH
A9H
扇區(qū)保護(hù)使能命令的時(shí)序圖:
   2)扇區(qū)保護(hù)禁止命令(操作碼:3DH-2AH-7FH-9AH)
          用軟件方法來(lái)禁止扇區(qū)保護(hù)時(shí),除了寫(xiě)入的操作碼序列不事,其它與扇區(qū)保護(hù)使能命令是相同的。
  
命令
  
字節(jié)1
字節(jié)2
字節(jié)3
字節(jié)4
扇區(qū)保護(hù)禁止命令
3DH
  2AH
7FH
9AH
扇區(qū)保護(hù)禁止命令的時(shí)序圖:


   3)軟件控制保護(hù)的各個(gè)方面
          軟件控制保護(hù)在#WP沒(méi)有或不能被單片機(jī)控制的情況下是很有用的。在這種情況下,#WP可以懸空(#WP引腳在內(nèi)部拉高),扇區(qū)保護(hù)可以由以上兩種命令來(lái)控制。
(9)保護(hù)的硬件控制
     #WP引腳設(shè)為有效狀態(tài)后,在扇區(qū)保護(hù)寄存器中設(shè)置為保護(hù)的扇區(qū)及扇區(qū)保護(hù)寄存器自身在編程與擦除操作中可以得到保護(hù)。扇區(qū)保護(hù)寄存器與設(shè)置為保護(hù)的任何一個(gè)扇區(qū),都不能被編程或擦除。要改變扇區(qū)保護(hù)寄存器的值只能將#WP設(shè)為無(wú)效。如果#WP被接到地,扇區(qū)保護(hù)寄存器的內(nèi)容不能被改變。如果#WP被設(shè)為無(wú)效或接到VCC,則其內(nèi)容可以被改變。
     #WP會(huì)使保護(hù)的軟件控制方法無(wú)效。例如:如果扇區(qū)原先并沒(méi)有被扇區(qū)保護(hù)使能命令保護(hù),那么簡(jiǎn)單的把#WP設(shè)為有效狀態(tài)就可以使能扇區(qū)保護(hù)。當(dāng)#WP引腳設(shè)為有效狀態(tài)而扇區(qū)保護(hù)使能命令沒(méi)有執(zhí)行,扇區(qū)保護(hù)不會(huì)被使能。如果在#WP引腳設(shè)為有效狀態(tài)前扇區(qū)保護(hù)使能命令被執(zhí)行了,那么只簡(jiǎn)單地將#WP設(shè)為無(wú)效并不能禁止扇區(qū)保護(hù)。在這種情況下,扇區(qū)保護(hù)禁止命令需要在#WP引腳無(wú)效時(shí)執(zhí)行來(lái)使扇區(qū)保護(hù)禁止。在#WP引腳為有效時(shí),扇區(qū)保護(hù)禁止命令會(huì)被忽略。
1.      扇區(qū)保護(hù)寄存器
非易揮發(fā)的(掉電不丟失)扇區(qū)保護(hù)寄存器指示哪些扇區(qū)被保護(hù)或未被保護(hù)。扇區(qū)保護(hù)寄存器包括16個(gè)字節(jié),從第0到第15字節(jié)的不同值確定了扇區(qū)0到15是否被保護(hù)。扇區(qū)保護(hù)寄存器是可以由用戶(hù)修改的,但在生新程序前必須先擦除。
扇區(qū)保護(hù)寄存器:
  
扇區(qū)號(hào)
  
00A,0B
1 to 15
保護(hù)
見(jiàn)下表
FFH
未保護(hù)
00H
扇區(qū)0(0A,0B)
  
  
0A
0B

  
3,2

  
  
1,0

  
數(shù)據(jù)值
0~7頁(yè)
8~255頁(yè)
7,6
5,4
扇區(qū)0A,0B未保護(hù)
   00
   00
xx
xx
0xH
0A保護(hù)(第0~7頁(yè))
   11
   00
xx
xx
CxH
0B保護(hù)(第8~255頁(yè))
   00
   11
xx
xx
3xH
扇區(qū)0A(第0~7頁(yè)),0B(第8~255頁(yè))
   11
   11
xx
xx
FxH
注:從ATMEL出廠(chǎng)后0~15字節(jié)默認(rèn)值為00H。
1)擦除扇區(qū)保護(hù)寄存器命令(操作碼:3DH-2AH-7FH-CFH)
      為了修改扇區(qū)保護(hù)寄存器的值,必須先使用擦除扇區(qū)保護(hù)寄存器命令將其擦除。
              要擦除扇區(qū)保護(hù)寄存器,#CS必須設(shè)置為有效,然后將4字節(jié)的操作碼序列寫(xiě)入芯片。在操作碼寫(xiě)入后,需要將#CS設(shè)置為無(wú)效,以初始化一個(gè)擦除操作。扇區(qū)保護(hù)寄存器的擦除需要一定的時(shí)間,此期間狀態(tài)寄存器會(huì)指示芯片處于忙狀態(tài)。如果在進(jìn)行擦除的過(guò)程中掉電,則扇區(qū)保護(hù)寄存器的擦除得不到保證。
  
命令
  
字節(jié)1
字節(jié)2
字節(jié)3
字節(jié)4
擦除扇區(qū)保護(hù)寄存器命令
3DH
  2AH
7FH
CFH
擦除扇區(qū)保護(hù)寄存器命令的時(shí)序圖:
       2)扇區(qū)保護(hù)寄存器編程命令(操作碼:3DH-2AH-7FH-FCH)
              在扇區(qū)保護(hù)寄存器被擦除后,就可以使用扇區(qū)保護(hù)寄存器編程命令對(duì)其進(jìn)行重新編程。
   要對(duì)扇區(qū)保護(hù)寄存器進(jìn)行編程,必須先將#CS設(shè)為有效,從SI引腳寫(xiě)入4字節(jié)操作碼序列。寫(xiě)入后,再將要寫(xiě)入扇區(qū)保護(hù)寄存器的內(nèi)容寫(xiě)入。扇區(qū)保護(hù)寄存器中包括有16個(gè)字節(jié),所以要寫(xiě)入16個(gè)字節(jié)。每個(gè)字節(jié)對(duì)應(yīng)對(duì)寄存器中的每個(gè)單元。
    16個(gè)字節(jié)被寫(xiě)入后,#CS引腳需要設(shè)為無(wú)效以初始化一個(gè)編程周期。編程過(guò)程需要一定的時(shí)間,在此期間狀態(tài)寄存器指示芯片處于忙狀態(tài)。如果在進(jìn)行編程的過(guò)程中掉電,則扇區(qū)保護(hù)寄存器中的內(nèi)容的修改得不到保證。
   如果在#CS引腳無(wú)效以前沒(méi)有寫(xiě)入適當(dāng)數(shù)量的字節(jié),則沒(méi)有字節(jié)與其相對(duì)應(yīng)的寄存器單元所對(duì)應(yīng)扇區(qū)保護(hù)狀態(tài)的改變不能保證。
   如果扇區(qū)保護(hù)寄存器中的字節(jié)不是00H或FFH,則相應(yīng)單元所對(duì)應(yīng)的扇區(qū)保護(hù)狀態(tài)的改變不能保證。
   扇區(qū)保護(hù)寄存器編程命令利用內(nèi)部SRAM數(shù)據(jù)緩沖區(qū)1來(lái)實(shí)現(xiàn)編程操作。緩沖區(qū)1的數(shù)據(jù)在命令執(zhí)行完畢后會(huì)恢復(fù)回到原來(lái)的數(shù)據(jù)。
  
命令
  
字節(jié)1
字節(jié)2
字節(jié)3
字節(jié)4
扇區(qū)保護(hù)寄存器編程命令
3DH
  2AH
7FH
9AH
扇區(qū)保護(hù)寄存器編程命令的時(shí)序圖:
       3)扇區(qū)保護(hù)寄存器讀取命令(操作碼:32H)
     要讀取扇區(qū)保護(hù)寄存器,首先要將#CS引腳設(shè)為有效,從SI引腳寫(xiě)入操作碼與三個(gè)字節(jié)。寫(xiě)入后,芯片便可以從SO引腳輸出數(shù)據(jù)。第一個(gè)字節(jié)是扇區(qū)0的內(nèi)容,第二個(gè)字節(jié)是扇區(qū)1的內(nèi)容,最后一個(gè)字節(jié)是扇區(qū)15的內(nèi)容。在最后一個(gè)字節(jié)輸出后,再輸出的數(shù)據(jù)就為未定義數(shù)據(jù)。最后必須要將#CS設(shè)為無(wú)效狀態(tài)以終止扇區(qū)保護(hù)寄存器讀取操作,并使輸出轉(zhuǎn)為高阻態(tài)。
  
命令
  
字節(jié)1
字節(jié)2
字節(jié)3
字節(jié)4
扇區(qū)保護(hù)寄存器讀取命令
32H
  XXH
XXH
XXH
扇區(qū)保護(hù)寄存器的時(shí)序圖:
   4)扇區(qū)保護(hù)寄存器的各個(gè)方面
          扇區(qū)保護(hù)寄存器約可以擦/寫(xiě)10000次。使用者會(huì)很關(guān)心芯片在其應(yīng)用系統(tǒng)中的使用壽命。如果應(yīng)用系統(tǒng)中需要多于10000次對(duì)扇區(qū)保護(hù)寄存器的修改,因?yàn)樗枰R時(shí)性地對(duì)某一個(gè)扇區(qū)不加以保護(hù),那么應(yīng)用系統(tǒng)就要限制自身的使用。要合理地設(shè)計(jì)應(yīng)用系統(tǒng),以使其對(duì)扇區(qū)保護(hù)寄存器的個(gè)性不超過(guò)10000次。
(10)安全措施
       1)扇區(qū)死鎖命令(3DH-2AH-7FH-30H)
              這一命令應(yīng)用于商業(yè)上。芯片可以通過(guò)扇區(qū)死鎖命令對(duì)某一個(gè)扇區(qū)進(jìn)行死鎖,從而使扇區(qū)變?yōu)橹蛔x的。這在應(yīng)用中是很有用的,用來(lái)存儲(chǔ)代碼或安全信息。當(dāng)一個(gè)扇區(qū)被死鎖后,它就不能再被擦除或編程,也不能解鎖。
              要執(zhí)行扇區(qū)死鎖命令,#CS引腳要設(shè)為有效狀態(tài),寫(xiě)入4字節(jié)操作碼序列,一定按正確的順序?qū)懭搿?xiě)入后,再寫(xiě)入3字節(jié)地址。在地址寫(xiě)入后,再將#CS引腳設(shè)為無(wú)效狀態(tài)以初始化一個(gè)內(nèi)部死鎖操作。
              在進(jìn)行死鎖操作的過(guò)程中,狀態(tài)寄存器指示芯片處于忙狀態(tài)。如果操作過(guò)程中掉電,則死鎖操作得不到保證。在這種情況下,使用者應(yīng)讀取扇區(qū)死鎖寄存器以確定相應(yīng)的扇區(qū)是否已經(jīng)死鎖。
  
命令
  
字節(jié)1
字節(jié)2
字節(jié)3
字節(jié)4
扇區(qū)死鎖命令
3DH
  2AH
7FH
30H
         扇區(qū)死鎖命令的時(shí)序圖:
1.      扇區(qū)死鎖寄存器
扇區(qū)死鎖寄存器中包含16個(gè)字節(jié),如下表所示:
  
扇區(qū)號(hào)
  
00A,0B
1 to 15
保護(hù)
見(jiàn)下表
FFH
未保護(hù)
00H
扇區(qū)0(0A,0B)
  
  
0A
0B

  
3,2

  
  
1,0

  
數(shù)據(jù)值
0~7頁(yè)
8~255頁(yè)
7,6
5,4
扇區(qū)0A,0B未保護(hù)
   00
   00
00
00
00H
0A保護(hù)(第0~7頁(yè))
   11
   00
00
00
C0H
0B保護(hù)(第8~255頁(yè))
   00
   11
00
00
30H
扇區(qū)0A(第0~7頁(yè)),0B(第8~255頁(yè))
   11
   11
00
00
F0H
2.      扇區(qū)死鎖寄存器讀取命令(操作碼:35H)
扇區(qū)死鎖寄存器中的數(shù)據(jù)可以讀取以確定扇區(qū)是否被死鎖。要讀取扇區(qū)死鎖寄存器,#CS引腳必須設(shè)為有效,通過(guò)SI引腳寫(xiě)入操作碼與3個(gè)字節(jié)。寫(xiě)入后,扇區(qū)死鎖寄存器中的數(shù)據(jù)將從SO引腳輸出。每一個(gè)字節(jié)是扇區(qū)0(0A,0B)的內(nèi)容,第二個(gè)字節(jié)是扇區(qū)1的內(nèi)容,最后一個(gè)字節(jié)(第16個(gè)字節(jié))是扇區(qū)15的內(nèi)容。16個(gè)字節(jié)都被讀出后,如果產(chǎn)生時(shí)鐘信號(hào),則會(huì)在SO引腳輸出未定義數(shù)據(jù)。
將#CS設(shè)為無(wú)效以終止扇區(qū)死鎖寄存器讀取操作,并將SO引腳轉(zhuǎn)為高阻態(tài)。
  
命令
  
字節(jié)1
字節(jié)2
字節(jié)3
字節(jié)4
扇區(qū)死鎖寄存器讀取命令
35H
  XXH
XXH
XXH
扇區(qū)死鎖寄存器讀取命令的時(shí)序圖:
   2)安全寄存器
          芯片包含有一個(gè)序列化的安全寄存器,用來(lái)存儲(chǔ)唯一的設(shè)備序列碼或密鑰。安全寄存器包含128個(gè)字節(jié),被分為兩個(gè)部分。前64字節(jié)(0~63)是一次性的用戶(hù)編程空間。一旦這64個(gè)字節(jié)被編程,則以后不能再對(duì)其進(jìn)行重編程。后64個(gè)字節(jié)(64~127)由ATMEL編程,以使其包含唯一的數(shù)值。出廠(chǎng)時(shí)編程的數(shù)據(jù)是固定不變的,不能被更改。
  
  
安全寄存器字節(jié)編碼
0
1
……
62
63
64
65
……
126
127
數(shù)據(jù)類(lèi)型
一次性用戶(hù)可以編程
      ATMEL編程固化
1.      安全寄存器編程命令(操作碼:9BH-00H-00H-00H)
安全寄存器中的用戶(hù)可編程部分在編程前是不需要擦除的。
要對(duì)安全寄存器進(jìn)行編程,先要將#CS引腳設(shè)為有效,寫(xiě)入4字節(jié)的操作碼序列。寫(xiě)入后,就可以向芯片寫(xiě)入64字節(jié)的用戶(hù)可編程部分的數(shù)據(jù)。在數(shù)據(jù)寫(xiě)入后,#CS引腳必須設(shè)為無(wú)效,來(lái)初始化一個(gè)編程周期。安全寄存器的編程需要一定的時(shí)間,在此期間狀態(tài)寄存器將指示芯片處于忙狀態(tài)。如果此過(guò)程中掉電,則64字節(jié)的用戶(hù)可編程部分的數(shù)據(jù)不能得到保證。
如果在#CS設(shè)為無(wú)效以前,沒(méi)有寫(xiě)入64個(gè)字節(jié),則沒(méi)有被寫(xiě)入的寄存器單元的值不能得到保證。例如,如果只有兩個(gè)字節(jié)寫(xiě)入,而不是完整的64個(gè)字節(jié),則用戶(hù)可編程部分的后62個(gè)字節(jié)就得不到保證。而如果寫(xiě)入了多于64個(gè)字節(jié),則數(shù)據(jù)會(huì)自動(dòng)返回到開(kāi)頭的位置。而安全寄存器中的用戶(hù)可編程部分只能被編程一次。因此,不可能先編程前兩個(gè)字節(jié),而隨后再編程后62個(gè)字節(jié)。
安全寄存器編程命令利用SRAM數(shù)據(jù)緩沖區(qū)1來(lái)實(shí)現(xiàn)編程。操作完成后,緩沖區(qū)1會(huì)恢復(fù)到原先的數(shù)據(jù)。
安全寄存器編程命令的時(shí)序圖:
2.      安全寄存器讀取命令(77H)
要對(duì)安全寄存器進(jìn)行讀取時(shí),先將#CS引腳設(shè)為有效,寫(xiě)入操作碼與3個(gè)字節(jié)。寫(xiě)入后,在時(shí)鐘信號(hào)的作用下,數(shù)據(jù)將從SO引腳輸出。所有的數(shù)據(jù)都被輸出后,如果時(shí)鐘信號(hào)仍然存在,則會(huì)從SO引腳輸出未定義數(shù)據(jù)。將#CS引腳設(shè)為無(wú)效就會(huì)終止安全寄存器讀取操作并將SO引腳轉(zhuǎn)為高阻態(tài)。
安全寄存器讀取命令的時(shí)序圖:
(11)附加命令
       1)主存儲(chǔ)器頁(yè)到緩存區(qū)轉(zhuǎn)移命令(緩沖區(qū)1 53H 緩沖區(qū)2 55H)
       2)主存儲(chǔ)器頁(yè)和緩存區(qū)比較命令(緩沖區(qū)1 60H 緩沖區(qū)2 61H)
       3)讀取狀態(tài)寄存器命令(操作碼:D7H)
       4)節(jié)電模式和退出節(jié)電模式(操作碼:B9H/ABH)


(12)命令表


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表