ZigBee技術(shù) 無(wú)線(xiàn)傳感器網(wǎng)絡(luò )節點(diǎn) MCl3192 LPC2138
摘要 以Samsung NAND Flash器件K9F1208為例,對比NAND Flash和NOR Flash的異同;介紹大容量NAND Flash在uPSD3234A增強型單片機系統中的應用,完成了硬件接口設計和軟件設計,并給出硬件連接圖和部分程序代碼。
本文引用地址:http://dyxdggzs.com/article/79852.htm關(guān)鍵詞 NAND Flash uPSD3234A單片機嵌入式系統
1 NAND Flash和NOR Flash
閃存(Flash Memory)由于其具有非易失性、電可擦除性、可重復編程以及高密度、低功耗等特點(diǎn),被廣泛地應用于手機、MP3、數碼相機、筆記本電腦等數據存儲設備中。NAND Flash和NOR Flash是目前市場(chǎng)上兩種主要的非易失閃存芯片。與NOR F1ash相比,NAND Flash在容量、功耗、使用壽命等方面的優(yōu)勢使其成為高數據存儲密度的理想解決方案。NOR Flash的傳輸效率很高,但寫(xiě)入和擦除速度較低;而NAND Flash以容量大、寫(xiě)速度快、芯片面積小、單元密度高、擦除速度快、成本低等特點(diǎn),在非易失性類(lèi)存儲設備中顯現出強勁的市場(chǎng)競爭力。
結構:NOR Flash為并行,NAND Flash為串行。
總線(xiàn):NOR Flash為分離的地址線(xiàn)和數據線(xiàn),而NANDFlash為復用的。
尺寸:典型的NAND Flash尺寸為NOR Flash尺寸的1/8。
壞塊:NAND器件中的壞塊是隨機分布的,需要對介質(zhì)進(jìn)行初始化掃描以發(fā)現壞塊,并將壞塊標記為不可用。
位交換:NAND Flash中發(fā)生的次數要比NOR Flash多,建議使用NAND閃存時(shí),同時(shí)使用EDC/ECC算法。
使用方法:NOR Flash是可在芯片內執行(XIP,eXecute In Place),應用程序可以直接在Flash閃存內運行,不必再把代碼讀到系統RAM中;而NAND Flash則需I/O接口,因此使用時(shí)需要寫(xiě)入驅動(dòng)程序。
通過(guò)以上的分析和比較,NAND Flash更適合于大容量數據存儲的嵌入式系統。本設計選用Samsung公司生產(chǎn)的NAND Flash存儲器芯片K9F1208作為存儲介質(zhì),并應用在基于uPSD3234A增強型8051單片機的嵌入式系統中。
2 uPSD3234A簡(jiǎn)介
uPSD3234A是由意法半導體公司生產(chǎn)的一款基于8052內核的增強型Flash單片機,其結構如圖1所示。該單片機包含1個(gè)帶8032微控制器的Flash PSD、2塊Flash存儲器、SRAM、通用I/O口可編程邏輯、管理監控功能,并可實(shí)現USB、I2C、ADC、DAC和PWM功能。其中,片內8032微控制器,帶有2個(gè)標準異步通信口、3個(gè)16位定時(shí)/計數器、1個(gè)外部中斷以及JTAG ISP接口(用于在系統編程),一般應用于手持設備、家用電器等領(lǐng)域中。
3 K9F1208介紹
K9Fl208是Samsumg公司生產(chǎn)的512Mb(64M×8位)NAND Flash存儲器。該存儲器的工作電壓為2.7~3.6V,內部存儲結構為528字節×32頁(yè)×4096塊,頁(yè)大小為528字節,塊大小為(16KB+512字節);可實(shí)現程序自動(dòng)擦寫(xiě)、頁(yè)程序、塊擦除、智能的讀/寫(xiě)和擦除操作,一次可以讀/寫(xiě)或者擦除4頁(yè)或者塊的內容,內部有命令寄存器。如圖2所示,該器件按功能可以劃分為:存儲陣列、輸入/輸出緩沖、命令寄存器、地址譯碼寄存器和控制邏輯產(chǎn)生。其中,命令寄存器用來(lái)確定外部設備對存儲器進(jìn)行操作的類(lèi)型;地址譯碼寄存器用于保存被訪(fǎng)問(wèn)的地址并產(chǎn)生相應的譯碼選通信號。主設備通過(guò)8位I/O端口分時(shí)復用訪(fǎng)問(wèn)器件命令、地址和數據寄存器,完成對芯片內存儲器的訪(fǎng)問(wèn)。
4 K9F1208讀/寫(xiě)和擦除操作的實(shí)現
對于K9F1208的操作主要有頁(yè)讀取和頁(yè)編程操作。圖3是NAND Flash的標準頁(yè)讀取時(shí)序圖。具體的頁(yè)讀取操作如下:發(fā)命令階段,在片選信號CE有效的情況下,首先命令允許信號CLE有效,此時(shí)寫(xiě)入信號WE有效,芯片準備好信號R/B置高,表示準備好;同時(shí)向I/O口發(fā)送讀操作命令(0xOO或OxO1),表示是讀操作。發(fā)地址階段,此時(shí)片選有效,地址允許信號ALE有效,寫(xiě)入信號WE保持有效,連續發(fā)送4個(gè)地址字;K9F1208的地址寄存器接收到地址值后,R/B信號將維持“忙”一段時(shí)間,此后R/B變?yōu)闇蕚浜脿顟B(tài)。最后是數據輸出階段,每次讀有效信號置低有效時(shí),將會(huì )輸出一組數據。如此往復直到所有數據輸出完畢。
圖4是NAND Flash的標準頁(yè)編程時(shí)序圖。具體的頁(yè)編程操作如下:發(fā)命令階段,向I/O口發(fā)送頁(yè)編程操作第一個(gè)命令字(Ox80),表示是頁(yè)編程操作。發(fā)地址階段,連續發(fā)送4個(gè)地址字,K9Fl208的地址寄存器接收到地址值后,等待接收數據;當數據總線(xiàn)發(fā)送數據后,K9F1208連續接收數據,直到接收到頁(yè)編程的第二個(gè)命令字(0x10),即結束等待接收數據的狀態(tài);R/B信號將維持“忙”一段時(shí)間,此后R/B變?yōu)闇蕚浜脿顟B(tài)。最后總線(xiàn)上發(fā)出讀狀態(tài)命令字(Ox70),則K9F1208的命令寄存器接收并響應該命令,向I/O口發(fā)送表示操作成功的狀態(tài)數據(Ox00)或表示操作失敗的狀態(tài)數據(OxO1)。
5 uPSD3234A與K9F1208的連接
5.1 硬件部分
uPSD33234A的數據總線(xiàn)DATAO~7直接連接到K9F1208的數據線(xiàn)上。K9F1208的讀/寫(xiě)信號是直接通過(guò)uPSD3234A的讀/寫(xiě)信號驅動(dòng)的,K9F1208的ALE地址允許信號、CLE命令允許信號、片選使能信號分別由uPSD3324A的P43、P44、P45來(lái)控制,而K9F1208的R/B狀態(tài)輸出信號由uPSD3234A的P46來(lái)讀取。硬件連接如圖5所示。根據該硬件連接的情況,在驅動(dòng)過(guò)程中,可以在uPSD3234A中定義一個(gè)無(wú)效地址,通過(guò)對該無(wú)效地址進(jìn)行讀寫(xiě)來(lái)控制WR和RD信號。
5.2 軟件部分
本設計的驅動(dòng)程序包括基本的操作函數和Flash操作API函數?;镜牟僮骱瘮蛋ㄝ斎朊钪?、輸入地址值、輸入數據值、讀取數據值和讀取狀態(tài)等函數。由于K9F1208是無(wú)地址的,故先定義一個(gè)外部存儲器的空地址來(lái)對它進(jìn)行空寫(xiě)和空讀。定義的語(yǔ)句為:
程序說(shuō)明:賦予P4_5為O,使得CE信號成低電平,從而片選K9F1208有效;賦予P4_4為1,使得CLE信號成高電平,從而使K9F1208的命令允許信號有效;賦予P4_3為O,使得ALE信號成低電平,從而使K9F1208的地址允許信號無(wú)效;最后對rK9F1208DATA進(jìn)行空寫(xiě)命令字,使得WE信號成低電平,K9F1208的命令寄存器從數據總線(xiàn)接收到命令字,并執行相應的操作。
程序說(shuō)明:賦予P4_5為0,使得CE信號成低電平,從而片選K9F1208有效;賦予P4_4為O,使得CLE信號成低電平,從而使K9F1208的命令允許信號無(wú)效;賦予P4_3為1,使得ALE信號成高電平,從而K9F1208的地址允許信號有效;最后對rK9F1208DATA進(jìn)行空寫(xiě)地址字,使得WE的信號成低電平,K9F1208從數據總線(xiàn)接收到地址字,并鎖存到地址鎖存器中。
程序說(shuō)明:賦予P4_5為0,使得CE信號成低電平,從而片選K9F11208有效;賦予P4_4為O,使得CLE信號成低電平,從而使K9F1208的命令允許信號無(wú)效;賦予P4_3為0,使得ALE信號成低電平,從而使。K9F1208的地址允許信號無(wú)效;最后對rK9F1208DATA進(jìn)行空寫(xiě)數據,使得WE的信號成低電平,K9F1208從數據總線(xiàn)接收到數據,并根據命令寄存器和地址鎖存器來(lái)處理接收到的數據。
程序說(shuō)明:賦予P4_5為0,使得CE信號成低電平,從而片選K9F1208有效;賦予P4_4為O,使得CLE信號成低電平,從而K9F1208的命令允許信號無(wú)效;賦予P4_3為O,使得ALE信號成低電平,從而使。K9Fl208的地址允許信導無(wú)效;最后對rK9F1208DATA進(jìn)行空讀數據,使得RE的信號成低電平,K9F1208會(huì )根據命令寄存器和地址鎖存器來(lái)向數據總線(xiàn)發(fā)送相應的數據。
程序說(shuō)明:只是讀取P4_6的狀態(tài),以判斷K9F1208是否“忙”。如果P4_6為高電平,則表示K9F1208不忙,返回高電平;如果P4_6為低電平,則表示K9Fl208“忙”,返回高電平。
為了臺理地操作K9F1208,還添加了不選中K9F1208的函數,以便在頁(yè)讀取和頁(yè)編程操作后,使K9F1208不工作。程序只是讓P4_5、P4_4、P4_3為低電平,從而使得K9F1208的片選信號、命令允許信號、地址允許信號無(wú)效。
宏定義語(yǔ)句如下:
#define flash_inactive(){P4_5=0;P4_4=0;P4_3=0;}
Flash操作API函數包括復位K9F1208、驗證K9F1208的ID號、擦除K9F1208某一扇區、讀取K9F1208某一扇區數據和寫(xiě)入K9F1208某一扇區數據等函數。因為篇幅關(guān)系,只介紹頁(yè)讀取和頁(yè)編程函數。
圖6是讀取K9F1208某一扇區或某一頁(yè)的數據流程圖。首先,開(kāi)始向K9F1208發(fā)送頁(yè)讀取命令字Ox00,使得K9F1208的命令寄存器接收到命令字;然后取得要讀取扇區的地址,連續向K9F1208發(fā)送4個(gè)地址數據,發(fā)送完后讀取K9F1208的R/B引腳的狀態(tài),直到K9F1208不忙(表示地址數據已接收完畢);K9F1208開(kāi)始讀取該地址所指的扇區,并向數據總線(xiàn)發(fā)送一個(gè)扇區的數據,此時(shí)讀取K9F1208的數據總線(xiàn),直到整頁(yè)結束。
圖7是寫(xiě)入K9F1208某一扇區或一頁(yè)的數據流程圖。首先向K9F1208發(fā)送頁(yè)編程的命令字Ox80,使得K9F1208的命令寄存器接收到命令字;然后取得要寫(xiě)入扇區的地址,連續向K9F1208發(fā)送4個(gè)地址數據,發(fā)送完后讀取K9F1208的R/B引腳的狀態(tài),直到K9F1208不忙(表示地址數據已接收完畢);K9F1208準備從數據總線(xiàn)接收一個(gè)扇區的數據,此時(shí)向K9F1208的數據總線(xiàn)發(fā)送一個(gè)扇區的數據,讓K9F1208接收數據,并存到相應的頁(yè)或扇區中;待發(fā)送的數據結束后,向K9F1208發(fā)送Oxl0命令,使得K9F1208結束頁(yè)編程的操作;最后向K9F1208發(fā)送查詢(xún)狀態(tài)的命令字Ox70,K9F1208接收到命令字后,就會(huì )向數據總線(xiàn)發(fā)送一個(gè)字節的數據,這時(shí)讀取K9F1208的數據總線(xiàn),若收到字節Ox00,則表示操作成功,若收到字節0x01,則表示操作失敗。
結語(yǔ)
本文介紹了Samsung公司K9F1208芯片特點(diǎn),并在此基礎上設計了基于uPSD3234A的驅動(dòng)設計。該方法對其他相關(guān)SoC中實(shí)現NAND Flash的控制方法設計有直接的參考意義,可廣泛應用于需要大存儲容量的低端設備中。
評論