1. 程式人生 > >S5PV210裸機-Nandflash

S5PV210裸機-Nandflash

1. NANDFLASH基礎

1.1 Nandflash相對於Norflash, 無法按地址匯流排進行精確定址,只能按塊(Block)訪問。
1.2 Nandflash的製造工藝有兩種,一種是SLC(Single-Level Cell), 其特點是每一個單元儲存一位資料;另一種MLC(Multi-level Cell),其特點是每個Cell儲存兩位資料。SLC效能更好,但是MLC更加便宜。
1.3 Nandfalsh的組織方式
K9F2G08X0M記憶體陣列
從上圖中可以看到,K9F2G08(2G代表其容量為2G,08代表其為8位的)的頁(Page)、塊(Block)、裝置(Device)的大小以及關係。
- 頁是Nandflash的最小讀寫單位;而塊是Nandflash的最小擦除單位;
- Nandflash中儲存的資料有有帶內資料(Main Data area)和帶外資料(Spare area,Linux系統中,一般叫做OOB(Out Of Band))之分,如上圖所示,1Page = (2K+64)Bytes。其中,2K代表的就是帶內資料,放的是我們需要存放的資料;64B代表的是帶外資料,存放ECC(Error Correction Code,錯誤校驗碼)以及壞塊標記等。

1.4 Nandflash地址線
K9F2G08X0M地址週期
由於Nandflash是8位的,地址線肯定是超過8位的,所以採用了多個地址週期。由上圖可以看到,K9F2G08是一個5地址週期的裝置,其中有兩個列地址週期,三個行地址週期。列地址代表一個頁內的地址,對於K9F2G08每頁為2KB,11位地址線就夠用了,A10其實是0。行地址代表頁號,即在哪一個頁。儘管地址線能夠定位到頁內的某個具體地址,但是依舊只能按Block讀寫。

2. NANDFALSH控制

K9F2G08框圖
S5PV210控制框圖
Nandflash的控制分為兩部分,首先在K9F2G08一端有控制電路,其次在S5PV210的Soc內部有控制器。這兩部分的存在極大地簡化了我們對Nandflash的控制,我們可以不必要再自己來處理Nandflash複雜的控制時序,而是隻用操作S5PV210中的SFR(特殊功能暫存器)即可。這種控制思想在LCD、SDRAM等都是相同的,我們在相應暫存器按照固定的流程中寫資料、寫命令、寫地址即可完成控制。


很重要的一點是,NANDFALSH的操作不是時鐘同步的,讀或者寫都發生在讀使能/寫使能的上升沿,精確的時序控制由Soc的NANDFLASH控制器完成。
當然具體的時序可以從下面的這個部落格中理解:怎麼看時序圖–nand flash的讀操作詳解

3. NANDFLASH基本操作

Nandflash有四個基本操作:壞塊檢查(Identifying Invalid Block);頁讀(Read);頁寫(Program);擦除(Erase)塊。

3.1 壞塊檢查

壞塊檢查流程圖
Flash使用之前要先統一擦除塊。Flash類裝置擦除后里面全是1,所以擦乾淨之後讀出來的值是0xFF。如果讀出來的不是0xFF則表明是壞塊。

3.2 頁寫

寫操作流程圖
- Nandflash的介面電路先接收資料到自己的緩衝區,然後再集中寫入Nand晶片的儲存區域中。Nand介面電路將一頁資料從緩衝區中寫入Nand儲存系統中需要一定的時間,這段時間Nand晶片不能再響應SOC發過來的其他命令,所以SoC要等待Nand介面電路忙完。
- 等待方法是SoC不斷讀取狀態暫存器(這個狀態暫存器有2種情況:一種是SoC的Nand控制器自帶的,另一種是SoC通過發命令得到命令響應得到的),然後通過檢查這個狀態暫存器的狀態位就能知道Nand介面電路剛才寫的那一頁資料寫完了沒、寫好了沒。直到SoC收到正確的狀態暫存器響應才能認為剛才要寫的那一頁資料已經ok。

3.3 頁讀和擦除塊

擦除和讀頁流程圖