AT45DB041芯片技術介紹
AT45DB041是ATMEL公司的新型FLASH芯片。該芯片具有容量大、讀寫速度快、外圍電路少等諸多優(yōu)點,更為重要的是該芯片可最低工作在2.5V,工作電流僅為4mA,因此在移動通信、便攜等場合得到了廣泛的應用。
AT45DB041芯片工作原理與硬件連接
AT45DB041芯片中的數(shù)據(jù)按頁存放,主存共2048頁,每頁 264字節(jié),所以總?cè)萘繛?28K字節(jié)(約4M比特)。存放在主存中的數(shù)據(jù)掉電不丟失。除了主存以外,AT45DB041還有兩個容量為264字節(jié)的數(shù)據(jù)緩存。緩存可以用作主存與外部進行數(shù)據(jù)交換時的緩沖區(qū)域,也可以暫存一些臨時數(shù)據(jù)。緩存讀寫方便迅速,但掉電數(shù)據(jù)會丟失。AT45DB041數(shù)據(jù)讀寫采用串行方式,讀寫速度快,從頁到緩存的傳輸時間為80 s左右,并且兼容CMOS和TTL輸入和輸出。
AT45DB041通過片選管腳/CS使能,通過串行輸出(SO)和串行輸入(SI)進行數(shù)據(jù)讀和寫。由串行時鐘(SCK)對讀寫進行控制。
設備運行受微處理器的指令控制。一條有效的指令起始于/CS管腳的下降沿,并跟隨相應的8位操作碼和指定的緩存或主存地址碼。當/CS管腳為低時,輪換時鐘管腳(SCK)控制操作碼和指定的緩存或主存地址碼通過SI口的載入。所有的指令、地址和數(shù)據(jù)都從高字節(jié)開始傳送。
數(shù)據(jù)讀取
讀緩存:通過不同的操作碼可選擇讀取兩個緩存中的其中一個(操作碼54H用作讀緩存1,而操作碼56H用作讀緩存2)。為了實現(xiàn)讀緩存的操作,在8位操作碼后必須跟有15位任意碼,9位地址碼和8位任意碼。其中9位地址碼(BFA8-BFA0)被用作指定要讀取的首字節(jié)。在輪換時鐘SCK的控制下,從SI載入操作碼、地址碼、任意碼。當載入結束后,在SCK輪換時鐘的控制下,緩存中的數(shù)據(jù)就可以從SO讀出。當讀到緩存的末尾時,設備將繼續(xù)從緩存的開端重讀。在這整個過程中/CS必須保持低電平。讀緩存結束后,/CS上一個從低到高的電平跳變將終止讀操作。
主存頁到緩存的傳送:一頁數(shù)據(jù)可以從主存?zhèn)髦辆彺?或2。8位操作碼(53H用于緩存1,55H用于緩存2)后跟有4位保留位,11位用于指定目的頁的地址位(PA10-PA0),和9位任意碼,在輪換時鐘SCK的控制下從SI載入。在這一過程中/CS管腳必須保持低電位。當載入結束后,在/CS上檢測到一個由低到高的電平跳變后,主存頁中的數(shù)據(jù)開始傳送至緩存。在數(shù)據(jù)傳送的過程中,狀態(tài)寄存器將指示狀態(tài)忙。
數(shù)據(jù)寫入
寫緩存:在SCK的控制下,8位的操作碼(84H用于緩存1,87H用于緩存2)后面跟著15位任意碼和9位地址碼(BFA8-BFA0)由SI載入,其中9位地址碼指定了緩存中被寫的首字節(jié),數(shù)據(jù)緊隨著地址碼輸入。/CS上一個由低到高的跳變,將結束寫緩存操作。
帶有內(nèi)置擦除的緩存至主存頁的傳送:8位的操作碼(83H用于緩存 1,86H用于緩存2)后跟有4位保留位,11位指定要寫入的主存頁的地址碼(PA10-PA0),和9位任意碼,在輪換時鐘SCK的控制下從SI載入。當/CS上檢測到一個由低到高的跳變時,器件將首先擦除被選中的主存頁,然后將儲存在緩存中的數(shù)據(jù)寫入該頁。擦除和寫入的過程都是自動進行的,這一進程不超過20ms。在這個時間里,狀態(tài)寄存器將指示狀態(tài)忙。狀態(tài)寄存器值讀取:讀狀態(tài)寄存器的值可以用來確定設備的忙閑狀態(tài)。忙閑狀態(tài)通過寄存器的第7位指示。如果第7位為1,則設備位于空閑狀態(tài)并可接收下一條指令。如果為0,則設備忙。在載入8位操作碼57H后,從SO上可以讀出1字節(jié)的狀態(tài)寄存器的值。
寫保護(/WP) B041具有的寫保護功能僅對主存的前256頁有效。當/WP管腳為低電平時,FLASH禁止對主存的前256頁進行寫操作(只讀),但主存的其它頁并不受影響,仍然可以進行讀寫。AT45DB041的選擇性寫保護功能為用戶的使用提供了很大的便利,用戶可以將非常重要的數(shù)據(jù),如系統(tǒng)參數(shù)、密碼和身份信息等存入主存的前256頁,并將/WP置低,使這些數(shù)據(jù)處于寫保護狀態(tài),以保證這些數(shù)據(jù)不會被誤擦除。而與此同時,用戶仍能對其它地址進行讀寫。如果用戶將 /WP管腳懸空或接地,FLASH將不具備寫保護功能,所有的主存頁都可進行讀寫。
復位(/RESET) B041采用低電平復位,即當/RESET管腳出現(xiàn)低電平(<0.6V)時,芯片停止工作,待/RESET管腳的電平被拉高(>2.0V) 后,恢復正常工作。為了避免接通電源時,由于電壓不穩(wěn)可能會對芯片正常工作造成影響,所以在使用時,最好在系統(tǒng)開機后延時10ms,再對FLASH進行操作AT45DB041芯片資料下載
與微處理器的接口
B041外圍電路非常簡單,可以很方便地與微控制器連接。SO、SI、SCK、/CS,/WP分別與微處理器的通用I/O相連即可。
AT45DB041軟件設計
下面主要對AT45DB041的數(shù)據(jù)讀寫作簡要介紹。
AT45DB041進行數(shù)據(jù)讀寫主要包括操作碼、保留位、地址碼、任意碼、用戶數(shù)據(jù)的載入和用戶數(shù)據(jù)和狀態(tài)字的讀出兩部分。
數(shù)據(jù)載入子程序
要載入的數(shù)據(jù)(操作碼、保留位、地址碼、任意碼和用戶數(shù)據(jù))寄存從R0開始的地址單元里
;數(shù)據(jù)個數(shù)放在R6中 DADAIN:PUSH ACC
CLR CS ;使能R0
TRSMIT:MOV A,@R0
MOV R7,#08H 1字節(jié)=8比特
LOOPT: RLC A ;將要發(fā)送的數(shù)據(jù)由高位到低位依次移出
CLR SCK
MOV SI, 將1比特的數(shù)據(jù)送入SI
NOP
SETB SCK ;在SCK的上升沿AT45DBO41從SI上取數(shù)
DJNZ R7,LOOPT ;一字節(jié)的數(shù)據(jù)發(fā)送完畢
INC R0
DJNZ R6,TRSMIT
SETB CS ;所有數(shù)據(jù)發(fā)送完畢
POP ACC
RET
數(shù)據(jù)讀取子程序:
;將取出的數(shù)據(jù)(用戶數(shù)據(jù)和狀態(tài)字)寄存從R1開始的地址單元里
;數(shù)據(jù)個數(shù)放在R6中
DATAOUT:PUSH ACC
CLR, A
CLR C
CLR CS ;使能
RECEIVE:CLR SCK
MOV R7,#08H
LOOPR: SETB SCK 在SCK的上升沿AT45DB041將數(shù)據(jù)放在S0上
MOV C,SO ;將1比特的數(shù)據(jù)取出
NOP
SETB SCK
RLC A
DJNZ R7,LOOPR ;一字節(jié)的數(shù)據(jù)接收完畢
MOV @R1,A
INC R1
DJNZ R6,RECEIVE
SETB CSp ;所有數(shù)據(jù)接收完畢
POP ACC
RET