• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于S3C2440和μC/OS的FAT文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

      2013-08-20 04:59:20趙英俊
      電子設(shè)計(jì)工程 2013年21期
      關(guān)鍵詞:高容量驅(qū)動(dòng)程序命令

      費(fèi) 超,趙英俊

      (華中科技大學(xué) 機(jī)械科學(xué)與工程學(xué)院,湖北 武漢 430074)

      嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS具有源代碼公開、良好的實(shí)時(shí)性等優(yōu)點(diǎn),廣泛應(yīng)用于各種嵌入式系統(tǒng)中,特別是實(shí)時(shí)數(shù)據(jù)采集與處理的嵌入式系統(tǒng)。這種嵌入式系統(tǒng)往往需要存儲(chǔ)大量的數(shù)據(jù),并且需要將存儲(chǔ)的數(shù)據(jù)方便地轉(zhuǎn)移到PC平臺(tái)進(jìn)行后續(xù)的離線分析。

      常見的嵌入式系統(tǒng)往往采用EEPROM外部存儲(chǔ)芯片,容量小、速度慢而且不便于數(shù)據(jù)的移動(dòng),因此需要結(jié)合硬件平臺(tái)選擇一種大容量且具有移動(dòng)靈活性的存儲(chǔ)設(shè)備。另外,考慮到在PC平臺(tái)的離線處理的便捷需要,存儲(chǔ)系統(tǒng)采用廣泛應(yīng)用的FAT文件系統(tǒng)。

      1 方案選擇

      由于S3C2440具有專門的SDIO接口,且SD卡具有容量大、速度快、移動(dòng)靈活和安全性高等優(yōu)點(diǎn)[1]。綜合考慮,選擇采用SD卡作為移動(dòng)存儲(chǔ)設(shè)備。

      軟件設(shè)計(jì)上,首先要實(shí)現(xiàn)在μC/OS下的SD卡驅(qū)動(dòng),同時(shí)要保證兼容標(biāo)準(zhǔn)SD卡和SDHC卡。完成SD卡驅(qū)動(dòng)后,還要在基于μC/OS的嵌入式系統(tǒng)中方便地實(shí)現(xiàn)對(duì)FAT文件系統(tǒng)下的文件的多種操作。如果從無到有設(shè)計(jì)FAT文件系統(tǒng)軟件模塊,將費(fèi)時(shí)費(fèi)力并且難以保證軟件模塊的可靠性。因此,最好的方案是采用通用的FAT文件系統(tǒng)軟件模塊,只需要進(jìn)行較少的移植工作,完成項(xiàng)目效率大大增加。

      通用的 FAT 文件系統(tǒng)主要有 μC/FS、FatFs、EFSL、ZLG/FS、znFAT等。其中μC/FS是Micrium公司開發(fā)的一個(gè)商業(yè)用途的文件系統(tǒng),兼容性、穩(wěn)定性較好。ZLG/FS和znFAT主要面向?qū)W習(xí)用途。而FatFs是免費(fèi)開源的項(xiàng)目,具有代碼精簡(jiǎn)、易于移植、支持RTOS、支持Unicode長(zhǎng)文件名等特點(diǎn),特別是其提供的底層讀寫函數(shù),具有讀寫塊數(shù)量的參數(shù),可以一次命令讀寫多個(gè)扇區(qū),在速度與效率上具有明顯優(yōu)勢(shì),而μC/FS和EFSL都不提供塊數(shù)量參數(shù)。因此,選擇FatFs作為文件系統(tǒng)軟件模塊。

      圖1 系統(tǒng)總體結(jié)構(gòu)圖Fig.1 Structure diagram of the system

      總體方案采用基于SDIO接口的SD卡存儲(chǔ)設(shè)備和FatFs文件系統(tǒng),其系統(tǒng)總體結(jié)構(gòu)如圖1所示。SD卡從S3C2440微處理器的SDIO接口接入硬件層,通過SD卡驅(qū)動(dòng)程序提供給FatFs文件系統(tǒng)進(jìn)行管理,然后用戶在功能層調(diào)用FatFs提供的文件接口函數(shù)進(jìn)行數(shù)據(jù)存儲(chǔ)等任務(wù)。

      2 硬件電路

      如圖2所示為本次SD卡硬件電路圖,其中S3C2440微處理器上有SDIO控制器,連接的SD總線包括時(shí)鐘線CLK、命令線CMD及4根數(shù)據(jù)線 (DAT0~DAT3)[2]。S3C2440通過SDIO接口與SD卡座相連,其中卡座上除了6根SD總線外,還有3根電源線,以及無卡檢測(cè)引腳nCD和寫保護(hù)引腳WP。其中nCD和WP是連接到卡座上的兩個(gè)常開型機(jī)械開關(guān),開關(guān)的另一端接地。當(dāng)插入SD卡時(shí),開關(guān)合上,nCD從高電平變?yōu)榈碗娖?,?dāng)插入的是未寫保護(hù)的SD卡時(shí),另一個(gè)開關(guān)也會(huì)合上,WP從高電平變?yōu)榈碗娖?,而未插入SD卡以及插入寫保護(hù)的SD卡時(shí),WP被上拉成高電平。SD卡側(cè)面的寫保護(hù)的撥動(dòng)開關(guān)實(shí)現(xiàn)寫保護(hù)的原理不是通過開閉SD卡內(nèi)部的線路,而是通過不同位置作用于SD卡座內(nèi)的機(jī)械彈性開關(guān)的開閉。SD卡有9個(gè)引腳,支持SD和SPI兩種總線方式,其中SD總線方式又分為1位數(shù)據(jù)模式和4位數(shù)據(jù)模式,本文設(shè)計(jì)采用采用4位數(shù)據(jù)模式,可以獲得更高傳輸速率,具體過程在SD卡驅(qū)動(dòng)中實(shí)現(xiàn)。

      圖2 硬件電路圖Fig.2 Hardware circuit diagram

      3 軟件實(shí)現(xiàn)

      3.1 SD卡驅(qū)動(dòng)

      SD卡驅(qū)動(dòng)程序的功能是給FatFs文件系統(tǒng)提供對(duì)SD卡的讀寫操作接口,屏蔽掉上層軟件對(duì)硬件的直接操作,其中主要包括初始化SD卡、讀數(shù)據(jù)、寫數(shù)據(jù)等?,F(xiàn)在市場(chǎng)上的SD卡有SD1.0協(xié)議下的標(biāo)準(zhǔn)容量卡、SD2.0協(xié)議下的標(biāo)準(zhǔn)容量卡和高容量卡(SDHC),為了使驅(qū)動(dòng)程序兼容性好,必須同時(shí)支持這些類型。

      在初始化SD卡時(shí),要識(shí)別并記錄SD卡的類型,然后在讀寫數(shù)據(jù)時(shí),根據(jù)不同類型進(jìn)行操作。SD卡通信是由主機(jī)控制,通過CMD線發(fā)出不同類型的命令(Command),然后被尋址的SD卡在CMD線上產(chǎn)生相應(yīng)的響應(yīng)(Response),當(dāng)CMD線上是數(shù)據(jù)傳輸命令時(shí),數(shù)據(jù)線DAT0或DAT0~DAT3接著進(jìn)行數(shù)據(jù)傳輸。

      SD卡初始化流程圖如圖 3所示,最開始初始化SD卡控制器時(shí),配置SD卡工作在傳輸效率較高的4位數(shù)據(jù)傳輸模式。命令CMD0實(shí)現(xiàn)復(fù)位SD卡,使其進(jìn)入到空閑狀態(tài),命令CMD8是SD2.0協(xié)議新增加的接口條件檢查命令,用來檢查電壓匹配和擴(kuò)展SD1.0協(xié)議中某些原有命令的功能,例如命令A(yù)CMD41在參數(shù)中增加了HCS(Host Capacity Support)位,在響應(yīng)中增加了CCS(Card Capacity Status)位,同時(shí)也能根據(jù)SD卡是否產(chǎn)生響應(yīng)來判斷SD卡版本,SD1.0版本的SD卡不能識(shí)別該命令,不會(huì)產(chǎn)生響應(yīng)。同時(shí)通過SD卡返回的響應(yīng)中的CCS位來判斷是否為SDHC卡。另外,針對(duì)讀寫SD卡時(shí)的差異,將SD卡總結(jié)為兩種類型,標(biāo)準(zhǔn)容量SD卡 (包括SD1.0和SD2.0標(biāo)準(zhǔn)容量卡)和高容量SD卡,在后面進(jìn)行讀寫數(shù)據(jù)時(shí),要分別處理。最后發(fā)送命令CMD2和CMD3使SD卡從卡識(shí)別模式進(jìn)入數(shù)據(jù)傳輸模式,處于等待狀態(tài),后面可以發(fā)送相關(guān)存儲(chǔ)器訪問命令。

      在本設(shè)計(jì)中,結(jié)合FatFs的移植需要,將用到的存儲(chǔ)器訪問 命 令 有 塊 讀 取 命 令 (CMD17,CMD18), 塊 寫 入 命 令(CMD24,CMD25),其中 CMD17和 CMD24為單塊操作命令,CMD18和CMD25為連續(xù)多塊操作命令[3]。以下為標(biāo)準(zhǔn)容量SD卡和高容量SD卡在存儲(chǔ)器訪問命令上的主要功能區(qū)別。

      1)存儲(chǔ)器訪問的命令參數(shù)(Command Argument)。標(biāo)準(zhǔn)容量SD卡的32位命令參數(shù)是對(duì)字節(jié)尋址,高容量SD卡的命令參數(shù)是對(duì)塊尋址。

      2)塊長(zhǎng)度。標(biāo)準(zhǔn)容量SD卡的塊長(zhǎng)度根據(jù)CMD16命令設(shè)置大小,而高容量SD卡的塊大小固定為512字節(jié),必須設(shè)置塊大小寄存器為0x200。

      除此之外,兩者還有局部尋址、寫保護(hù)、讀寫超時(shí)等方面的區(qū)別,針對(duì)以上主要區(qū)別,采用以下解決辦法實(shí)現(xiàn)同時(shí)兼容兩種SD卡。讀寫數(shù)據(jù)函數(shù)給上層文件系統(tǒng)模塊提供對(duì)SD卡的塊地址訪問,并統(tǒng)一塊大小為512Byte。如圖 4為SD卡讀取單塊數(shù)據(jù)的流程圖,在發(fā)送讀取命令CMD17前先根據(jù)初始化SD卡時(shí)確定的卡類型來進(jìn)行處理。

      圖3 SD卡初始化流程圖Fig.3 SD cardinitialization flow chart

      提供的變量是塊地址,因此可以直接作為高容量卡的命令參數(shù),而標(biāo)準(zhǔn)容量SD卡的命令參數(shù)是字節(jié)單位,需要塊地址乘以塊大?。?12Byte),即左移9位,轉(zhuǎn)換為字節(jié)地址。其他塊讀寫命令CMD18、CMD24、CMD25處理辦法與此相同,實(shí)現(xiàn)多塊讀取函數(shù)、單塊寫入函數(shù)、多塊寫入函數(shù)。

      圖4 讀取單塊數(shù)據(jù)流程圖Fig.4 Flow chart of reading a block

      SD卡驅(qū)動(dòng)程序還支持SD卡插拔檢測(cè)和寫保護(hù)功能。配置無卡檢測(cè)接入引腳為外部中斷方式,并設(shè)計(jì)中斷處理函數(shù),隨時(shí)通知軟件系統(tǒng)當(dāng)前SD卡的插拔狀態(tài)。SD卡的寫保護(hù)采用軟件方式實(shí)現(xiàn),實(shí)現(xiàn)方法有兩種,一種是在SD卡的兩個(gè)寫數(shù)據(jù)的驅(qū)動(dòng)函數(shù)開始處加入查詢寫保護(hù)引腳狀態(tài),一旦寫保護(hù)開啟,則通知軟件系統(tǒng),并取消執(zhí)行后面寫數(shù)據(jù)流程。另一種可選方法是在FatFs文件系統(tǒng)層實(shí)現(xiàn)。

      3.2 FatFs文件系統(tǒng)移植

      FatFS是一個(gè)為小型嵌入式系統(tǒng)設(shè)計(jì)的通用FAT文件系統(tǒng)模塊。FatFs的編寫遵循ANSI C,并且完全與磁盤I/O層分開。因此,它獨(dú)立于硬件架構(gòu)。它可以被嵌入到低成本的微控制器中而不需要做任何修改。FatFs已經(jīng)封裝了對(duì)文件系統(tǒng)層和磁盤管理層的操作。對(duì)它的移植,主要在于配置FatFs功能和寫好SD卡驅(qū)動(dòng)接口[4]。

      FatFs的配置選項(xiàng)在ffconf.h中,實(shí)現(xiàn)文件系統(tǒng)接口函數(shù)的剪裁,需要結(jié)合嵌入式系統(tǒng)硬件平臺(tái)和具體應(yīng)用來設(shè)置。由于本次系統(tǒng)平臺(tái)是小端模式,為了獲得較好的軟件性能,_WORD_ACCESS設(shè)為1,配置為字訪問,比字節(jié)訪問快;由于SD卡屬于Menory Card,_MAX_SS必須設(shè)為512,代表塊大小最大為512 Byte;其他采用默認(rèn)設(shè)置即可。

      底層接口函數(shù)有6個(gè),位于diskio.c中,主要是調(diào)用SD卡驅(qū)動(dòng)程序?qū)崿F(xiàn)。

      1)disk_initialize():磁盤初始化函數(shù),調(diào)用 SD 卡初始化函數(shù)實(shí)現(xiàn)。

      2)disk_read:讀扇區(qū)函數(shù),調(diào)用SD卡塊讀取函數(shù)實(shí)現(xiàn)。

      3)disk_write:寫扇區(qū)函數(shù),調(diào)用SD卡塊寫入函數(shù)實(shí)現(xiàn)。

      4)disk_status:狀態(tài)檢測(cè)函數(shù),共包含三種返回狀態(tài),包括STA_NOINIT ( 未 初 始 化 )、STA_NODISK ( 無 磁 盤 )、STA_PROCTECTED(卡保護(hù))??梢栽诖颂幉樵僑D卡寫保護(hù)引腳的狀態(tài),返回STA_POCTECTED卡保護(hù)狀態(tài)。正常返回0即可。

      5)disk_ioctl:磁盤控制函數(shù),包括獲取磁盤容量等,在文件系統(tǒng)實(shí)現(xiàn)一些復(fù)雜功能時(shí)會(huì)用到,簡(jiǎn)單應(yīng)用直接返回0即可。

      6)get_fattime:獲取當(dāng)前系統(tǒng)時(shí)間,查詢 S3C2440的實(shí)時(shí)時(shí)鐘[5],并轉(zhuǎn)換為32位無符號(hào)整數(shù)返回即可。

      完成FatFs移植后,上層應(yīng)用經(jīng)常訪問的API有:f_mount()注冊(cè)或注銷一個(gè)工作區(qū)域、f_open()打開或創(chuàng)建一個(gè)文件、f_close()關(guān)閉文件、f_read()讀取數(shù)據(jù)、f_write()寫數(shù)據(jù)、f_lseek()移動(dòng)讀寫指針等。

      4 實(shí)驗(yàn)測(cè)試

      在μC/OS系統(tǒng)下增加數(shù)據(jù)存儲(chǔ)任務(wù)測(cè)試FatFs文件系統(tǒng)能否滿足本次數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)保存的需要。其中數(shù)據(jù)采集部分是采用一個(gè)具有SPI接口的TLC2543模數(shù)轉(zhuǎn)換器以200 Hz的采樣頻率采集12位精度的數(shù)據(jù)。數(shù)據(jù)存儲(chǔ)任務(wù)實(shí)現(xiàn)將采集任務(wù)發(fā)送過來的緩存數(shù)據(jù)保存到SD卡中,存儲(chǔ)任務(wù)[6]設(shè)計(jì)如圖5所示。

      采集并保存半小時(shí)的數(shù)據(jù)到SD卡中,關(guān)機(jī)后,將SD卡取出插入到計(jì)算機(jī)中,將文件中的數(shù)據(jù)繪制曲線,與數(shù)據(jù)采集輸入的信號(hào)吻合,驗(yàn)證了FAT文件系統(tǒng)能夠正常工作,并且已經(jīng)滿足當(dāng)前數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)轉(zhuǎn)移的需求。另外,系統(tǒng)運(yùn)行過程中,由于軟件實(shí)現(xiàn)了無卡檢測(cè)功能,支持熱插拔,系統(tǒng)可以長(zhǎng)時(shí)間工作仍能穩(wěn)定運(yùn)行。

      圖5 數(shù)據(jù)存儲(chǔ)任務(wù)流程圖Fig.5 Flow chart of data storage task

      5 結(jié) 論

      本設(shè)計(jì)在硬件上采用S3C2440的SDIO接口實(shí)現(xiàn)底層驅(qū)動(dòng),軟件上采用FatFs實(shí)現(xiàn)μC/OS下FAT文件系統(tǒng)的管理,滿足數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)移動(dòng)的需求。其中兼容標(biāo)準(zhǔn)SD卡和SDHC卡的驅(qū)動(dòng)實(shí)現(xiàn)方法可以應(yīng)用到其他具有SDIO接口的硬件平臺(tái),通用性好。另外,F(xiàn)atFs經(jīng)過了大量用戶的使用和測(cè)試,運(yùn)行穩(wěn)定可靠,并且其具有較多的上層接口,可以應(yīng)用于更多復(fù)雜文件管理功能的任務(wù)。

      [1]劉榮林,程曉東.基于ARM和μC/OS的SD卡文件系統(tǒng)設(shè)計(jì)[J].內(nèi)蒙古大學(xué)學(xué)報(bào):自然科學(xué)版,2009, 40(3):309-314.

      LIU Rong-lin,CHENG Xiao-dong.Design of the SD card file systems based on ARM and μC/OS-Ⅱ [J].Journ al of Inner Mongolia University:Natural Science,2009,40(3):309-314.

      [2]師超.SDIO接口的軟硬件實(shí)現(xiàn)及性能評(píng)估[D].南京:東南大學(xué),2006.

      [3]SD Card Association.SD SpecificationsPart1:Physical LayerSimplifiedSpecification Version 2.00[EB/OL].(2006-09-25)[2013-03-10].https://www.sdcard.org/downloads/pls/simplified_specs/archive/part1_200.pdf.

      [4]李世奇,董浩斌,李榮生.基于FatFs文件系統(tǒng)的SD卡存儲(chǔ)器設(shè)計(jì)[J].測(cè)控技術(shù),2011(12):79-81.

      LI Shi-ji,DONG Hao-bin,LI Rong-sheng.Design of SD memory card based on FatFs file system[J].Measurement&Control Technology,2011(12):79-81.

      [5]Samsungsemiconductor.S3C2440A32-BitCMOSMicrocontroller User’s Manual[EB/OL].(2004-06-03)[2013-3-11]http://wenku.baidu.com/view/2adfbaea5ef7ba0d 4a733b54.html.

      [6]周慈航.基于嵌入式實(shí)時(shí)操作系統(tǒng)的程序設(shè)計(jì)技術(shù)[M].2版.北京:北京航空航天大學(xué)出版社,2011.

      猜你喜歡
      高容量驅(qū)動(dòng)程序命令
      只聽主人的命令
      移防命令下達(dá)后
      這是人民的命令
      高容量連續(xù)性血液凈化治療對(duì)膿毒血癥致早期急性腎損傷的效果分析
      高容量咪唑型螯合樹脂的制備及其對(duì)Cd(Ⅱ)和Zn(Ⅱ)的吸附性能
      高容量血液濾過聯(lián)合機(jī)械通氣治療急性呼吸窘迫綜合征的療效觀察
      藍(lán)色命令
      急性高容量血液稀釋及其聯(lián)合控制性降壓對(duì)老年患者血乳酸及氧化指標(biāo)的影響
      驅(qū)動(dòng)程序更新與推薦
      驅(qū)動(dòng)程序更新與推薦
      长葛市| 安国市| 通化县| 泰顺县| 疏附县| 丰宁| 马关县| 宁化县| 闽清县| 乳山市| 周口市| 东宁县| 新源县| 湖口县| 黄浦区| 丰都县| 越西县| 静宁县| 崇义县| 丰县| 万宁市| 弋阳县| 瑞丽市| 资溪县| 彩票| 偃师市| 信宜市| 格尔木市| 甘谷县| 濉溪县| 宜都市| 泸州市| 巴彦县| 翼城县| 古交市| 乐平市| 镇沅| 东乌| 南昌市| 温宿县| 阜新|