1358
s3c2440板的Nand Flash模塊由兩部分組成:Nand Flash控制器(集成在s3c2440)和Nand Flash存儲芯片(K9F1208U0B)兩大部分組成。當(dāng)要訪問Nand Flash中的數(shù)據(jù)時,必須通過Nand Flash控制器發(fā)送命令序列才能完成。所以, Nand Flash相當(dāng)于s3c2440的一個外設(shè),而不位于它的內(nèi)存地址區(qū).。
Samsung的 K9F1208U0B,數(shù)據(jù)存儲容量為64MB ,采用塊頁式存儲管理。8 個I/O引腳充當(dāng)數(shù)據(jù)、地址、命令的復(fù)用端口。
I/O0-7:復(fù)用引腳??梢酝ㄟ^它向nand flash 芯片輸入數(shù)據(jù)、地址、nand flash 命令以及輸出數(shù)據(jù)和操作狀態(tài)信息。
CLE(Command Latch Enable): 命令鎖存允許
ALE(Address Lactch Enable): 地址鎖存允許
-CE: 芯片選擇
-RE: 讀允許
-WE: 寫允許
-WP: 在寫或擦除期間,提供寫保護
R/-B: 讀/忙輸出
3.芯片內(nèi)部存儲布局
一片Nand flash 為一個設(shè)備(device), 其數(shù)據(jù)存儲分層為:
1設(shè)備(Device) = 4096 塊(Blocks)
1塊(Block) = 32 頁/ (Pages/rows) ;頁與行是相同的意思,叫法不一樣
1頁(Page) = 528 字節(jié)(Bytes) = 數(shù)據(jù)塊大小(512Bytes) + OOB 塊大小(16Bytes)
在每一頁中,最后16 個字節(jié) (又稱OOB)用于Nand Flash 命令執(zhí)行完后設(shè)置狀態(tài)用,剩余512 個字節(jié)又分為前半部分和后半部分??梢酝ㄟ^Nand Flash 命令00h/01h/50h 分別對前半部、后半部、OOB 進行定位通過Nand Flash 內(nèi)置的指針指向各自的首地址。
Samsung K9F1208U0B Nand Flash 片內(nèi)尋址采用26 位地址形式。從第0 位開始分四次通過I/O0 -I/O7 進傳送,并進行片內(nèi)尋址。具體含義如下:
0-7 位:字節(jié)在上半部、下半部及OOB 內(nèi)的偏移地址
8 位:值為0 代表對一頁內(nèi)前256 個字節(jié)進行尋址
值為1 代表對一頁內(nèi)后256 個字節(jié)進行尋址
9-13位:對頁進行尋址
14-25 位:對塊進行尋址
當(dāng)傳送地址時,從位0 開始
Nand Flash 控制器通過將Nand Flash 芯片的內(nèi)設(shè)命令寫到其特殊功能寄存器中,從而實現(xiàn)對Nand flash 芯片讀、檢驗和編程控制的。特殊功能寄存器有:NFCONF 、NFCMD 、NFADDR 、NFDATA 、NFSTAT 、NFECC 。
1.Read 1:
功能:表示將要讀取Nand flash 存儲空間中一個頁的前半部分,并且將內(nèi)置指針定位到前半部分的第一個字節(jié)。
命令代碼:00h
2.Read 1:
功能:表示將要讀取Nand flash 存儲空間中一個頁的后半部分,并且將內(nèi)置指針定位到后半部分的第一個字節(jié)。
命令代碼:01h
3.Read ID:
功能:讀取Nand flash 芯片的ID 號
命令代碼:90h
4.Reset:
功能:重啟芯片。
命令代碼:FFh
5.Page Program:
功能:對頁進行編程命令, 用于寫操作。
命令代碼:首先寫入00h(A 區(qū))/01h(B 區(qū))/05h(C 區(qū)), 表示寫入那個區(qū); 再寫入80h 開始編程模式(寫入模式) ,接下來寫入地址和數(shù)據(jù); 最后寫入 10h 表示編程結(jié)束.
6.Block Erase
功能:塊擦除命令。
命令代碼:首先寫入60h 進入擦寫模式,然后輸入塊地址; 接下來寫入D0h, 表示擦寫結(jié)束.
7.Read Status
功能:讀取內(nèi)部狀態(tài)寄存器值命令。
命令代碼:70h
1 ECC產(chǎn)生方法
ECC 是用于對存儲器之間傳送數(shù)據(jù)正確進行校驗的一種算法,分硬件ECC 和軟件ECC 算法兩種,在S3C2410 的Nand Flash 控制器中實現(xiàn)了由硬件電路 (ECC 生成器)實現(xiàn)的硬件ECC 。
2 ECC生成器工作過程
當(dāng)寫入數(shù)據(jù)到Nand flash 存儲空間時, ECC 生成器會在寫入數(shù)據(jù)完畢后自動生成ECC 碼,將其放入到ECC0 -ECC2 。當(dāng)讀出數(shù)據(jù)時Nand Flash 同樣會在讀數(shù)據(jù)完畢后,自動生成ECC 碼將其放到ECC0 -ECC2 當(dāng)中。
3 ECC 的運用
當(dāng)寫入數(shù)據(jù)時,可以在每頁寫完數(shù)據(jù)后將產(chǎn)生的ECC 碼放入到OOB 指定的位置(Byte 6)去,這樣就完成了ECC 碼的存儲。這樣當(dāng)讀出該頁數(shù)據(jù)時,將所需數(shù)據(jù)以及整個OOB 讀出,然后將指定位置的ECC 碼與讀出數(shù)據(jù)后在ECC0 -ECC1 的實際產(chǎn)生的ECC 碼進 對比,如果相等則讀出正確,若不相等則讀取錯誤需要進行重讀。
當(dāng)CPU啟動方式設(shè)置為NAND啟動時,上電開機,S3C2440的內(nèi)部boot code執(zhí)行,自動把nand flash的最開始4K數(shù)據(jù)拷貝到s3c2440內(nèi)部RAM,并且從這部分代碼偏移0處開始執(zhí)行。s3c2440內(nèi)部RAM映射地址為0,所以u-boot可以認為是是從內(nèi)存的0地址開始執(zhí)行。
網(wǎng)友評論