掃描二維碼
隨時(shí)隨地手機(jī)看文章
0 引 言
隨著嵌入式系統(tǒng)的迅速發(fā)展,其應(yīng)用環(huán)境的廣泛性,復(fù)雜性對(duì)構(gòu)建于系統(tǒng)上的Nor和Nand閃存設(shè)備提出更高要求,需要閃存設(shè)備傳輸速度更快,體積更小,容量更大,穩(wěn)定性更好。該文在基于Samsung公司的S3C2410處理器平臺(tái)上,針對(duì)FLASH閃存設(shè)備在嵌入式系統(tǒng)中的應(yīng)用,詳細(xì)分析FLASH閃存設(shè)備的接口設(shè)計(jì)方法,并針對(duì)FLASH接口特點(diǎn),提出Linux環(huán)境下NorFLASH和 NandFLASH的驅(qū)動(dòng)開發(fā)流程,給出詳細(xì)的代碼分析。
1 NandFLASH和NandFLASH對(duì)比
隨著存儲(chǔ)技術(shù)的高速發(fā)展,閃存設(shè)備因其在性能和成本方面的優(yōu)勢(shì),如非易失性,可擦除性以及更低廉的價(jià)格正逐步取代傳統(tǒng)記憶體。目前常用閃存是Nor-FLASH和NandFLASH。它們的技術(shù)性能差異顯著,表1是它們的技術(shù)對(duì)比。
NorFLASH使用方便,易于連接,可以在芯片上直接運(yùn)行代碼,穩(wěn)定性出色,傳輸速率高,在小容量時(shí)有很高的性價(jià)比,這使其很適合應(yīng)于嵌入式系統(tǒng)中作為 FLASH ROM。相對(duì)于NorFLASH,NandFLASH強(qiáng)調(diào)更高的性能,更低的成本,更小的體積,更長(zhǎng)的使用壽命。這使NandFLASH很擅于存儲(chǔ)純資料或數(shù)據(jù)等,在嵌入式系統(tǒng)中用來(lái)支持文件系統(tǒng),在該S3C2410平臺(tái)上用以支持bon文件系統(tǒng)。
然而FLASH閃存卻是保證數(shù)據(jù)正確性不太理想的設(shè)備,應(yīng)用中可能出現(xiàn)壞塊;這就給其在嵌入式系統(tǒng)中的應(yīng)用,如何更好地進(jìn)行數(shù)據(jù)存儲(chǔ)管理提出了更高要求。恰當(dāng)?shù)慕涌谠O(shè)計(jì)和驅(qū)動(dòng)開發(fā)是解決問(wèn)題的關(guān)鍵,本文基于S3C2410,詳細(xì)分析FLASH接口設(shè)計(jì)和驅(qū)動(dòng)開發(fā)流程。
2 FLASH接口設(shè)計(jì)
2.1 處理器內(nèi)存分配情況
在分析FLASH的接口以及工作模式前,先分析處理器的內(nèi)存分配情況。內(nèi)核ARM920T是32位處理器,尋址空間4 GB,3 GB被處理器內(nèi)部的寄存器和一些其他設(shè)備占用,只有1 GB用于外部尋址;這1 GB的空間S3C2410分為8個(gè)部分以支持不同的設(shè)備,每個(gè)空間為128 Mb,被命名為BANK。S3C2410給每個(gè)BANK一個(gè)片選即nGCS0~nGCS7來(lái)方便對(duì)BANK的操作,將CPU上相應(yīng)的BANK連線接到外設(shè)芯片的片選引腳上就可以根據(jù)相應(yīng)的地址對(duì)存儲(chǔ)器進(jìn)行控制。
2.2 FLASH在系統(tǒng)中的架構(gòu)
FLASH模塊通過(guò)系統(tǒng)總線與處理器相連,如圖1所示。
為了擁有高速的數(shù)據(jù)交換通道,F(xiàn)LASH經(jīng)由控制器模塊通過(guò)AHB總線與處理器通信。NandFLASH控制器、NorFLASH控制器和DMA控制器都是高速總線AHB上的Master模塊,都包含符合AMBA標(biāo)準(zhǔn)的總線接口模塊與AHB交互工作。FLASH工作時(shí),F(xiàn)LASH控制器模塊和DMA控制器模塊相互協(xié)作,完成各種操作。[!--empirenews.page--]
2.3 NorFLASH的接口設(shè)計(jì)
系統(tǒng)用的NorFLASH芯片是Atmel公司開發(fā)的AT49BV1614A,存儲(chǔ)空間為16 MB,在系統(tǒng)中常用于存放代碼,系統(tǒng)上電或復(fù)位后獲得指令開始執(zhí)行,因此,應(yīng)將其配置到Bank0,將AT49BV1614A的片選端nCE接至 S3C2410的nGCS0;AT49BVl614A的輸出使能端nOE接S3C2410的nOE;寫使能端nWE接S3C2410的nWBE0;將模式選擇nBYTE上拉,使AT49BV1614A工作在 16 位數(shù)據(jù)模式。AT49BV1614A地址總線A[19~0]和S3C2410的地址總線ADDR[20 ~1相連,16位數(shù)據(jù)總線DQ[15~0]和S3C2410的低16位數(shù)據(jù)總線DATA[15~0]相連。
2. 4 NorFLASH在系統(tǒng)中的具體操作
以AT49BV1614A芯片時(shí)序圖為例,具體說(shuō)明NorFLASH的寫操作,如圖2所示。
CLE信號(hào)有效時(shí)系統(tǒng)通過(guò)I/O口向命令寄存器發(fā)送命令00H,此時(shí)WE為低電平,寫操作有效,NandFLASH處于寫狀態(tài)。發(fā)送命令后,接著發(fā)送要讀的地址,該操作將占用WE的1,2,3,4四個(gè)周期,發(fā)送地址信息時(shí),CLE為低電平,ALE為高電平。地址信息發(fā)送完畢后,不能立刻讀取數(shù)據(jù),因?yàn)榇藭r(shí)芯片正處于BUSY(忙)狀態(tài),需要等待2~20 ms,之后,才能開始數(shù)據(jù)讀取。此時(shí)WE為高電平,處于無(wú)效狀態(tài),CE片選信號(hào)也始終為低以表明選中該芯片。[!--empirenews.page--]
3 FLASH驅(qū)動(dòng)程序開發(fā)
3.1 Linux系統(tǒng)下的驅(qū)動(dòng)程序
Linux系統(tǒng)將所有的設(shè)備都看作具體的文件,通過(guò)文件系統(tǒng)對(duì)設(shè)備進(jìn)行管理。所以在Linux架構(gòu)中,和設(shè)備相關(guān)的處理分成兩層:文件系統(tǒng)層和設(shè)備驅(qū)動(dòng)層。設(shè)備驅(qū)動(dòng)層用來(lái)屏蔽具體設(shè)備的細(xì)節(jié),文件系統(tǒng)層向用戶提供一組統(tǒng)一的接口。這種設(shè)備管理方法可以很好的實(shí)現(xiàn)設(shè)備無(wú)關(guān)性,使Linux系統(tǒng)可以隨著外部設(shè)備的發(fā)展進(jìn)行擴(kuò)展,比如要添加一個(gè)設(shè)備,只要根據(jù)該硬件設(shè)備特性向文件系統(tǒng)提供一組接口,應(yīng)用程序通過(guò)系統(tǒng)調(diào)用接口來(lái)訪問(wèn)設(shè)備。
Linux系統(tǒng)里將FLASH設(shè)備歸屬到MTD設(shè)備下管理,相對(duì)于常規(guī)塊設(shè)備驅(qū)動(dòng)程序,MTD設(shè)備驅(qū)動(dòng)程序能更好的支持和管理閃存。具體講,基于MTD的 FLAsH驅(qū)動(dòng)程序,對(duì)上層可以很好的支持JFFS(針對(duì)NorFLASH)和YAFFS(針對(duì)NandFLASH)等文件系統(tǒng),對(duì)下層FLASH的讀寫,擦除,壞塊處理都能進(jìn)行很好的管理,它在硬件設(shè)備和上層文件系統(tǒng)間提供一個(gè)抽象接口。
3.2 FLASH驅(qū)動(dòng)程序開發(fā)流程
FLASH驅(qū)動(dòng)程序有兩種編程方式。一種是直接編程進(jìn)內(nèi)核(Kernel),另一種是編程成模塊(Modules),如果編程進(jìn)內(nèi)核,會(huì)增加內(nèi)核的大小,還要改動(dòng)內(nèi)核源文件,不能動(dòng)態(tài)卸載,不利于調(diào)試,所以FLASH驅(qū)動(dòng)編程采用模塊化方式較好。
FLASH驅(qū)動(dòng)開發(fā)流程要經(jīng)過(guò)四步:模塊化設(shè)計(jì),編譯,加載,調(diào)用驗(yàn)證。如圖4所示。
3.2.1 驅(qū)動(dòng)程序的模塊化設(shè)計(jì)
構(gòu)成FLASH驅(qū)動(dòng)程序的所有子程序,要進(jìn)行模塊化設(shè)計(jì),必須加入兩個(gè)函數(shù):入口函數(shù)module init()和出口函數(shù)module_exit()。在執(zhí)行程序時(shí)module_init()會(huì)調(diào)用int_init cfi probe_init(void),負(fù)責(zé)初始化MTD芯片,同時(shí)這個(gè)函數(shù)還調(diào)用register_mtd_chip_driver(),將cfi_chipdrv加入至 MTD驅(qū)動(dòng)器列表chip_drvs_list中。初始化成功返回0,否則返回負(fù)值。實(shí)現(xiàn)代碼為:
另一個(gè)函數(shù)module_exit()執(zhí)行時(shí),會(huì)調(diào)用staticvoid_exit cfi_probe_exit(void),負(fù)責(zé)清除MTD芯片驅(qū)動(dòng)工作。同時(shí)這個(gè)函數(shù)還調(diào)用unregister_mtd_chip_driver(),將cfi_chipdrv從MTD芯片驅(qū)動(dòng)器列表chip_drvs_list中刪除。實(shí)現(xiàn)代碼為:
4 結(jié) 語(yǔ) |
摘 要 :視頻監(jiān)控系統(tǒng)是計(jì)算機(jī)應(yīng)用中的重要領(lǐng)域之一。數(shù)字化攝像頭網(wǎng)絡(luò)化之后,監(jiān)控系統(tǒng)正在不斷引入新的功能,為使現(xiàn)有監(jiān)控系統(tǒng)能更好地應(yīng)對(duì)復(fù)雜環(huán)境,滿足不同監(jiān)控要求,就需要追加新功能,在系統(tǒng)架構(gòu)與設(shè)計(jì)上進(jìn)行調(diào)整。因此,如何將...
關(guān)鍵字: 智能監(jiān)控 系統(tǒng)架構(gòu) 模塊化設(shè)計(jì) 接口設(shè)計(jì) 數(shù)據(jù)傳輸 深度相機(jī)點(diǎn)擊上方名片關(guān)注我們朱老師推薦語(yǔ):此崗位為AIoT終身成長(zhǎng)大會(huì)員同學(xué)提供的自己公司的崗位內(nèi)推,總部在深圳,是一家專業(yè)從事閉路電視監(jiān)控設(shè)備、會(huì)議攝像機(jī)的研發(fā)、制造、銷售的高科技企業(yè),有學(xué)過(guò)嵌入式課程或者海思項(xiàng)目的同學(xué),想換...
關(guān)鍵字: 開發(fā)工程師 linux驅(qū)動(dòng) 驅(qū)動(dòng)開發(fā)最近在學(xué)習(xí)MIPI接口的LCD驅(qū)動(dòng)開發(fā)與調(diào)試,這里我主要用的是MIPI-DSI接口,它學(xué)習(xí)起來(lái)真的是太復(fù)雜了,特別是對(duì)于我這種很久都沒寫驅(qū)動(dòng)來(lái)說(shuō)更是頭疼,但是頭疼歸頭疼,工作咱們還是要完成的,那就只能硬著頭皮往下肝吧!首...
關(guān)鍵字: MIPI 驅(qū)動(dòng)開發(fā) 調(diào)試關(guān)注、星標(biāo)嵌入式云IOT技術(shù)圈,精彩及時(shí)送達(dá)來(lái)源|??Linux與SoC整理出了6種驅(qū)動(dòng)開發(fā)時(shí)與設(shè)備注冊(cè)、設(shè)備樹相關(guān)的調(diào)試方法,彼此間沒有優(yōu)先級(jí)之分,每種方法不一定是最優(yōu)解,但可以作為一種debug查找問(wèn)題的手段,快速定...
關(guān)鍵字: 驅(qū)動(dòng)開發(fā)最近在學(xué)習(xí)MIPI接口的LCD驅(qū)動(dòng)開發(fā)與調(diào)試,這里我主要用的是MIPI-DSI接口,它學(xué)習(xí)起來(lái)真的是太復(fù)雜了,特別是對(duì)于我這種很久都沒寫驅(qū)動(dòng)來(lái)說(shuō)更是頭疼,但是頭疼歸頭疼,工作咱們還是要完成的,那就只能硬著頭皮往下肝吧!首...
關(guān)鍵字: MIPI 驅(qū)動(dòng)開發(fā) 調(diào)試哈嘍,我是老吳,我來(lái)繼續(xù)分享我的學(xué)習(xí)心得啦。gpio和pinctrl子系統(tǒng)在內(nèi)核里的使用率非常高,和嵌入式產(chǎn)品的關(guān)聯(lián)非常大。從這兩個(gè)子系統(tǒng)開始學(xué)習(xí)驅(qū)動(dòng)開發(fā)是個(gè)不錯(cuò)的入門選擇。本文目錄:一、gpio?與?pinctrl二、...
關(guān)鍵字: gp pi 驅(qū)動(dòng)開發(fā)前陣子工作上做了一些關(guān)于 ADC 的支持,由于現(xiàn)在 ADC 相關(guān)的支持都被移動(dòng)到了 IIO (Industrial I/O) 子系統(tǒng)下,我查閱了一些關(guān)于 IIO 資料,包括書籍、文章、內(nèi)核文檔和代碼。個(gè)人感覺最好的入門文...
關(guān)鍵字: IO 驅(qū)動(dòng)開發(fā) 嵌入式來(lái)源:知乎,作者:?埃爾維斯·劉能 鏈接:https://www.zhihu.com/question/34686343/answer/308464284 前言:上班劃水在知乎看到一個(gè)帖子,網(wǎng)友問(wèn): 現(xiàn)在要選個(gè)方向,嵌入...
關(guān)鍵字: 嵌入式 驅(qū)動(dòng)開發(fā)通常我們電路板上的 IC 而言,IC 周圍的電源層可以看成是優(yōu)良的高頻電容器,它可以收集為干凈輸出提供高頻能量的分立電容器所泄漏的那部份能量。此外,優(yōu)良的電源層的電感
關(guān)鍵字: emi PCB 輻射 驅(qū)動(dòng)開發(fā)