新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux下NAND FLASH驅(qū)動(dòng)開發(fā)

Linux下NAND FLASH驅(qū)動(dòng)開發(fā)

作者: 時(shí)間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

但是由于物理制程 / 制造方面的原因,導(dǎo)致 nor nand 在一些具體操作方面的特性不同:

本文引用地址:http://m.butianyuan.cn/article/201610/305625.htm

1.jpg


表1:Nand Flash Nor Flash 的區(qū)別

1. 理論上是可以的,而且也是有人驗(yàn)證過可以的,只不過由于 nand flash 的物理特性,不能完全保證所讀取的數(shù)據(jù) / 代碼是正確的,實(shí)際上,很少這么用而已。因?yàn)?,如果真是要用?nand flash 做 XIP ,那么除了讀出速度慢之外,還要保證有數(shù)據(jù)的校驗(yàn),以保證讀出來的,將要執(zhí)行的代碼 / 數(shù)據(jù),是正確的。否則,系統(tǒng)很容易就跑飛了。

2. 芯片內(nèi)執(zhí)行 (XIP, eXecute In Place) :

http://hi.baidu.com/serial_story/blog/item/adb20a2a3f8ffe3c5243c1df.html

【 Nand Flash 的種類】

具體再分,又可以分為

1)Bare NAND chips :裸片,單獨(dú)的 nand 芯片

2)SmartMediaCards : = 裸片 + 一層薄塑料,常用于數(shù)碼相機(jī)和 MP3 播放器中。之所以稱 smart ,是由于其軟件 smart ,而不是硬件本身有啥 smart 之處。 ^_^

3)DiskOnChip :裸片 +glue logic , glue logic= 硬件 ECC 產(chǎn)生器 + 用于靜態(tài)的 nand 芯片控制的寄存器 + 直接訪問一小片地址窗口,那塊地址中包含了引導(dǎo)代碼的 stub 樁,其可以從 nand flash 中拷貝真正的引導(dǎo)代碼。

【 spare area/oob 】

Nand 由于最初硬件設(shè)計(jì)時(shí)候考慮到,額外的錯(cuò)誤校驗(yàn)等需要空間,專門對(duì)應(yīng)每個(gè)頁,額外設(shè)計(jì)了叫做 spare area 空區(qū)域,在其他地方,比如 jffs2 文件系統(tǒng)中,也叫做 oob ( out of band )數(shù)據(jù)。

其具體用途,總結(jié)起來有:

1. 標(biāo)記是否是壞快

2. 存儲(chǔ) ECC 數(shù)據(jù)

3. 存儲(chǔ)一些和文件系統(tǒng)相關(guān)的數(shù)據(jù),如 jffs2 就會(huì)用到這些空間存儲(chǔ)一些特定信息, yaffs2 文件系統(tǒng),會(huì)在 oob 中,存放很多和自己文件系統(tǒng)相關(guān)的信息。

2. 軟件方面

如果想要在 Linux 下編寫 Nand Flash 驅(qū)動(dòng),那么就先要搞清楚 Linux 下,關(guān)于此部分的整個(gè)框架。弄明白,系統(tǒng)是如何管理你的 nand flash 的,以及,系統(tǒng)都幫你做了那些準(zhǔn)備工作,而剩下的,驅(qū)動(dòng)底層實(shí)現(xiàn)部分,你要去實(shí)現(xiàn)哪些功能,才能使得硬件正常工作起來。

【內(nèi)存技術(shù)設(shè)備, MTD ( Memory Technology Device )】

MTD ,是 Linux 的存儲(chǔ)設(shè)備中的一個(gè)子系統(tǒng)。其設(shè)計(jì)此系統(tǒng)的目的是,對(duì)于內(nèi)存類的設(shè)備,提供一個(gè)抽象層,一個(gè)接口,使得對(duì)于硬件驅(qū)動(dòng)設(shè)計(jì)者來說,可以盡量少的去關(guān)心存儲(chǔ)格式,比如 FTL , FFS2 等,而只需要去提供最簡單的底層硬件設(shè)備的讀 / 寫 / 擦除函數(shù)就可以了。而對(duì)于數(shù)據(jù)對(duì)于上層使用者來說是如何表示的,硬件驅(qū)動(dòng)設(shè)計(jì)者可以不關(guān)心,而 MTD 存儲(chǔ)設(shè)備子系統(tǒng)都幫你做好了。

對(duì)于 MTD 字系統(tǒng)的好處,簡單解釋就是,他幫助你實(shí)現(xiàn)了,很多對(duì)于以前或者其他系統(tǒng)來說,本來也是你驅(qū)動(dòng)設(shè)計(jì)者要去實(shí)現(xiàn)的很多功能。換句話說,有了 MTD ,使得你設(shè)計(jì) Nand Flash 的驅(qū)動(dòng),所要做的事情,要少很多很多,因?yàn)榇蟛糠止ぷ鳎加?MTD 幫你做好了。

當(dāng)然,這個(gè)好處的一個(gè)“副作用”就是,使得我們不了解的人去理解整個(gè) Linux 驅(qū)動(dòng)架構(gòu),以及 MTD ,變得更加復(fù)雜。但是,總的說,覺得是利遠(yuǎn)遠(yuǎn)大于弊,否則,就不僅需要你理解,而且還是做更多的工作,實(shí)現(xiàn)更多的功能了。

此外,還有一個(gè)重要的原因,那就是,前面提到的 nand flash 和普通硬盤等設(shè)備的特殊性:

有限的通過出復(fù)用來實(shí)現(xiàn)輸入輸出命令和地址 / 數(shù)據(jù)等的 IO 接口,最小單位是頁而不是常見的 bit ,寫前需擦除等,導(dǎo)致了這類設(shè)備,不能像平常對(duì)待硬盤等操作一樣去操作,只能采取一些特殊方法,這就誕生了 MTD 設(shè)備的統(tǒng)一抽象層。

MTD ,將 nand flash , nor flash 和其他類型的 flash 等設(shè)備,統(tǒng)一抽象成 MTD 設(shè)備來管理,根據(jù)這些設(shè)備的特點(diǎn),上層實(shí)現(xiàn)了常見的操作函數(shù)封裝,底層具體的內(nèi)部實(shí)現(xiàn),就需要驅(qū)動(dòng)設(shè)計(jì)者自己來實(shí)現(xiàn)了。具體的內(nèi)部硬件設(shè)備的讀 / 寫 / 擦除函數(shù),那就是你必須實(shí)現(xiàn)的了。

2.jpg

2.MTD 設(shè)備和硬盤設(shè)備之間的區(qū)別

多說一句,關(guān)于 MTD 更多的內(nèi)容,感興趣的,去附錄中的 MTD 的主頁去看。

關(guān)于 mtd 設(shè)備驅(qū)動(dòng),感興趣的可以去參考

MTD 原始設(shè)備與 FLASH 硬件驅(qū)動(dòng)的對(duì)話

MTD 原始設(shè)備與 FLASH 硬件驅(qū)動(dòng)的對(duì)話 - 續(xù)

那里,算是比較詳細(xì)地介紹了整個(gè)流程,方便大家理解整個(gè) mtd 框架和 nand flash 驅(qū)動(dòng)。


上一頁 1 2 3 下一頁

關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉