基于mtd的nand驅(qū)動開發(fā)本科學(xué)位論文.doc

基于mtd的nand驅(qū)動開發(fā)本科學(xué)位論文.doc

ID:11583599

大?。?09.50 KB

頁數(shù):46頁

時間:2018-07-12

基于mtd的nand驅(qū)動開發(fā)本科學(xué)位論文.doc_第1頁
基于mtd的nand驅(qū)動開發(fā)本科學(xué)位論文.doc_第2頁
基于mtd的nand驅(qū)動開發(fā)本科學(xué)位論文.doc_第3頁
基于mtd的nand驅(qū)動開發(fā)本科學(xué)位論文.doc_第4頁
基于mtd的nand驅(qū)動開發(fā)本科學(xué)位論文.doc_第5頁
資源描述:

《基于mtd的nand驅(qū)動開發(fā)本科學(xué)位論文.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

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

2、若不做說明,將以smallpage的NAND芯片為例。)?注:個人理解,有誤難免!——筆者:曹榮榮??MTD驅(qū)動程序是專門針對嵌入式Linux的一種驅(qū)動程序,相對于常規(guī)塊設(shè)備驅(qū)動程序(比如PC中的IDE硬盤)而言,MTD驅(qū)動程序能更好的支持和管理閃存設(shè)備,因為它本身就是專為閃存設(shè)備而設(shè)計的。具體地講,基于MTD的FLASH驅(qū)動,承上可以很好地支持cramfs,jffs2和yaffs等文件系統(tǒng),啟下也能對FLASH的擦除,讀寫,F(xiàn)LASH壞塊以及損耗平衡進(jìn)行很好的管理。所謂損耗平衡,是指對NAND的擦寫不能總是集中在

3、某一個或某幾個block中,這是由NAND芯片有限的擦寫次數(shù)的特性決定的。總之,在現(xiàn)階段,要為FLASH設(shè)備開發(fā)Linux下的驅(qū)動程序,那么基于MTD的開發(fā)將幾乎是省時又省力的唯一選擇!?一、NAND和NOR的區(qū)別?Google“NandFlash和NorFlash的區(qū)別”。?簡單點說,主要的區(qū)別就是:?1、?NAND比NOR便宜;NAND的容量比NOR大(指相同成本);NAND的擦寫次數(shù)是NOR的十倍;NAND的擦除和寫入速度比NOR快,讀取速度比NOR稍慢;?2、?NAND和NOR的讀都可以以字節(jié)為單位,但NA

4、ND的寫以page為單位,而NOR可以隨機寫每一個字節(jié)。NAND和NOR的擦除都以block為單位,但一般NAND的block比NOR的block小。另外,不管是NAND還是NOR,在寫入前,都必須先進(jìn)行擦除操作,但是NOR在擦除前要先寫0;?3、?NAND不能在片內(nèi)運行程序,而NOR可以。但目前很多CPU都可以在上電時,以硬件的方式先將NAND的第一個block中的內(nèi)容(一般是程序代碼,且也許不足一個block,如2KB大?。┳詣觕opy到ram中,然后再運行,因此只要CPU支持,NAND也可以當(dāng)成啟動設(shè)備;?4

5、、?NAND和NOR都可能發(fā)生比特位反轉(zhuǎn)(但NAND反轉(zhuǎn)的幾率遠(yuǎn)大于NOR),因此這兩者都必須進(jìn)行ECC操作;NAND可能會有壞塊(出廠時廠家會對壞塊做標(biāo)記),在使用過程中也還有可能會出現(xiàn)新的壞塊,因此NAND驅(qū)動必須對壞塊進(jìn)行管理。?二、內(nèi)核樹中基于MTD的NAND驅(qū)動代碼的布局?34在Linux內(nèi)核中,MTD源代碼放在linux-2.6.22.10/driver/mtd目錄中,該目錄中包含chips、devices、maps、nand、onenand和ubi六個子目錄。?其中只有nand和onenand目錄中的

6、代碼才與NAND驅(qū)動相關(guān),不過nand目錄中的代碼比較通用,而onenand目錄中的代碼相對于nand中的代碼而言則簡化了很多,它是針對三星公司開發(fā)的另一類Flash芯片,即OneNANDFlash。我尚未對OneNandFLASH有過研究,只是通過網(wǎng)上資料得知,OneNandFLASH克服了傳統(tǒng)NANDFlash接口復(fù)雜的缺點,具有接口簡單、讀寫速度快、容量大、壽命長、成本低等優(yōu)點,因此應(yīng)該是一種較常用NAND先進(jìn)的FLASH吧,只是目前似乎普及率并不高,本文也將不做討論。?因此,若只是開發(fā)基于MTD的NAND驅(qū)

7、動程序,那么我們需要關(guān)注的代碼就基本上全在linux-2.6.22.10/drivers/mtd/nand目錄中了,而該目錄中也不是所有的代碼文件都與我們將要開發(fā)的NAND驅(qū)動有關(guān),除了Makefile和Kconfig之外,其中真正與NAND驅(qū)動有關(guān)的代碼文件只有6個,即:?1、?nand_base.c:定義了NAND驅(qū)動中對NAND芯片最基本的操作函數(shù)和操作流程,如擦除、讀寫page、讀寫oob等。當(dāng)然這些函數(shù)都只是進(jìn)行一些default的操作,若你的系統(tǒng)在對NAND操作時有一些特殊的動作,則需要在你自己的驅(qū)動代

8、碼中進(jìn)行定義,然后Replace這些default的函數(shù)。?2、?nand_bbt.c:定義了NAND驅(qū)動中與壞塊管理有關(guān)的函數(shù)和結(jié)構(gòu)體。?3、?nand_ids.c:定義了兩個全局類型的結(jié)構(gòu)體:structnand_flash_devnand_flash_ids[]和structnand_manufacturersnand_manuf_ids[]。其中前者

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

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

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