SEP4O20在Linux NandFlash驅(qū)動中的應用
出處:張黎明 凌 明 東南大學 發(fā)布于:2011-09-02 09:01:02
Nand-flash內(nèi)存是flash內(nèi)存的一種,其內(nèi)部采用非線性宏單元模式,為固態(tài)大容量內(nèi)存的實現(xiàn)提供了廉價有效的解決方案。Nand-flash存儲器具有容量較大,改寫速度快等優(yōu)點,適用于大量數(shù)據(jù)的存儲,因而在業(yè)界得到了越來越廣泛的應用,如嵌入式產(chǎn)品中包括數(shù)碼相機、MP3隨身聽記憶卡、體積小巧的U盤等。文章給出了在嵌入式Linux下的NandFlash的驅(qū)動設計,利用嵌入式Linux系統(tǒng)的高效完善以及Linux MTD子系統(tǒng)的對存儲介質(zhì)的高度兼容,大大提高了NandFlash的使用效率,并降低了驅(qū)動開發(fā)的難度。
本文以東南大學自主設計的東芯SEP4020微處理器的為基礎,分析NandFlash的內(nèi)部結(jié)構(gòu)和Linux MTD層的框架,并基于這些研究提出了NandFlash驅(qū)動的設計和實現(xiàn)。
1 NandFlash的硬件特點
NAND閃存芯片NAND閃存是一種比硬盤驅(qū)動器更好的存儲方案,這在不超過4GB的低容量應用中表現(xiàn)得猶為明顯。隨著人們持續(xù)追求功耗更低、重量更輕和性能更佳的產(chǎn)品,NAND正被證明極具吸引力。NAND的效率較高,是因為NAND串中沒有金屬觸點。NAND閃存單元的大小比NOR要小(4F2:10F2)的原因,是NOR的每一個單元都需要獨立的金屬觸點。以本文使用的東芝TC58512FT(64MNand)為例,分為4096塊,每塊有32頁,每頁有512B的數(shù)據(jù)區(qū)+16B的OOB(out of band)區(qū)。(4096×32×512B=64MB),均通過8跟IOM線串行控制,如圖l所示。

同時由于工藝限制,NAND閃存中允許存在壞塊。NAND閃存的每一頁有16B(頁長度512B)的OOB區(qū)用來存放ECC校驗數(shù)據(jù),ECC有效標志,壞塊標志等。所有這些決定了于NAND的存儲系統(tǒng)設計需要處理不同于其它類型閃存特有問題。
2 MTD的NAND結(jié)構(gòu)
MTD(memorytechnologydevice內(nèi)存技術設備)是用于訪問memory設備(ROM、flash)的Linux的子系統(tǒng)。MTD的主要目的是為了使新的memory設備的驅(qū)動更加簡單,為此它在硬件和上層之間提供了一個抽象的接口。MTD的所有源代碼在/drivers/mtd子目錄下。CFI接口的MTD設備分為四層(從設備節(jié)點直到底層硬件驅(qū)動),這四層從上到下依次是:設備節(jié)點、MTD設備層、MTD原始設備層和硬件驅(qū)動層。
Linux MTD層是Linux操作系統(tǒng)和存儲介質(zhì)之間的一個適配層。MTD是Linux的一個子集,用來作為具體的硬件設備驅(qū)動和上層文件系統(tǒng)的橋梁。MTD層有兩個非常顯著的優(yōu)異點:

(1)簡化驅(qū)動的開發(fā)。設計基于MTD的驅(qū)動,所需要做的事情就是按照標準的公共接口函數(shù)的接口,根據(jù)微處理器NandFlash控制器的不同做適當?shù)男薷模鵁o需去理會字符(塊)設備驅(qū)動設計標準,因為所有這些復雜的與內(nèi)核的交互接口機制mtd已經(jīng)做好了,開發(fā)行的精力只需要集中在實現(xiàn)對物理設備的范圍控制。
(2)NandFlash使用環(huán)境的獨立性。上層應用只需要訪問mtd抽象層提供的字符設備方式或者塊設備方式來訪問mtd設備,因此具體驅(qū)動對于上層應用來說是具有獨立性的,即使底層驅(qū)動修改了,上層擁有也不需要改動。并且由于mtd抽象層,上層應用就可以避免直接對具體硬件操作,而是對mtd操作,這樣,這些應用就不是建立在某個具體的設備上,更好地實現(xiàn)了通用性和兼容性。
mtd抽象層用一個數(shù)組struct mtd_info*mtd_table[MAX_MTD_DEVICES]保存系統(tǒng)中所有的設備,mtd設備利用struct mtd_info這個結(jié)構(gòu)來描述,該結(jié)構(gòu)中描述了存儲設備的基本信息和具體操作所需要的內(nèi)核函數(shù),mtd系統(tǒng)的那個機制主要就是圍繞這個結(jié)構(gòu)來實現(xiàn)的。
下面簡單介紹下這個結(jié)構(gòu):

3 基于SEP4020的NandFlash驅(qū)動的實現(xiàn)
應對嵌入式處理器發(fā)展的趨勢以及市場對嵌入式微處理器芯片的需求逐漸增加。作為SOC芯片及解決方案的提供商,南京博芯電子技術有限公司日前發(fā)布了東芯IV+SEP4020嵌入式微處理器,該處理器面向交互式終端(InteractiveTerminal)類和控制類應用。它集成LCD控制器、MAC接口為一身,內(nèi)部還嵌入了EMI接口、DMA控制器、多通道定時器、大量的外部中斷。為用戶開發(fā)簡化了硬件和軟件設計,提供了豐富的接口。SEP4020使用0.18um標準CMOS的工藝設計,內(nèi)嵌ASIXCORE(32位RISC內(nèi)核,兼容ARM720T,帶8KB指令數(shù)據(jù)Cache和全功能MMU),采用馮諾依曼結(jié)構(gòu)。
3.1 NandFlash讀函數(shù)的代碼
//讀取數(shù)據(jù),長度可能為528,512,16;但由于NandFlash的控制器只支持整頁的讀寫和//oob區(qū)的讀,而這里發(fā)送的命令是讀取數(shù)據(jù),所以要整頁讀,數(shù)據(jù)長度為528.

3.2 NandFlash寫函數(shù)的代碼
由于NandFlash本身只支持整頁的寫,而不支持直接對oob區(qū)的寫操作,而MTD上層需要對oob區(qū)進行一系列的操作,因此在對oob進行操作時需要先讀取該頁數(shù)據(jù)區(qū),并將上層傳送的oob區(qū)數(shù)據(jù)一起組成一整頁,然后才能寫入NandFlash.

4 結(jié)束語
本文以NandFlash芯片的特點入手,分析了LinuxMTD層架構(gòu)及優(yōu)點,給出了基于SEP4020微處理器的NandFlash驅(qū)動設計,并利用SEP4020內(nèi)置的dma技術,提高了對NandFlash的讀寫速度。根據(jù)實驗表明,本文實現(xiàn)的NandFlash驅(qū)動提供的平均讀寫速度穩(wěn)定在250kB/s,這樣的速度在一般的嵌入式應用中已經(jīng)足夠。
版權與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://hbjingang.com,違反者本網(wǎng)將追究相關法律責任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權等法律責任。
如涉及作品內(nèi)容、版權等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關權利。
- ARM技術架構(gòu)與應用開發(fā)實踐指南2026/1/6 10:40:19
- 嵌入式實時操作系統(tǒng)(RTOS)選型與移植技術指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術選型與抗干擾設計實踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎知識2025/7/14 16:59:04









