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