|
SPI接口的FLASH ROM AT45DB161D的驅(qū)動方法 (1)芯片介紹 AT45DB161D是串行接口的閃存芯片,可工作在2.5V~2.7V,可廣泛應(yīng)用于數(shù)據(jù)語音、圖像、程序代碼數(shù)據(jù)存儲中。AT45DB161D支持RapidS串行接口,適用于高速場合。RapidS串行接口是與SPI相兼容的,速度可達到66MHz。它包含有17,301,504個位,被組織為4096個頁,每個頁512或528個字節(jié)。除了主存儲器,AT45DB161D還包括兩個SRAM數(shù)據(jù)緩沖區(qū),每個緩沖區(qū)512/528個字節(jié)。在主存儲器正在編程時,緩沖區(qū)是允許接收數(shù)據(jù)的,并且支持數(shù)據(jù)流式寫入。與并行FLASH儲存器不同,它采用RapidS串行接口,從而大大減少了可用引腳數(shù)量,同時也提高了系統(tǒng)可靠性,降低了開關(guān)噪聲,縮小了封裝體積。可以應(yīng)用于商業(yè)、工業(yè)等需要高密度、低引腳數(shù)、低電壓與低功耗的應(yīng)用場合。 AT45DB161D允許簡單的在系統(tǒng)重新編程,而無需輸入高編程電壓。芯片可以采用2.5V~3.6V或2.7V~3.6V單電源供電,進行編程與讀取操作。它可以通過#CS來進行使能,并通過三線接口(SI、SO、SCK)進行數(shù)據(jù)通信。 (2)引腳配置與封裝 1.芯片封裝圖
2.引腳功能詳述 | 符號 | | | | | 片選:#CS用以選中芯片。當#CS被設(shè)置為無效狀態(tài)時,芯片則不被選中,并且處于閑置狀態(tài)(不是深度睡眠狀態(tài)),輸出引腳SO處于高阻態(tài)。當芯片未被選中時,從輸入引腳SI輸入的數(shù)據(jù)將不被接受。 #CS引腳上的下降沿將會啟動一個操作,而上跳沿則會結(jié)束一個操作。在一個內(nèi)部操作如芯片內(nèi)部的編程或擦除周期內(nèi),芯片不會進入閑置狀態(tài),直到操作完畢。 | | | | 串行時鐘:此引腳用來向芯片提供時鐘信號,有來控制數(shù)據(jù)流的出入。SI引腳上的命令、地址與輸入數(shù)據(jù)在時鐘SCK的上升沿被寫入,而SO引腳上的輸出數(shù)據(jù)則在時鐘的下降沿變化。 | | | | 串行輸入:SI引腳用來向芯片以移位方式寫入數(shù)據(jù)。SI引腳上的所有數(shù)據(jù)輸入包括命令與地址。SI上的數(shù)據(jù)在時鐘的上升沿寫入芯片。 | | | | 串行輸出:SO引腳用來從芯片以移位方式輸出數(shù)據(jù)。SI上的數(shù)據(jù)在時鐘的下降沿變化。 | | | | 寫保護:當#WP被設(shè)置為有效時芯片的扇區(qū)將被保護起來,以防止編程與擦除對數(shù)據(jù)的破壞。但是扇區(qū)保護使能與扇區(qū)死鎖命令仍然可以被芯片識別。#WP引腳在內(nèi)部被拉高,可以懸空。但是仍然建議在外部接到VCC。 | | | | 復(fù)位:#RESET引腳上的低電平會終止正在處理的操作并復(fù)位內(nèi)部狀態(tài)機到閑置狀態(tài)。#RESET引腳上的低電平會使芯片一直處于復(fù)位狀態(tài)。當#RESET上轉(zhuǎn)為高電平后,才能進行正常的操作。 芯片內(nèi)部設(shè)置上電復(fù)位電路。當此引腳不用時,外部接到高電平。 | | | | 就緒/忙碌狀態(tài)指示:此引腳是漏極開路的輸出引腳。當芯片處于忙狀態(tài)時(內(nèi)部操作過程中)此引腳為低電平,此引腳在正常狀態(tài)下為高電平(外部接上拉電阻)。當正在進行編程/擦除操作,比較操作與頁-緩沖區(qū)傳送時,被拉低。 忙狀態(tài)指示FLASH儲存陣列與某一個緩沖區(qū)不能被操作,而對另一個緩沖區(qū)的讀與寫操作仍然可以進行。 | | | | | | | | 地:此引腳應(yīng)與系統(tǒng)地接在一起。 | | |
(3)AT45DB161D的功能框圖: (4)存儲器陣列: AT45DB161D的儲存器陣列被分為3個級別的粒度,分別為扇區(qū)、塊與頁。下面的“存儲器結(jié)構(gòu)圖”對各個級別進行了分析,詳細說明了每個扇區(qū)與塊的頁數(shù)。所有的編程操作都是針對于頁的。擦除操作可以作用于芯片、扇區(qū)、塊或頁。 扇區(qū)結(jié)構(gòu): | (扇區(qū) 0A)=8頁 4096 /4224 字節(jié) | (扇區(qū) 0B)=248頁 126,976/130,944字節(jié) | (扇區(qū) 1 )=256頁 131,072/135,168字節(jié) | (扇區(qū) 2 )=256頁 131,072/135,168字節(jié) | | (扇區(qū) 14)=256頁 131,072/135,168字節(jié) | (扇區(qū) 15)=256頁 131,072/135,168字節(jié) |
塊結(jié)構(gòu): 頁結(jié)構(gòu): (5)芯片操作: 芯片的操作是通過單片機的指令來完成的。指令列表與指令操作碼在后面的“指令表”中有詳細的說明。一個有效的指令由#CS的下降沿來指示它的開始,隨后是一個有意義的8位操作碼與緩存區(qū)或主存儲器的地址。當#CS為低時,由時鐘SCK引腳來控制由SI引腳寫入的操作碼與緩存區(qū)或主存儲器的地址。所有的指令、地址與數(shù)據(jù)在傳輸時都是高位在前的。 528字節(jié)模式下,緩沖區(qū)中數(shù)據(jù)的地址由BFA9~BFA0來表示。主存儲器中數(shù)據(jù)的地址由PA11~PA0與BA9~BA0來表示,PA11~PA0用來表示12位頁地址,BA9~BA0表示10位的頁內(nèi)字節(jié)地址。在512字節(jié)模式下,緩沖區(qū)中數(shù)據(jù)地址由BFA8~BFA0來表示。主存儲器中數(shù)據(jù)的地址由A20~A0來表示,其中A20~A9是12位的頁地址,A8~A0為9位的頁內(nèi)字節(jié)地址。
(6)讀命令 使用相應(yīng)的操作碼,數(shù)據(jù)可以從主存儲器或某一個SRAM緩沖區(qū)中讀出。 1. 連續(xù)讀(命令碼:E8H):可以達到66MHz 在提供了主存儲器陣列的開始地址后,在時鐘信號的作用下連續(xù)讀命令可以從芯片中以數(shù)據(jù)流方式進行數(shù)據(jù)讀取,而無需額外的地址信息或控制信號。芯片內(nèi)部的地址計數(shù)器會在每一個時鐘周期后自動自增,因而可以在不用寫入新的地址的情況下繼續(xù)讀取下一個字節(jié)。要進行一次對頁(528字節(jié))的連續(xù)讀操作,操作碼E8H必須要寫入芯片中,隨后是3個字節(jié)的地址(22位的頁與字節(jié)地址序列)與4個無關(guān)字節(jié)。開始的12位(PA11~PA0)來用表示將要讀取的數(shù)據(jù)在主存儲器中的頁地址。后10位(BA9~BA0)用來表示字節(jié)在頁中的地址。而要進行一次對頁(512字節(jié))的連續(xù)讀時,操作碼E8H同樣也要先寫入到芯片中,隨后是三個字節(jié)的地址與4個無關(guān)字節(jié)。21位序列中前12位(A20~A9)表示要讀的數(shù)據(jù)在主存儲器的頁地址,后9位(A8~A0)是頁內(nèi)的字節(jié)地址。那些無關(guān)字節(jié)在讀操作初始化時是必需的。在無關(guān)字節(jié)后,SCK引腳上的時鐘信號使數(shù)據(jù)從SO引腳輸出。 在操作寫入地址字節(jié)、無關(guān)字節(jié)與數(shù)據(jù)讀取的過程中,#CS引腳上要保持低電平。連續(xù)讀到達一個頁的結(jié)尾時,芯片會從下個頁的開頭繼續(xù)讀取,頁間的跨越是沒有延時的。當主存儲器的最后一個位被讀出后,芯片會自動返回到第一頁的開頭繼續(xù)讀取。與頁間跨越相同的,從存儲器陣列結(jié)尾轉(zhuǎn)到開頭也是無延時的。 2. 連續(xù)讀(命令碼:0BH 高速模式):可以達到66MHz 此命令可以在最高頻率以下的任意時鐘頻率下通過串行接口對主存儲器進行高速讀取。要進行一次連續(xù)讀(頁容量為528字節(jié)),#CS必須處于有效狀態(tài),然后操作碼0BH必須寫入到芯片中,隨后是3字節(jié)地址與一個字節(jié)。22位地址序列中的前12位(PA11~PA0)表示將要讀取的數(shù)據(jù)在主存儲器中的頁地址,后10位(BA9~BA0)表示頁內(nèi)的字節(jié)地址。要進行一次連續(xù)讀(頁容量為512字節(jié)),同樣地,操作碼OBH也要先寫入芯片中,隨后是3字節(jié)地址(A20~A0)與一個字節(jié)。在此字節(jié)后數(shù)據(jù)將在SCK引腳上的時鐘信號作用下從SO引腳輸出。 同1中的內(nèi)容。 3. 連續(xù)讀(命令碼:03H 低速模式):可以達到33MHz 大部分與高速模式下的連續(xù)讀是相同的。不同的在于3字節(jié)地址寫入后無需再寫入一個字節(jié)。 4. 主存儲器頁讀(操作碼:D2H) 主存儲器頁讀允許直接從4096個頁中某一個頁中讀取數(shù)據(jù),而不影響緩沖區(qū)中的數(shù)據(jù)。其它的內(nèi)容與1相同。 5. 緩存區(qū)讀(操作碼:緩沖區(qū)1D4H或D1H 緩沖區(qū)2 D6H或D3H) 主存儲陣列中的數(shù)據(jù)可以放在SRAM數(shù)據(jù)緩存區(qū)內(nèi),使用緩存區(qū)讀命令允許直接從緩沖區(qū)中讀取數(shù)據(jù)。操作碼的選用要根據(jù)時鐘頻率而定。D4H、D6H與D1H、D3H可以分別使用在頻率低于66MHz與33MHz的情況下。要進行一次緩沖區(qū)讀(528字節(jié)),操作碼必須先寫入芯片,隨后是3字節(jié)地址(14個無關(guān)位與10位緩沖區(qū)地址)。要進行一次緩沖區(qū)讀(512字節(jié)),操作同樣也要先寫入芯片,隨后是3字節(jié)地址(15個無關(guān)位與9位緩沖區(qū)地址)。在地址字節(jié)后,一個無關(guān)字節(jié)必須要寫入芯片以初始化讀操作。在操作碼、地址字節(jié)、無關(guān)字節(jié)寫入的過程中,#CS引腳必須保持低電平。當?shù)竭_緩沖區(qū)的結(jié)尾時,芯片會自動返回到緩沖區(qū)的開始。#CS的上跳沿將終止讀操作。 (7)編程與擦除命令 1. 緩沖區(qū)寫(操作碼:緩沖區(qū)1 84H 緩沖區(qū)2 87H) 數(shù)據(jù)可以通過SI引腳寫入緩沖區(qū)1或2中。要將數(shù)據(jù)寫入緩沖區(qū)(528字節(jié)),操作碼必須先寫入芯片,隨后是3字節(jié)地址(14位無關(guān)位與10位緩沖區(qū)地址 BFA9~BFA0)。這10位地址表示要寫入的數(shù)據(jù)的第一個字節(jié)的緩沖區(qū)地址。李將數(shù)據(jù)寫入緩沖區(qū)(512字節(jié)),操作碼同樣也要先寫入芯片,隨后是3字節(jié)地址(15個無關(guān)位與9位緩沖區(qū)地址 BFA8~BFA0)。這9位緩沖區(qū)地址表示要寫入的每個字節(jié)的地址。在最后一個地址位寫入后,就可以開始向其寫入數(shù)據(jù)了。如果到達了緩沖區(qū)的結(jié)尾,則芯片會自動返回到緩沖區(qū)的開頭。數(shù)據(jù)會繼續(xù)寫入到緩沖區(qū)中,直到#CS引腳上產(chǎn)生上跳沿為止。 2. 緩沖向主存儲器頁編程(帶預(yù)擦除操作碼:緩沖區(qū)1 83H 緩沖區(qū)2 86H) 被寫入到緩沖中的數(shù)據(jù)可以被編程到主存儲器中。先寫入操作碼,對于頁容量為528字節(jié)的情況,隨后是3字節(jié)地址(2個無關(guān)位,12位頁地址 PA11~PA0 與10個無關(guān)位)。而對于容量為512字節(jié)的情況,操作碼寫入后,隨后是3字節(jié)地址(3個無關(guān)位,12位的地址位 A20~A9 與9個無關(guān)位)。當#CS引腳的上跳沿時,芯片會先擦除主存儲器中所選中的頁(擦除后都為邏輯1),然后將緩沖區(qū)中的數(shù)據(jù)編程到頁中。擦除與編程操作都是內(nèi)部進行的,并會在一定時間內(nèi)完成。在這期間,狀態(tài)寄存器與RDY/#BUSY都會指示芯片處于忙狀態(tài)。 3. 緩沖區(qū)向主存儲器頁編程(無預(yù)擦除操作碼:緩沖區(qū)1 88H 緩沖區(qū)2 89H) 主存儲器中已經(jīng)被擦除的頁可以通過此操作由緩沖區(qū)向其編程。與有預(yù)擦除的操作不同就在于它是無預(yù)擦除的。 4. 頁擦除(操作碼:81H) 頁擦除操作可以獨立對主存儲陣列中某一個頁進行擦除,隨后可以對該頁進行緩沖區(qū)向主存儲器頁編程(無預(yù)擦除)操作。對于頁容量為528字節(jié)的情況,先要寫入操作碼,隨后是3字節(jié)地址(2個無關(guān)位,12位頁地址 PA11~P10 與10個無關(guān)位)。對于頁容量512字節(jié)的情況,也要先寫入操作碼,隨后是3字節(jié)地址(3個無關(guān)位,12位頁地址 A20~A9 與9個無關(guān)位)。當#CS引腳上產(chǎn)生上跳沿時,芯片會擦除所選中的頁(擦除后都為邏輯1)。擦除操作是內(nèi)部進行的,并會在一定時間內(nèi)完成。在這期間,狀態(tài)寄存器與RDY/#BUSY都會指示芯片處于忙狀態(tài)。 5. 塊擦除(操作碼:50H) 塊擦除操作可以使塊內(nèi)的8個頁一次全部擦除。這個命令可以用在有大量數(shù)據(jù)需要寫入的時候,可以避免多次調(diào)用寫擦除命令。在頁容量為528字節(jié)時,操作碼先要寫入芯片,隨后是3字節(jié)地址(2個無關(guān)位,9位頁地址 PA11~PA3 ,13個無關(guān)位)。要進行一次塊擦除操作(頁容量512字節(jié)),也要先寫入操作碼,隨后是3字節(jié)地址(3個無關(guān)位,9位頁地址 A20~A12與12個無關(guān)位)。當#CS上產(chǎn)生上跳沿時,芯片將擦除選中的塊。擦除操作是內(nèi)部進行的,并會在一定時間內(nèi)完成。在這期間,狀態(tài)寄存器與RDY/#BUSY都會指示芯片處于忙狀態(tài)。 塊擦除地址如下表所示:
6. 扇區(qū)擦除(操作碼:7CH) 扇區(qū)擦除命令可以獨立對主存儲器中的某一個扇區(qū)進行擦除。一共有16個扇區(qū),每次扇區(qū)擦除操作只能對一個扇區(qū)進行擦除。頁容量為528字節(jié)時,要對扇區(qū)0A或扇區(qū)0B進行擦除,需要先寫入操作碼,隨后是3字節(jié)地址(2個無關(guān)位,9位頁地址 PA11~PA3 與13個無關(guān)位)。要擦除扇區(qū)1~15,也要先寫入操作碼,隨后是3字節(jié)地址(2個無關(guān)位,4位頁地址PA11~PA8 與18個無關(guān)位)。頁容量為512字節(jié)時,要對扇區(qū)0A或扇區(qū)0B進行擦除,先寫入操作碼,隨后是3字節(jié)地址(3個無關(guān)位,9位頁地址 A20~A12 與12個無關(guān)位)。要擦除扇區(qū)1~15,也要先寫入操作碼,隨后是4字節(jié)地址(3個無關(guān)位,4位頁地址 A20~A17 與17個無關(guān)位)。擦除操作是內(nèi)部進行的,并會在一定時間內(nèi)完成。在這期間,狀態(tài)寄存器與RDY/#BUSY都會指示芯片處于忙狀態(tài)。 7. 片擦除(操作碼:C7H、94H、80H與9AH) 主存儲器可以使用片擦除命令一次全部擦除。要進行一次片擦除操作,先要寫入操作碼,無須寫入地址,交且操作過程中任何寫入的數(shù)據(jù)都是無效的。操作碼寫入后,#CS引腳上的上跳沿可以開始擦除過程。在操作過程中,狀態(tài)寄存器指示芯片處于忙狀態(tài)。那些被保護或死鎖的扇區(qū)不受此命令的影響,其數(shù)據(jù)不會發(fā)生改變。只有那些沒有保護或死鎖的扇區(qū)會被擦除。芯片在進行擦除操作的過程中#WP引腳可以設(shè)為有效,但是在內(nèi)部擦除周期完成前保護不會生效。 8. 通過緩沖區(qū)對主存儲器頁編程(操作碼:緩沖區(qū)1 82H 緩沖區(qū)2 85H) 這個命令是緩沖區(qū)寫與緩沖區(qū)向主存儲器頁編程(帶預(yù)擦除)兩條命令的綜合。數(shù)據(jù)先從輸入引腳SI寫入緩沖區(qū)1或2,再從緩沖區(qū)向指定的頁編程。在頁容量為528字節(jié)時,要進行一次此操作,先要寫入操作碼,再將數(shù)據(jù)寫入到緩沖區(qū)中,然后向芯片寫入3字節(jié)地址(2個無關(guān)位,12位頁地址 PA11~PA0 與10位緩沖區(qū)地址 BFA9~BFA0)。在頁容量為512字節(jié)時,要進行此操作,也要先將操作碼寫入,再將數(shù)據(jù)寫入到緩沖區(qū)中,隨后是3字節(jié)地址(3個無關(guān)位,12位頁地址 A20~A9 與9位緩沖區(qū)地址 BFA8~BFA0)。所有的地址字節(jié)都被寫入后,就可以通過輸入引腳向芯片寫入數(shù)據(jù)了。當#CS引腳上出現(xiàn)上跳沿時,芯片先會擦除主存儲器所選中的頁,然后將存在緩沖區(qū)中的數(shù)據(jù)編程到頁中去。編程操作是在芯片內(nèi)部進行的,并會在一定時間內(nèi)完成。在這期間,狀態(tài)寄存器與RDY/#BUSY都會指示芯片處于忙狀態(tài)。 (8)扇區(qū)保護 AT45DB161D提供硬件與軟件兩種方法對扇區(qū)進行保護,以使其避免數(shù)據(jù)的破壞。軟件的方法是通過軟件命令來實現(xiàn)扇區(qū)保護的使能與禁止的。而硬件的方法則是通過使用#WP引腳來實現(xiàn)的。通過“扇區(qū)保護寄存器”對哪一個扇區(qū)保護或不保護進行選擇。要知道某一個扇區(qū)是否有保護,可以查詢狀態(tài)寄存器。 1. 扇區(qū)保護的軟件方法 1)扇區(qū)保護使能命令(操作碼:3DH-2AH-7FH-A9H) 指定的扇區(qū)通過使扇區(qū)保護使能命令可使其在編程與擦除操作中得以保護。要采用方法使能扇區(qū)保護,#CS引腳必須處于有效狀態(tài),從輸入引腳SI寫入4字節(jié)命令序列。寫入后,#CS引腳轉(zhuǎn)為無效狀態(tài),此時扇區(qū)保護就被使能了。 扇區(qū)保護使能命令的時序圖: 2)扇區(qū)保護禁止命令(操作碼:3DH-2AH-7FH-9AH) 用軟件方法來禁止扇區(qū)保護時,除了寫入的操作碼序列不事,其它與扇區(qū)保護使能命令是相同的。 扇區(qū)保護禁止命令的時序圖:
3)軟件控制保護的各個方面 軟件控制保護在#WP沒有或不能被單片機控制的情況下是很有用的。在這種情況下,#WP可以懸空(#WP引腳在內(nèi)部拉高),扇區(qū)保護可以由以上兩種命令來控制。 (9)保護的硬件控制 #WP引腳設(shè)為有效狀態(tài)后,在扇區(qū)保護寄存器中設(shè)置為保護的扇區(qū)及扇區(qū)保護寄存器自身在編程與擦除操作中可以得到保護。扇區(qū)保護寄存器與設(shè)置為保護的任何一個扇區(qū),都不能被編程或擦除。要改變扇區(qū)保護寄存器的值只能將#WP設(shè)為無效。如果#WP被接到地,扇區(qū)保護寄存器的內(nèi)容不能被改變。如果#WP被設(shè)為無效或接到VCC,則其內(nèi)容可以被改變。 #WP會使保護的軟件控制方法無效。例如:如果扇區(qū)原先并沒有被扇區(qū)保護使能命令保護,那么簡單的把#WP設(shè)為有效狀態(tài)就可以使能扇區(qū)保護。當#WP引腳設(shè)為有效狀態(tài)而扇區(qū)保護使能命令沒有執(zhí)行,扇區(qū)保護不會被使能。如果在#WP引腳設(shè)為有效狀態(tài)前扇區(qū)保護使能命令被執(zhí)行了,那么只簡單地將#WP設(shè)為無效并不能禁止扇區(qū)保護。在這種情況下,扇區(qū)保護禁止命令需要在#WP引腳無效時執(zhí)行來使扇區(qū)保護禁止。在#WP引腳為有效時,扇區(qū)保護禁止命令會被忽略。 1. 扇區(qū)保護寄存器 非易揮發(fā)的(掉電不丟失)扇區(qū)保護寄存器指示哪些扇區(qū)被保護或未被保護。扇區(qū)保護寄存器包括16個字節(jié),從第0到第15字節(jié)的不同值確定了扇區(qū)0到15是否被保護。扇區(qū)保護寄存器是可以由用戶修改的,但在生新程序前必須先擦除。 扇區(qū)保護寄存器: 扇區(qū)0(0A,0B)
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 扇區(qū)0A(第0~7頁),0B(第8~255頁) | | | | | |
注:從ATMEL出廠后0~15字節(jié)默認值為00H。 1)擦除扇區(qū)保護寄存器命令(操作碼:3DH-2AH-7FH-CFH) 為了修改扇區(qū)保護寄存器的值,必須先使用擦除扇區(qū)保護寄存器命令將其擦除。 要擦除扇區(qū)保護寄存器,#CS必須設(shè)置為有效,然后將4字節(jié)的操作碼序列寫入芯片。在操作碼寫入后,需要將#CS設(shè)置為無效,以初始化一個擦除操作。扇區(qū)保護寄存器的擦除需要一定的時間,此期間狀態(tài)寄存器會指示芯片處于忙狀態(tài)。如果在進行擦除的過程中掉電,則扇區(qū)保護寄存器的擦除得不到保證。 擦除扇區(qū)保護寄存器命令的時序圖: 2)扇區(qū)保護寄存器編程命令(操作碼:3DH-2AH-7FH-FCH) 在扇區(qū)保護寄存器被擦除后,就可以使用扇區(qū)保護寄存器編程命令對其進行重新編程。 要對扇區(qū)保護寄存器進行編程,必須先將#CS設(shè)為有效,從SI引腳寫入4字節(jié)操作碼序列。寫入后,再將要寫入扇區(qū)保護寄存器的內(nèi)容寫入。扇區(qū)保護寄存器中包括有16個字節(jié),所以要寫入16個字節(jié)。每個字節(jié)對應(yīng)對寄存器中的每個單元。 16個字節(jié)被寫入后,#CS引腳需要設(shè)為無效以初始化一個編程周期。編程過程需要一定的時間,在此期間狀態(tài)寄存器指示芯片處于忙狀態(tài)。如果在進行編程的過程中掉電,則扇區(qū)保護寄存器中的內(nèi)容的修改得不到保證。 如果在#CS引腳無效以前沒有寫入適當數(shù)量的字節(jié),則沒有字節(jié)與其相對應(yīng)的寄存器單元所對應(yīng)扇區(qū)保護狀態(tài)的改變不能保證。 如果扇區(qū)保護寄存器中的字節(jié)不是00H或FFH,則相應(yīng)單元所對應(yīng)的扇區(qū)保護狀態(tài)的改變不能保證。 扇區(qū)保護寄存器編程命令利用內(nèi)部SRAM數(shù)據(jù)緩沖區(qū)1來實現(xiàn)編程操作。緩沖區(qū)1的數(shù)據(jù)在命令執(zhí)行完畢后會恢復(fù)回到原來的數(shù)據(jù)。 扇區(qū)保護寄存器編程命令的時序圖: 3)扇區(qū)保護寄存器讀取命令(操作碼:32H) 要讀取扇區(qū)保護寄存器,首先要將#CS引腳設(shè)為有效,從SI引腳寫入操作碼與三個字節(jié)。寫入后,芯片便可以從SO引腳輸出數(shù)據(jù)。第一個字節(jié)是扇區(qū)0的內(nèi)容,第二個字節(jié)是扇區(qū)1的內(nèi)容,最后一個字節(jié)是扇區(qū)15的內(nèi)容。在最后一個字節(jié)輸出后,再輸出的數(shù)據(jù)就為未定義數(shù)據(jù)。最后必須要將#CS設(shè)為無效狀態(tài)以終止扇區(qū)保護寄存器讀取操作,并使輸出轉(zhuǎn)為高阻態(tài)。 扇區(qū)保護寄存器的時序圖: 4)扇區(qū)保護寄存器的各個方面 扇區(qū)保護寄存器約可以擦/寫10000次。使用者會很關(guān)心芯片在其應(yīng)用系統(tǒng)中的使用壽命。如果應(yīng)用系統(tǒng)中需要多于10000次對扇區(qū)保護寄存器的修改,因為它需要臨時性地對某一個扇區(qū)不加以保護,那么應(yīng)用系統(tǒng)就要限制自身的使用。要合理地設(shè)計應(yīng)用系統(tǒng),以使其對扇區(qū)保護寄存器的個性不超過10000次。 (10)安全措施 1)扇區(qū)死鎖命令(3DH-2AH-7FH-30H) 這一命令應(yīng)用于商業(yè)上。芯片可以通過扇區(qū)死鎖命令對某一個扇區(qū)進行死鎖,從而使扇區(qū)變?yōu)橹蛔x的。這在應(yīng)用中是很有用的,用來存儲代碼或安全信息。當一個扇區(qū)被死鎖后,它就不能再被擦除或編程,也不能解鎖。 要執(zhí)行扇區(qū)死鎖命令,#CS引腳要設(shè)為有效狀態(tài),寫入4字節(jié)操作碼序列,一定按正確的順序?qū)懭搿懭牒螅賹懭?字節(jié)地址。在地址寫入后,再將#CS引腳設(shè)為無效狀態(tài)以初始化一個內(nèi)部死鎖操作。 在進行死鎖操作的過程中,狀態(tài)寄存器指示芯片處于忙狀態(tài)。如果操作過程中掉電,則死鎖操作得不到保證。在這種情況下,使用者應(yīng)讀取扇區(qū)死鎖寄存器以確定相應(yīng)的扇區(qū)是否已經(jīng)死鎖。 扇區(qū)死鎖命令的時序圖: 1. 扇區(qū)死鎖寄存器 扇區(qū)死鎖寄存器中包含16個字節(jié),如下表所示: 扇區(qū)0(0A,0B)
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 扇區(qū)0A(第0~7頁),0B(第8~255頁) | | | | | |
2. 扇區(qū)死鎖寄存器讀取命令(操作碼:35H) 扇區(qū)死鎖寄存器中的數(shù)據(jù)可以讀取以確定扇區(qū)是否被死鎖。要讀取扇區(qū)死鎖寄存器,#CS引腳必須設(shè)為有效,通過SI引腳寫入操作碼與3個字節(jié)。寫入后,扇區(qū)死鎖寄存器中的數(shù)據(jù)將從SO引腳輸出。每一個字節(jié)是扇區(qū)0(0A,0B)的內(nèi)容,第二個字節(jié)是扇區(qū)1的內(nèi)容,最后一個字節(jié)(第16個字節(jié))是扇區(qū)15的內(nèi)容。16個字節(jié)都被讀出后,如果產(chǎn)生時鐘信號,則會在SO引腳輸出未定義數(shù)據(jù)。 將#CS設(shè)為無效以終止扇區(qū)死鎖寄存器讀取操作,并將SO引腳轉(zhuǎn)為高阻態(tài)。 扇區(qū)死鎖寄存器讀取命令的時序圖: 2)安全寄存器 芯片包含有一個序列化的安全寄存器,用來存儲唯一的設(shè)備序列碼或密鑰。安全寄存器包含128個字節(jié),被分為兩個部分。前64字節(jié)(0~63)是一次性的用戶編程空間。一旦這64個字節(jié)被編程,則以后不能再對其進行重編程。后64個字節(jié)(64~127)由ATMEL編程,以使其包含唯一的數(shù)值。出廠時編程的數(shù)據(jù)是固定不變的,不能被更改。 1. 安全寄存器編程命令(操作碼:9BH-00H-00H-00H) 安全寄存器中的用戶可編程部分在編程前是不需要擦除的。 要對安全寄存器進行編程,先要將#CS引腳設(shè)為有效,寫入4字節(jié)的操作碼序列。寫入后,就可以向芯片寫入64字節(jié)的用戶可編程部分的數(shù)據(jù)。在數(shù)據(jù)寫入后,#CS引腳必須設(shè)為無效,來初始化一個編程周期。安全寄存器的編程需要一定的時間,在此期間狀態(tài)寄存器將指示芯片處于忙狀態(tài)。如果此過程中掉電,則64字節(jié)的用戶可編程部分的數(shù)據(jù)不能得到保證。 如果在#CS設(shè)為無效以前,沒有寫入64個字節(jié),則沒有被寫入的寄存器單元的值不能得到保證。例如,如果只有兩個字節(jié)寫入,而不是完整的64個字節(jié),則用戶可編程部分的后62個字節(jié)就得不到保證。而如果寫入了多于64個字節(jié),則數(shù)據(jù)會自動返回到開頭的位置。而安全寄存器中的用戶可編程部分只能被編程一次。因此,不可能先編程前兩個字節(jié),而隨后再編程后62個字節(jié)。 安全寄存器編程命令利用SRAM數(shù)據(jù)緩沖區(qū)1來實現(xiàn)編程。操作完成后,緩沖區(qū)1會恢復(fù)到原先的數(shù)據(jù)。 安全寄存器編程命令的時序圖: 2. 安全寄存器讀取命令(77H) 要對安全寄存器進行讀取時,先將#CS引腳設(shè)為有效,寫入操作碼與3個字節(jié)。寫入后,在時鐘信號的作用下,數(shù)據(jù)將從SO引腳輸出。所有的數(shù)據(jù)都被輸出后,如果時鐘信號仍然存在,則會從SO引腳輸出未定義數(shù)據(jù)。將#CS引腳設(shè)為無效就會終止安全寄存器讀取操作并將SO引腳轉(zhuǎn)為高阻態(tài)。 安全寄存器讀取命令的時序圖: (11)附加命令 1)主存儲器頁到緩存區(qū)轉(zhuǎn)移命令(緩沖區(qū)1 53H 緩沖區(qū)2 55H) 2)主存儲器頁和緩存區(qū)比較命令(緩沖區(qū)1 60H 緩沖區(qū)2 61H) 3)讀取狀態(tài)寄存器命令(操作碼:D7H) 4)節(jié)電模式和退出節(jié)電模式(操作碼:B9H/ABH)
(12)命令表
|