NAND Flash芯片K9F1208在uPSD3234A
發布時間:2009/8/11 9:54:50 訪問次數:905
1 nand flash和nor flash
閃存(flash memory)由于其具有非易失性、電可擦除性、可重復編程以及高密度、低功耗等特點,被廣泛地應用于手機、mp3、數碼相機、筆記本電腦等數據存儲設備中。nand flash和nor flash是目前市場上兩種主要的非易失閃存芯片。與nor f1ash相比,nand flash在容量、功耗、使用壽命等方面的優勢使其成為高數據存儲密度的理想解決方案。nor flash的傳輸效率很高,但寫入和擦除速度較低;而nand flash以容量大、寫速度快、芯片面積小、單元密度高、擦除速度快、成本低等特點,在非易失性類存儲設備中顯現出強勁的市場競爭力。
結構:nor flash為并行,nand flash為串行。
總線:nor flash為分離的地址線和數據線,而nandflash為復用的。
尺寸:典型的nand flash尺寸為nor flash尺寸的1/8。壞塊:nand器件中的壞塊是隨機分布的,需要對介質進行初始化掃描以發現壞塊,并將壞塊標記為不可用。
位交換:nand flash中發生的次數要比nor flash多,建議使用nand閃存時,同時使用edc/ecc算法。
使用方法:nor flash是可在芯片內執行(xip,execute in place),應用程序可以直接在flash閃存內運行,不必再把代碼讀到系統ram中;而nand flash則需i/o接口,因此使用時需要寫入驅動程序。
通過以上的分析和比較,nand flash更適合于大容量數據存儲的嵌入式系統。本設計選用samsung公司生產的nand flash存儲器芯片k9f1208作為存儲介質,并應用在基于upsd3234a增強型8051單片機的嵌入式系統中。
2 upsd3234a簡介
upsd3234a是由意法半導體公司生產的一款基于8052內核的增強型flash單片機,其結構如圖1所示。該單片機包含1個帶8032微控制器的flash psd、2塊flash存儲器、sram、通用i/o口可編程邏輯、管理監控功能,并可實現usb、i2c、adc、dac和pwm功能。其中,片內8032微控制器,帶有2個標準異步通信口、3個16位定時/計數器、1個外部中斷以及jtag isp接口(用于在系統編程),一般應用于手持設備、家用電器等領域中。
3 k9f1208介紹
k9fl208是samsumg公司生產的512mb(64m×8位)nand flash存儲器。該存儲器的工作電壓為2.7~3.6v,內部存儲結構為528字節×32頁×4096塊,頁大小為528字節,塊大小為(16kb+512字節);可實現程序自動擦寫、頁程序、塊擦除、智能的讀/寫和擦除操作,一次可以讀/寫或者擦除4頁或者塊的內容,內部有命令寄存器。如圖2所示,該器件按功能可以劃分為:存儲陣列、輸入/輸出緩沖、命令寄存器、地址譯碼寄存器和控制邏輯產生。其中,命令寄存器用來確定外部設備對存儲器進行操作的類型;地址譯碼寄存器用于保存被訪問的地址并產生相應的譯碼選通信號。主設備通過8位i/o端口分時復用訪問器件命令、地址和數據寄存器,完成對芯片內存儲器的訪問。
4 k9f1208讀/寫和擦除操作的實現
對于k9f1208的操作主要有頁讀取和頁編程操作。圖3是nand flash的標準頁讀取時序圖。具體的頁讀取操作如下:發命令階段,在片選信號ce有效的情況下,首先命令允許信號cle有效,此時寫入信號we有效,芯片準備好信號r/b置高,表示準備好;同時向i/o口發送讀操作命令(0xoo或oxo1),表示是讀操作。發地址階段,此時片選有效,地址允許信號ale有效,寫入信號we保持有效,連續發送4個地址字;k9f1208的地址寄存器接收到地址值后,r/b信號將維持“忙”一段時間,此后r/b變為準備好狀態。最后是數據輸出階段,每次讀有效信號置低有效時,將會輸出一組數據。如此往復直到所有數據輸出完畢。
圖4是nand flash的標準頁編程時序圖。具體的頁編程操作如下:發命令階段,向i/o口發送頁編程操作第一個命令字(ox80),表示是頁編程操作。發地址階段,連續發送4個地址字,k9fl208的地址寄存器接收到地址值后,等待接收數據;當數據總線發送數據后,k9f1208連續接收數據,直到接收到頁編程的第二個命令字(0x10),即結束等待接收數據的狀態;r/b信號將維持“忙”一段時間,此后r/b變為準備好狀態。最后總線上發出讀狀態命令字(ox70),則k9f1208的命令寄存器接收并響應該命令,向i/o口發送表示操作成功的狀態數據(ox00)或表示操作失敗的狀態數據(oxo1)。
5 upsd3234a與k9f1208的連接
5.1 硬件部分
upsd33234a的數據總線datao~7直接連接到k9f1208的數據線上。k9f1208的讀/寫信號是直接通過upsd3234a的讀/寫信號驅動的,k9f1208的ale地址允許信號、cle命令允許信號、片選使能信號分別由upsd3324a的p43、p44、p45來控制,而k9f1208的r/b狀態輸出信號由upsd3234a的p46來讀取。硬件連接如圖5所示。根據該硬件連接的情況,在驅動過程中,可以在upsd3234a中定義一個無效地址,通過對該無效地址進行讀寫來控制wr和rd信號。
5.2 軟件部分
本設計的驅動程序包括基本的操作函數和flash操作api函數。基本的操作函數包括輸入命令值、輸入地址值、輸入數據值、讀取數據值和讀取狀態等函數。由于k9f1208是無地址的,故先定義一個外部存儲器的空地址來對它進行空寫和空讀。定義的語句為:
程序說明:賦予p4_5為o,使得ce信號成低電平,從而片選k9f1208有效;賦予p4_4為1,使得cle信號成高電平,從而使k9f1208的命令允許信號有效;賦予p4_3為o,使得ale信號成低電平,從而使k9f1208的地址允許信號無效;最后對rk9f1208data進行空寫命令字,使得we信號成低電平,k9f1208的命令寄存器從數據總線接收到命令字,并執行相應的操作。
程序說明:賦予p4_5為0,使得ce信號成低電平,從而片選k9f1208有效;賦予p4_4為o,使得cle信號成低電平,從而使k9f1208的命令允許信號無效;賦予p4_3為1,使得ale信號成高電平,從而k9f1208的地址允許信號有效;最后對rk9f1208data進行空寫地址字,使得we的信號成低電平,k9f1208從數據總線接收到地址字,并鎖存到地址鎖存器中。
程序說明:賦予p4_5為0,使得ce信號成低電平,從而片選k9f11208有效;賦予p4_4為o,使得cle信號成低電平,從而使k9f1208的命令允許信號無效;賦予p4_3為0,使得ale信號成低電平,從而使。k9f1208的地址允許信號無效;最后對rk9f1208data進行空寫數據,使得we的信號成低電平,k9f1208從數據總線接收到數據,并根據命令寄存器和地址鎖存器來處理接收到的數據。
程序說明:賦予p4_5為0,使得ce信號成低電平,從而片選k9f1208有效;賦予p4_4為o,使得cle信號成低電平,從而k9f1208的命令允許信號無效;賦予p4_3為o,使得ale信號成低電平,從而使。k9fl208的地址允許信導無效;最后對rk9f1208data進行空讀數據,使得re的信號成低電平,k9f1208會根據命令寄存器和地址鎖存器來向數據總線發送相應的數據。
程序說明:只是讀取p4_6的狀態,以判斷k9f1208是否“忙”。如果p4_6為高電平,則表示k9f1208不忙,返回高電平;如果p4_6為低電平,則表示k9fl208“忙”,返回高電平。
為了臺理地操作k9f1208,還添加了不選中k9f1208的函數,以便在頁讀取和頁編程操作后,使k9f1208不工作。程序只是讓p4_5、p4_4、p4_3為低電平,從而使得k9f1208的片選信號、命令允許信號、地址允許信號無效。
宏定義語句如下:
#define flash_inactive(){p4_5=0;p4_4=0;p4_3=0;}
flash操作api函數包括復位k9f1208、驗證k9f1208的id號、擦除k9f1208某一扇區、讀取k9f1208某一扇區數據和寫入k9f1208某一扇區數據等函數。因為篇幅關系,只介紹頁讀取和頁編程函數。
圖6是讀取k9f1208某一扇區或某一頁的數據流程圖。首先,開始向k9f1208發送頁讀取命令字ox00,使得k9f1208的命令寄存器接收到命令字;然后取得要讀取扇區的地址,連續向k9f1208發送4個地址數據,發送完后讀取k9f1208的r/b引腳的狀態,直到k9f1208不忙(表示地址數據已接收完畢);k9f1208開始讀取該地址所指的扇區,并向數據總線發送一個扇區的數據,此時讀取k9f1208的數據總線,直到整頁結束。
圖7是寫入k9f1208某一扇區或一頁的數據流程圖。首先向k9f1208發送頁編程的命令字ox80,使得k9f1208的命令寄存器接收到命令字;然后取得要寫入扇區的地址,連續向k9f1208發送4個地址數據,發送完后讀取k9f1208的r/b引腳的狀態,直到k9f1208不忙(表示地址數據已接收完畢);k9f1208準備從數據總線接收一個扇區的數據,此時向k9f1208的數據總線發送一個扇區的數據,讓k9f1208接收數據,并存到相應的頁或扇區中;待發送的數據結束后,向k9f1208發送oxl0命令,使得k9f1208結束頁編程的操作;最后向k9f1208發送查詢狀態的命令字ox70,k9f1208接收到命令字后,就會向數據總線發送一個字節的數據,這時讀取k9f1208的數據總線,若收到字節ox00,則表示操作成功,若收到字節0x01,則表示操作失敗。
結語
本文介紹了samsung公司k9f1208芯片特點,并在此基礎上設計了基于upsd3234a的驅動設計。該方法對其他相關soc中實現nand flash的控制方法設計有直接的參考意義,可廣泛應用于需要大存儲容量的低端設備中。
http://www.mcu123.com/news/article/armsource/embedded/200803/4844.html
1 nand flash和nor flash
閃存(flash memory)由于其具有非易失性、電可擦除性、可重復編程以及高密度、低功耗等特點,被廣泛地應用于手機、mp3、數碼相機、筆記本電腦等數據存儲設備中。nand flash和nor flash是目前市場上兩種主要的非易失閃存芯片。與nor f1ash相比,nand flash在容量、功耗、使用壽命等方面的優勢使其成為高數據存儲密度的理想解決方案。nor flash的傳輸效率很高,但寫入和擦除速度較低;而nand flash以容量大、寫速度快、芯片面積小、單元密度高、擦除速度快、成本低等特點,在非易失性類存儲設備中顯現出強勁的市場競爭力。
結構:nor flash為并行,nand flash為串行。
總線:nor flash為分離的地址線和數據線,而nandflash為復用的。
尺寸:典型的nand flash尺寸為nor flash尺寸的1/8。壞塊:nand器件中的壞塊是隨機分布的,需要對介質進行初始化掃描以發現壞塊,并將壞塊標記為不可用。
位交換:nand flash中發生的次數要比nor flash多,建議使用nand閃存時,同時使用edc/ecc算法。
使用方法:nor flash是可在芯片內執行(xip,execute in place),應用程序可以直接在flash閃存內運行,不必再把代碼讀到系統ram中;而nand flash則需i/o接口,因此使用時需要寫入驅動程序。
通過以上的分析和比較,nand flash更適合于大容量數據存儲的嵌入式系統。本設計選用samsung公司生產的nand flash存儲器芯片k9f1208作為存儲介質,并應用在基于upsd3234a增強型8051單片機的嵌入式系統中。
2 upsd3234a簡介
upsd3234a是由意法半導體公司生產的一款基于8052內核的增強型flash單片機,其結構如圖1所示。該單片機包含1個帶8032微控制器的flash psd、2塊flash存儲器、sram、通用i/o口可編程邏輯、管理監控功能,并可實現usb、i2c、adc、dac和pwm功能。其中,片內8032微控制器,帶有2個標準異步通信口、3個16位定時/計數器、1個外部中斷以及jtag isp接口(用于在系統編程),一般應用于手持設備、家用電器等領域中。
3 k9f1208介紹
k9fl208是samsumg公司生產的512mb(64m×8位)nand flash存儲器。該存儲器的工作電壓為2.7~3.6v,內部存儲結構為528字節×32頁×4096塊,頁大小為528字節,塊大小為(16kb+512字節);可實現程序自動擦寫、頁程序、塊擦除、智能的讀/寫和擦除操作,一次可以讀/寫或者擦除4頁或者塊的內容,內部有命令寄存器。如圖2所示,該器件按功能可以劃分為:存儲陣列、輸入/輸出緩沖、命令寄存器、地址譯碼寄存器和控制邏輯產生。其中,命令寄存器用來確定外部設備對存儲器進行操作的類型;地址譯碼寄存器用于保存被訪問的地址并產生相應的譯碼選通信號。主設備通過8位i/o端口分時復用訪問器件命令、地址和數據寄存器,完成對芯片內存儲器的訪問。
4 k9f1208讀/寫和擦除操作的實現
對于k9f1208的操作主要有頁讀取和頁編程操作。圖3是nand flash的標準頁讀取時序圖。具體的頁讀取操作如下:發命令階段,在片選信號ce有效的情況下,首先命令允許信號cle有效,此時寫入信號we有效,芯片準備好信號r/b置高,表示準備好;同時向i/o口發送讀操作命令(0xoo或oxo1),表示是讀操作。發地址階段,此時片選有效,地址允許信號ale有效,寫入信號we保持有效,連續發送4個地址字;k9f1208的地址寄存器接收到地址值后,r/b信號將維持“忙”一段時間,此后r/b變為準備好狀態。最后是數據輸出階段,每次讀有效信號置低有效時,將會輸出一組數據。如此往復直到所有數據輸出完畢。
圖4是nand flash的標準頁編程時序圖。具體的頁編程操作如下:發命令階段,向i/o口發送頁編程操作第一個命令字(ox80),表示是頁編程操作。發地址階段,連續發送4個地址字,k9fl208的地址寄存器接收到地址值后,等待接收數據;當數據總線發送數據后,k9f1208連續接收數據,直到接收到頁編程的第二個命令字(0x10),即結束等待接收數據的狀態;r/b信號將維持“忙”一段時間,此后r/b變為準備好狀態。最后總線上發出讀狀態命令字(ox70),則k9f1208的命令寄存器接收并響應該命令,向i/o口發送表示操作成功的狀態數據(ox00)或表示操作失敗的狀態數據(oxo1)。
5 upsd3234a與k9f1208的連接
5.1 硬件部分
upsd33234a的數據總線datao~7直接連接到k9f1208的數據線上。k9f1208的讀/寫信號是直接通過upsd3234a的讀/寫信號驅動的,k9f1208的ale地址允許信號、cle命令允許信號、片選使能信號分別由upsd3324a的p43、p44、p45來控制,而k9f1208的r/b狀態輸出信號由upsd3234a的p46來讀取。硬件連接如圖5所示。根據該硬件連接的情況,在驅動過程中,可以在upsd3234a中定義一個無效地址,通過對該無效地址進行讀寫來控制wr和rd信號。
5.2 軟件部分
本設計的驅動程序包括基本的操作函數和flash操作api函數。基本的操作函數包括輸入命令值、輸入地址值、輸入數據值、讀取數據值和讀取狀態等函數。由于k9f1208是無地址的,故先定義一個外部存儲器的空地址來對它進行空寫和空讀。定義的語句為:
程序說明:賦予p4_5為o,使得ce信號成低電平,從而片選k9f1208有效;賦予p4_4為1,使得cle信號成高電平,從而使k9f1208的命令允許信號有效;賦予p4_3為o,使得ale信號成低電平,從而使k9f1208的地址允許信號無效;最后對rk9f1208data進行空寫命令字,使得we信號成低電平,k9f1208的命令寄存器從數據總線接收到命令字,并執行相應的操作。
程序說明:賦予p4_5為0,使得ce信號成低電平,從而片選k9f1208有效;賦予p4_4為o,使得cle信號成低電平,從而使k9f1208的命令允許信號無效;賦予p4_3為1,使得ale信號成高電平,從而k9f1208的地址允許信號有效;最后對rk9f1208data進行空寫地址字,使得we的信號成低電平,k9f1208從數據總線接收到地址字,并鎖存到地址鎖存器中。
程序說明:賦予p4_5為0,使得ce信號成低電平,從而片選k9f11208有效;賦予p4_4為o,使得cle信號成低電平,從而使k9f1208的命令允許信號無效;賦予p4_3為0,使得ale信號成低電平,從而使。k9f1208的地址允許信號無效;最后對rk9f1208data進行空寫數據,使得we的信號成低電平,k9f1208從數據總線接收到數據,并根據命令寄存器和地址鎖存器來處理接收到的數據。
程序說明:賦予p4_5為0,使得ce信號成低電平,從而片選k9f1208有效;賦予p4_4為o,使得cle信號成低電平,從而k9f1208的命令允許信號無效;賦予p4_3為o,使得ale信號成低電平,從而使。k9fl208的地址允許信導無效;最后對rk9f1208data進行空讀數據,使得re的信號成低電平,k9f1208會根據命令寄存器和地址鎖存器來向數據總線發送相應的數據。
程序說明:只是讀取p4_6的狀態,以判斷k9f1208是否“忙”。如果p4_6為高電平,則表示k9f1208不忙,返回高電平;如果p4_6為低電平,則表示k9fl208“忙”,返回高電平。
為了臺理地操作k9f1208,還添加了不選中k9f1208的函數,以便在頁讀取和頁編程操作后,使k9f1208不工作。程序只是讓p4_5、p4_4、p4_3為低電平,從而使得k9f1208的片選信號、命令允許信號、地址允許信號無效。
宏定義語句如下:
#define flash_inactive(){p4_5=0;p4_4=0;p4_3=0;}
flash操作api函數包括復位k9f1208、驗證k9f1208的id號、擦除k9f1208某一扇區、讀取k9f1208某一扇區數據和寫入k9f1208某一扇區數據等函數。因為篇幅關系,只介紹頁讀取和頁編程函數。
圖6是讀取k9f1208某一扇區或某一頁的數據流程圖。首先,開始向k9f1208發送頁讀取命令字ox00,使得k9f1208的命令寄存器接收到命令字;然后取得要讀取扇區的地址,連續向k9f1208發送4個地址數據,發送完后讀取k9f1208的r/b引腳的狀態,直到k9f1208不忙(表示地址數據已接收完畢);k9f1208開始讀取該地址所指的扇區,并向數據總線發送一個扇區的數據,此時讀取k9f1208的數據總線,直到整頁結束。
圖7是寫入k9f1208某一扇區或一頁的數據流程圖。首先向k9f1208發送頁編程的命令字ox80,使得k9f1208的命令寄存器接收到命令字;然后取得要寫入扇區的地址,連續向k9f1208發送4個地址數據,發送完后讀取k9f1208的r/b引腳的狀態,直到k9f1208不忙(表示地址數據已接收完畢);k9f1208準備從數據總線接收一個扇區的數據,此時向k9f1208的數據總線發送一個扇區的數據,讓k9f1208接收數據,并存到相應的頁或扇區中;待發送的數據結束后,向k9f1208發送oxl0命令,使得k9f1208結束頁編程的操作;最后向k9f1208發送查詢狀態的命令字ox70,k9f1208接收到命令字后,就會向數據總線發送一個字節的數據,這時讀取k9f1208的數據總線,若收到字節ox00,則表示操作成功,若收到字節0x01,則表示操作失敗。
結語
本文介紹了samsung公司k9f1208芯片特點,并在此基礎上設計了基于upsd3234a的驅動設計。該方法對其他相關soc中實現nand flash的控制方法設計有直接的參考意義,可廣泛應用于需要大存儲容量的低端設備中。
http://www.mcu123.com/news/article/armsource/embedded/200803/4844.html