參考基于mtd的nand驅(qū)動(dòng)開(kāi)發(fā)

參考基于mtd的nand驅(qū)動(dòng)開(kāi)發(fā)

ID:19506043

大?。?09.50 KB

頁(yè)數(shù):46頁(yè)

時(shí)間:2018-10-02

參考基于mtd的nand驅(qū)動(dòng)開(kāi)發(fā)_第1頁(yè)
參考基于mtd的nand驅(qū)動(dòng)開(kāi)發(fā)_第2頁(yè)
參考基于mtd的nand驅(qū)動(dòng)開(kāi)發(fā)_第3頁(yè)
參考基于mtd的nand驅(qū)動(dòng)開(kāi)發(fā)_第4頁(yè)
參考基于mtd的nand驅(qū)動(dòng)開(kāi)發(fā)_第5頁(yè)
資源描述:

《參考基于mtd的nand驅(qū)動(dòng)開(kāi)發(fā)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)

1、基于MTD的NAND驅(qū)動(dòng)開(kāi)發(fā)說(shuō)明?大約用了兩個(gè)禮拜不到的時(shí)間為公司的IPcamera系統(tǒng)寫了基于MTD的NAND驅(qū)動(dòng)(linux-2.6.22.10內(nèi)核),目前已可以在該驅(qū)動(dòng)的支持下跑cramfs和jffs2文件系統(tǒng),另外,該驅(qū)動(dòng)也可以同時(shí)支持smallpage(每頁(yè)512Byte)和bigpage(每頁(yè)2048Byte)兩種NAND芯片。在此整理一下與NAND驅(qū)動(dòng)相關(guān)的概念,結(jié)構(gòu)體,驅(qū)動(dòng)框架和流程,同時(shí)分析一下基于MTD的NAND驅(qū)動(dòng)的部分函數(shù),尤其是其中的nand_scan()函數(shù)。(涉及到具體NAND芯片時(shí),若不做說(shuō)明,將以smallpage的NAND芯片為例。)?注:個(gè)人理解,有誤

2、難免!——筆者:曹榮榮??MTD驅(qū)動(dòng)程序是專門針對(duì)嵌入式Linux的一種驅(qū)動(dòng)程序,相對(duì)于常規(guī)塊設(shè)備驅(qū)動(dòng)程序(比如PC中的IDE硬盤)而言,MTD驅(qū)動(dòng)程序能更好的支持和管理閃存設(shè)備,因?yàn)樗旧砭褪菍殚W存設(shè)備而設(shè)計(jì)的。具體地講,基于MTD的FLASH驅(qū)動(dòng),承上可以很好地支持cramfs,jffs2和yaffs等文件系統(tǒng),啟下也能對(duì)FLASH的擦除,讀寫,F(xiàn)LASH壞塊以及損耗平衡進(jìn)行很好的管理。所謂損耗平衡,是指對(duì)NAND的擦寫不能總是集中在某一個(gè)或某幾個(gè)block中,這是由NAND芯片有限的擦寫次數(shù)的特性決定的??傊?,在現(xiàn)階段,要為FLASH設(shè)備開(kāi)發(fā)Linux下的驅(qū)動(dòng)程序,那么基于MTD的

3、開(kāi)發(fā)將幾乎是省時(shí)又省力的唯一選擇!?一、NAND和NOR的區(qū)別?Google“NandFlash和NorFlash的區(qū)別”。?簡(jiǎn)單點(diǎn)說(shuō),主要的區(qū)別就是:?1、?NAND比NOR便宜;NAND的容量比NOR大(指相同成本);NAND的擦寫次數(shù)是NOR的十倍;NAND的擦除和寫入速度比NOR快,讀取速度比NOR稍慢;?2、?NAND和NOR的讀都可以以字節(jié)為單位,但NAND的寫以page為單位,而NOR可以隨機(jī)寫每一個(gè)字節(jié)。NAND和NOR的擦除都以block為單位,但一般NAND的block比NOR的block小。另外,不管是NAND還是NOR,在寫入前,都必須先進(jìn)行擦除操作,但是NOR在擦

4、除前要先寫0;?3、?NAND不能在片內(nèi)運(yùn)行程序,而NOR可以。但目前很多CPU都可以在上電時(shí),以硬件的方式先將NAND的第一個(gè)block中的內(nèi)容(一般是程序代碼,且也許不足一個(gè)block,如2KB大小)自動(dòng)copy到ram中,然后再運(yùn)行,因此只要CPU支持,NAND也可以當(dāng)成啟動(dòng)設(shè)備;?4、?NAND和NOR都可能發(fā)生比特位反轉(zhuǎn)(但NAND反轉(zhuǎn)的幾率遠(yuǎn)大于NOR),因此這兩者都必須進(jìn)行ECC操作;NAND可能會(huì)有壞塊(出廠時(shí)廠家會(huì)對(duì)壞塊做標(biāo)記),在使用過(guò)程中也還有可能會(huì)出現(xiàn)新的壞塊,因此NAND驅(qū)動(dòng)必須對(duì)壞塊進(jìn)行管理。?二、內(nèi)核樹(shù)中基于MTD的NAND驅(qū)動(dòng)代碼的布局?34在Linux內(nèi)核

5、中,MTD源代碼放在linux-2.6.22.10/driver/mtd目錄中,該目錄中包含chips、devices、maps、nand、onenand和ubi六個(gè)子目錄。?其中只有nand和onenand目錄中的代碼才與NAND驅(qū)動(dòng)相關(guān),不過(guò)nand目錄中的代碼比較通用,而onenand目錄中的代碼相對(duì)于nand中的代碼而言則簡(jiǎn)化了很多,它是針對(duì)三星公司開(kāi)發(fā)的另一類Flash芯片,即OneNANDFlash。我尚未對(duì)OneNandFLASH有過(guò)研究,只是通過(guò)網(wǎng)上資料得知,OneNandFLASH克服了傳統(tǒng)NANDFlash接口復(fù)雜的缺點(diǎn),具有接口簡(jiǎn)單、讀寫速度快、容量大、壽命長(zhǎng)、成本低

6、等優(yōu)點(diǎn),因此應(yīng)該是一種較常用NAND先進(jìn)的FLASH吧,只是目前似乎普及率并不高,本文也將不做討論。?因此,若只是開(kāi)發(fā)基于MTD的NAND驅(qū)動(dòng)程序,那么我們需要關(guān)注的代碼就基本上全在linux-2.6.22.10/drivers/mtd/nand目錄中了,而該目錄中也不是所有的代碼文件都與我們將要開(kāi)發(fā)的NAND驅(qū)動(dòng)有關(guān),除了Makefile和Kconfig之外,其中真正與NAND驅(qū)動(dòng)有關(guān)的代碼文件只有6個(gè),即:?1、?nand_base.c:定義了NAND驅(qū)動(dòng)中對(duì)NAND芯片最基本的操作函數(shù)和操作流程,如擦除、讀寫page、讀寫oob等。當(dāng)然這些函數(shù)都只是進(jìn)行一些default的操作,若你

7、的系統(tǒng)在對(duì)NAND操作時(shí)有一些特殊的動(dòng)作,則需要在你自己的驅(qū)動(dòng)代碼中進(jìn)行定義,然后Replace這些default的函數(shù)。?2、?nand_bbt.c:定義了NAND驅(qū)動(dòng)中與壞塊管理有關(guān)的函數(shù)和結(jié)構(gòu)體。?3、?nand_ids.c:定義了兩個(gè)全局類型的結(jié)構(gòu)體:structnand_flash_devnand_flash_ids[]和structnand_manufacturersnand_manuf_ids[]。其中前者

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。