2021-09-13 19:42:40 索煒達電子 965
項目編號:E1172
文件大小:5K
源碼說明:帶中文注釋
開發(fā)環(huán)境:C編譯器
簡要概述:
就現(xiàn)在的NAND FLASH ,有串口和并口兩種,
并口就是48PIN的數(shù)據(jù)的輸入和輸入公用IO的
串口的就是使用SPI接口的NAND FLASH
說下NAND FLASH 管理的核心思維:
1 識別壞塊,標記壞塊,
2 如何保存壞塊信息
3 交換區(qū)概念
4 保留去概念
1,NANDFLASH 的工藝不能保證寫進去的每個塊里面的數(shù)據(jù),和讀出來的數(shù)據(jù)一致,所以是存在壞塊的,
而NAND FLASH的數(shù)據(jù)組織結(jié)構(gòu)是這樣的,
由N個塊組成,而塊由M個PAGE組成+MXSPARE區(qū)
比如 K9F1G08U0D 以這個片子為例子,
BLOCK 大小為 128K 用戶可以寫的,
實際大小為 128K + 64*4*16
至于后面64*4*16的意思是這樣的, 因為該片子每個PAGE的大小為2048 也就是2K,
而因為NAND 存在壞塊,所以,在每寫512個字節(jié)后,都會產(chǎn)生一個校驗碼,而這個校驗碼用來標記,該塊是壞塊還是可以正常使用的,
當然這個512是針對大頁的NAND FLASH,小頁的話是每256個字節(jié)產(chǎn)出一個校驗碼,當然現(xiàn)在這樣的小頁的NAND FLASH很少見了,
老了,即使有,也是拆機弄下來的,
壞塊的識別的話,這幾種,并口的:一個是可以根據(jù)ECC校驗算法來,判斷是否為壞塊,具體算法可以去百度查查,
一個是可以判斷在寫玩數(shù)據(jù)之后,來判斷SPARE數(shù)據(jù)區(qū)域來判斷段壞塊,而對于小頁和大頁的有區(qū)別
小頁的NANDFLASH ,比如一個頁的大小為1K,那么,在讀取1K后面數(shù)據(jù)的16個數(shù)據(jù),
如果第一個數(shù)據(jù)不為FF,那么標記該塊為壞塊,在標記的時候,可以標記的數(shù)據(jù)為全部為00,也就是在標記16個數(shù)據(jù)的時候表示為0
而在標記的時候,一般標記的區(qū)域是這個塊的第一個PAGE后的16個數(shù)據(jù)
串口:串口的,里面有自校驗,硬件的,所以在識別的時候,可以直接裝載要判斷的PAGE的地址,然后去讀取狀態(tài)寄存器即可,
同樣的也可以去標記壞塊,標記花開的話和并口的一樣
2 如何保存壞塊信息,
壞塊信息一般包括:
1 ,保存壞塊的信息的地址,也就是你要獲得壞塊信息的話,一般去哪個地址去讀,可以是固定的,也可以不是固定的,不固定的花費的時間長點,管理起來復雜
2,壞塊信息要保存交換區(qū)的信息:這個信息是,你所使用的交換區(qū),某個塊是壞塊,還是好塊 后面會介紹
3,保留區(qū)的地址映射狀態(tài),后面會介紹
4 ,如何去標記該塊是作為,保存壞塊信息表格呢,,
至于如何保存壞塊信息,很多種方法,核心就是,用特殊的數(shù)據(jù)去標記,
比如,我在用來保存壞塊信息表的時候,一般這樣標記
該塊的第一個PAGE的前面八個數(shù)據(jù)是這樣的,,0xff55aa00,0x0000000
該塊的最后一個PAGE ,最后8個數(shù)據(jù)是0X33445588.0XFF00FF00
然后該塊的倒數(shù)第二個PAGE,標記交換區(qū)的信息和保留去地址映射關(guān)系,+一個校驗和
而對于保存壞塊信息表格所用的塊,一般是3個或者5個不等,,交替使用,或者也可以不交替使用,,
對于不交替使用的情況就是,一旦發(fā)生壞塊標記的情況的話,那么3或者5個塊都要被寫數(shù)據(jù),而卻寫的數(shù)據(jù)是一樣的,
有人會說,占用這么多塊不是浪費,其實,對于整個芯片來說,占用這幾個塊,而有個壞塊管理程序是值得的
3 交換區(qū)概念:
比如,塊0 ,該塊大小為128K, 在0X000-0X18000里面有數(shù)據(jù),0x18800 - 0x20000這個有數(shù)據(jù)是文件系統(tǒng)認為的,
而文件系統(tǒng)要在0x18000-0x18800這個512的范圍內(nèi)要寫數(shù)據(jù),那該怎么辦呢,
肯定要這個塊個擦除掉的,如果沒有交換區(qū)的話,那么擦除的話,會導致在0X000-0X18000,,0x18800 - 0x20000之間的數(shù)據(jù)都會丟失的,那該怎么辦呢,
那就要使用交換區(qū),交換區(qū)的作用就是這樣的,
如果要擦除某個塊的話,那么首先要將這個塊里面的數(shù)據(jù)拷貝到另外一個塊里面,而這個另外一個塊,稱之為交換區(qū),
首先將整個塊的數(shù)據(jù),全部放到一個可以用的交換區(qū),然后再將0這個塊擦除,擦除之后0這個塊里面的數(shù)據(jù)就是FF了,那么在擦除之后,在將交換區(qū)里面的數(shù)據(jù)回寫到0這個塊里面
那么出現(xiàn)的情況就是0X000-0X18000,,0x18200 - 0x20000 這個兩個區(qū)間內(nèi)的數(shù)據(jù)還是原來的數(shù)據(jù),在將原來的數(shù)據(jù)回寫到0塊之后,然后在將這次文件系統(tǒng)要寫的數(shù)據(jù)寫到
0x18000-0x18200這個區(qū)域里面,這樣既保證數(shù)據(jù)的完整性,又能將新數(shù)據(jù)寫進去
4保留區(qū)概念:
保留區(qū)的作用就是這個,當在寫數(shù)據(jù)的時候發(fā)生壞塊的話,那么得將這個塊的數(shù)據(jù)要保存另外一個塊里面,同時要對產(chǎn)生的那個壞塊進行標記,
具體可以參考附件:標記該壞塊管理參考圈圈的NANDFLASH壞塊管理思維
目錄│文件列表:
│ nand_flash.rar