1. NANDFLASH基礎(chǔ)
1.1 Nandflash相對于Norflash眼坏, 無法按地址總線進行精確尋址辩撑,只能按塊(Block)訪問。
1.2 Nandflash的制造工藝有兩種,一種是SLC(Single-Level Cell), 其特點是每一個單元存儲一位數(shù)據(jù)次绘;另一種MLC(Multi-level Cell),其特點是每個Cell存儲兩位數(shù)據(jù)撒遣。SLC性能更好邮偎,但是MLC更加便宜。
1.3 Nandfalsh的組織方式
從上圖中可以看到义黎,K9F2G08(2G代表其容量為2G禾进,08代表其為8位的)的頁(Page)、塊(Block)廉涕、設(shè)備(Device)的大小以及關(guān)系泻云。
- 頁是Nandflash的最小讀寫單位艇拍;而塊是Nandflash的最小擦除單位;
- Nandflash中存儲的數(shù)據(jù)有有帶內(nèi)數(shù)據(jù)(Main Data area)和帶外數(shù)據(jù)(Spare area宠纯,Linux系統(tǒng)中卸夕,一般叫做OOB(Out Of Band))之分哑了,如上圖所示换怖,1Page = (2K+64)Bytes。其中葵袭,2K代表的就是帶內(nèi)數(shù)據(jù)廉白,放的是我們需要存放的數(shù)據(jù)个初;64B代表的是帶外數(shù)據(jù),存放ECC(Error Correction Code猴蹂,錯誤校驗碼)以及壞塊標記等院溺。
1.4 Nandflash地址線
由于Nandflash是8位的,地址線肯定是超過8位的晕讲,所以采用了多個地址周期覆获。由上圖可以看到,K9F2G08是一個5地址周期的設(shè)備瓢省,其中有兩個列地址周期弄息,三個行地址周期。列地址代表一個頁內(nèi)的地址勤婚,對于K9F2G08每頁為2KB摹量,11位地址線就夠用了,A10其實是0馒胆。行地址代表頁號缨称,即在哪一個頁。盡管地址線能夠定位到頁內(nèi)的某個具體地址祝迂,但是依舊只能按Block讀寫睦尽。
2. NANDFALSH控制
Nandflash的控制分為兩部分,首先在K9F2G08一端有控制電路型雳,其次在S5PV210的Soc內(nèi)部有控制器当凡。這兩部分的存在極大地簡化了我們對Nandflash的控制,我們可以不必要再自己來處理Nandflash復(fù)雜的控制時序纠俭,而是只用操作S5PV210中的SFR(特殊功能寄存器)即可沿量。這種控制思想在LCD、SDRAM等都是相同的冤荆,我們在相應(yīng)寄存器按照固定的流程中寫數(shù)據(jù)朴则、寫命令、寫地址即可完成控制钓简。
很重要的一點是乌妒,NANDFALSH的操作不是時鐘同步的汹想,讀或者寫都發(fā)生在讀使能/寫使能的上升沿,精確的時序控制由Soc的NANDFLASH控制器完成芥被。
當然具體的時序可以從下面的這個博客中理解:怎么看時序圖--nand flash的讀操作詳解
3. NANDFLASH基本操作
Nandflash有四個基本操作:壞塊檢查(Identifying Invalid Block)欧宜;頁讀(Read);頁寫(Program)拴魄;擦除(Erase)塊冗茸。
3.1 壞塊檢查
Flash使用之前要先統(tǒng)一擦除塊。Flash類設(shè)備擦除后里面全是1匹中,所以擦干凈之后讀出來的值是0xFF夏漱。如果讀出來的不是0xFF則表明是壞塊。
3.2 頁寫
- Nandflash的接口電路先接收數(shù)據(jù)到自己的緩沖區(qū)顶捷,然后再集中寫入Nand芯片的存儲區(qū)域中挂绰。Nand接口電路將一頁數(shù)據(jù)從緩沖區(qū)中寫入Nand存儲系統(tǒng)中需要一定的時間,這段時間Nand芯片不能再響應(yīng)SOC發(fā)過來的其他命令服赎,所以SoC要等待Nand接口電路忙完葵蒂。
- 等待方法是SoC不斷讀取狀態(tài)寄存器(這個狀態(tài)寄存器有2種情況:一種是SoC的Nand控制器自帶的,另一種是SoC通過發(fā)命令得到命令響應(yīng)得到的)重虑,然后通過檢查這個狀態(tài)寄存器的狀態(tài)位就能知道Nand接口電路剛才寫的那一頁數(shù)據(jù)寫完了沒践付、寫好了沒。直到SoC收到正確的狀態(tài)寄存器響應(yīng)才能認為剛才要寫的那一頁數(shù)據(jù)已經(jīng)ok缺厉。