<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > FatFS的水動力實驗數(shù)據(jù)存儲系統(tǒng)設(shè)計

          FatFS的水動力實驗數(shù)據(jù)存儲系統(tǒng)設(shè)計

          作者: 時間:2013-04-23 來源:網(wǎng)絡(luò) 收藏

          3 系統(tǒng)軟件設(shè)計
          系統(tǒng)采用的軟件流程圖如圖4所示。

          本文引用地址:http://www.ex-cimer.com/article/148053.htm

          d.JPG


          3.1 MicroSD接口函數(shù)
          接口函數(shù)依據(jù)通信協(xié)議V2.0編寫,需要SDIO口函數(shù)以及底層接口函數(shù)的支持。ST公司提供的庫函數(shù)中包括了SDIO單元的操作,能很快實現(xiàn)SD卡模式的讀寫操作。其中,最重要的是2個函數(shù):一個是SD_WriteBlock函數(shù),向SD卡寫入數(shù)據(jù);另外一個是SD_Read Bl ock函數(shù),用于讀取SD卡上面的數(shù)據(jù)。讀/寫扇區(qū)結(jié)構(gòu)圖如圖5和圖6所示。

          e.JPG


          3.2 USB接口函數(shù)
          系統(tǒng)在工程中加入ST公司提供的USB函數(shù),在主函數(shù)中調(diào)用即可完成USB的初始化過程。在中斷映射單元中,將可能產(chǎn)生中斷的USB事件映射到3個不同的NVIC請求線上:
          ◆USB低優(yōu)先級中斷(通道20):可由所有USB事件觸發(fā)(正確傳輸,USB復(fù)位等),固件在處理中斷前應(yīng)當首先確定中斷源。
          ◆USB高優(yōu)先級中斷(通道19):僅能由同步和雙緩沖批量傳輸?shù)恼_傳輸事件觸發(fā),目的是保證最大的傳輸速率。
          ◆USB喚醒中斷(通道42):由USB掛起模式的喚醒事件觸發(fā)。
          USB接口和SDIO接口都使用了STM32的嵌套向量中斷控制器(NVIC),需要對使用搶占式中斷優(yōu)先級和響應(yīng)式中斷優(yōu)先級進行配置。設(shè)置SDIO接口的中斷優(yōu)先級最高,即搶占式優(yōu)先級為0,響應(yīng)式優(yōu)先級為0。而USB的搶占式中斷優(yōu)先級為1,響應(yīng)式優(yōu)先級依次降低。USB接入Host流程圖如圖7所示。

          f.JPG


          3.3 RTC模塊函數(shù)
          在本系統(tǒng)中,對的計數(shù)器寄存器(RTC_CNTH/RTC_CNTL)和備份數(shù)據(jù)寄存器(BKP_DRx)進行配置,前者的值表示了基于0時0分0秒數(shù)值的累加進位,通過時間處理函數(shù),獲得當前日歷和時刻信息;后者在于系統(tǒng)上電后,判斷是否需要重新進行時鐘初始配置,如先寫入0xA5A,通過看寄存器是否還是0xA5A,判斷是否掉過電。如果掉過電,則需要對系統(tǒng)時間進行校正。

          4 文件系統(tǒng)的移植
          4.1 文件系統(tǒng)結(jié)構(gòu)
          本系統(tǒng)采用基于 V0.09的文件系統(tǒng)。文件系統(tǒng)的作用是保證其讀寫的數(shù)據(jù)能夠被大多數(shù)通用設(shè)備識別。例如使用FAT文件系統(tǒng),通過USB設(shè)備可以對存儲的文件進行操作,或者取下MicroSD卡后使用標準的讀卡器在PC機上讀出。當前應(yīng)用廣泛的嵌入式文件系統(tǒng)有μC/ FS、開源的EFSL(Embedded File System Library)與FatFS等。本設(shè)計中的FatFS使用ANSI C編寫,具有很好的硬件平臺獨立性,同時層次結(jié)構(gòu)非常清晰,如圖8所示。最頂層是應(yīng)用層,這一層為用戶提供一系列API甬數(shù),如f_open、f_close、f_read、f_write等,用戶可以像C文件一樣讀/寫FAT文件。中間層FatFS Module完整地實現(xiàn)了FAT協(xié)議,用戶無需對此進行任何修改。最底層是在移植過程中需要處理的接口,包括存儲媒介讀/寫接口Lowlevel disk I/O和文件創(chuàng)建/修改時間時所需的實時時鐘。用戶根據(jù)具體的硬件編寫程序,填充相關(guān)函數(shù),即可使FatFS文件系統(tǒng)應(yīng)用在具體的嵌入式平臺設(shè)備上。

          g.JPG


          4.2 FatFS移植
          FatFS的最新版本是V0.09。FatFs的主程序包含5個文件,即fdiskio.h、fconf.h、ff.c、ff.h和integer.h。移植中,還需要添加diskio.c文件與diskio.h構(gòu)成底層的硬件I/O。ff.c和ff.h是主要的應(yīng)用函數(shù),上層的API函數(shù)都在其中;ffconI.h主要涉及FatFS的配置和裁減;而integer.h中定義了FatFS軟件所使用的各種數(shù)據(jù)類型。移植FatFS的過程中不需要對diskio.h和ff.c進行修改。移植工作首先核實integer.h中的數(shù)據(jù)類型,定義與數(shù)據(jù)類型是否相符。其次,實現(xiàn)diskio.c中6個主要函數(shù),最后在ffconf.h中對文件系統(tǒng)的裁減配置。diskio.c包含的6個接口函數(shù)為:disk_initialize、disk_status、disk ioctl、disk read、disk write和disk_fat time。具體移植過程如下:
          DSTATUS disk_initialize(BYTE drv)為存儲介質(zhì)初始化函數(shù)。drv是存儲介質(zhì)號碼,本設(shè)計中是SD卡的初始化函數(shù),只需支持一個存儲介質(zhì),因此drv設(shè)為0。執(zhí)行無誤,返回0值。
          DSTATUS disk_status(BYTE drv)為存儲介質(zhì)狀態(tài)檢測函數(shù)。檢測是否支持當前的存儲介質(zhì)。事實上,只要drv為0,系統(tǒng)就默認為支持,執(zhí)行無誤返回0。
          DRESULT disk_read(BYTE drv,BYTE*buff,DWORD sector,BYTE count)為讀扇區(qū)函數(shù)。drv設(shè)為0,*burf指向存儲的數(shù)據(jù),sector是讀的起始扇區(qū),count是需要讀的扇區(qū)數(shù)目。將SD卡讀數(shù)據(jù)接口函數(shù)根據(jù)參數(shù)填寫、調(diào)用,函數(shù)執(zhí)行無誤返回0,錯誤則返回非0。

          晶振相關(guān)文章:晶振原理


          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();