亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于MSP430F5438和FatFs嵌入式文件系統(tǒng)的實現(xiàn)

        2011-01-04 02:07:20路敦強吳曉榮
        關(guān)鍵詞:嵌入式功能檢測

        路敦強,吳曉榮

        (天津師范大學 物理與電子信息學院,天津 300387)

        基于MSP430F5438和FatFs嵌入式文件系統(tǒng)的實現(xiàn)

        路敦強,吳曉榮

        (天津師范大學 物理與電子信息學院,天津 300387)

        以TI公司的MSP430F5438為控制核心,移植了開源免費的FatFs,詳細介紹了移植的過程,給出必要的移植代碼,在SD卡上實現(xiàn)了FAT文件系統(tǒng).

        文件系統(tǒng);FatFs;MSP430;SD卡

        隨著電子信息技術(shù)的發(fā)展,越來越多的嵌入式系統(tǒng)需要對大容量的數(shù)據(jù)進行讀取和存儲.傳統(tǒng)的利用非易失性存儲器(FALSH和EEPROM等)按地址和字節(jié)讀寫的方法日益不能滿足實際應用的需求[1].而利用嵌入式的文件系統(tǒng)管理存儲介質(zhì)和數(shù)據(jù),不僅靈活易用,而且能與通用的操作系統(tǒng)平臺用文件直接交換數(shù)據(jù).在一些需要PC接收處理數(shù)據(jù)的應用上,如果在SD卡或U盤用嵌入式的文件系統(tǒng)讀寫數(shù)據(jù),既省去了以往常用的通信接口設計(如串口和USB口等)和通信協(xié)議的制定,又可以避免上位機軟件的開發(fā).此外,采用嵌入式的文件系統(tǒng)避免了嵌入通用的操作系統(tǒng),降低了對硬件的要求和成本.因此,利用嵌入式的文件系統(tǒng)管理存儲介質(zhì)成為一種趨勢.

        常用的文件系統(tǒng)有FAT16,F(xiàn)AT32,NTFS,Ext,Ext2和HPFS等,由于微軟Windows系統(tǒng)的廣泛使用,其中以FAT16和FAT32最為通用.支持FAT格式且開源、免費的有EFSL和FatFs兩種,而FatFs在較大文件的讀寫上更具效率,因此本研究采用FatFs.存儲介質(zhì)可以選用U盤或SD卡,使用U盤還需專用的USB芯片,為簡單起見,本研究選擇SD卡.

        1 FatFs簡介

        FatFs是一個專為小型嵌入式系統(tǒng)設計的開源免費的FAT文件系統(tǒng)[2].它完全由ANSI C編寫,且完全獨立于存儲介質(zhì)的讀寫I/O,所以不需修改就可以移植到各種硬件平臺上,現(xiàn)在已經(jīng)成功移植到AVR,PIC和ARM等低成本的微控制器上.FatFs主要具有以下特性:(1)兼容FAT12,F(xiàn)AT16和FAT32文件系統(tǒng);(2)ANSI C編寫,不受應用平臺限制,易于移植;(3)只需要很少的代碼空間和數(shù)據(jù)空間;(4)多樣的配置選項:多種存儲媒介支持、長文件名支持、RTOS支持、可配置為只讀和最小化API等.FatFs是一個不斷更新完善的軟件,其源碼和使用說明等信息可以在其官方主頁上下載[2].

        FatFs具有良好的層次結(jié)構(gòu),方便在不同的平臺上移植,如圖1所示.

        圖1 FatFs的分層結(jié)構(gòu)Figure 1 Divided layers structure of FatFs

        FatFs共分3層.最頂層是應用層,提供了一系列的應用函數(shù),如f_open,f_close,f_read,f_write和f_mkdir等,可以直接讀寫文件或文件夾,而使用者不需知道復雜的FAT協(xié)議和FatFs內(nèi)部復雜的函數(shù).中間層FatFs實現(xiàn)了FAT文件讀/寫協(xié)議.底層是存儲介質(zhì)讀寫I/O,移植者只需要編寫6個接口函數(shù)即可,如塊讀函數(shù)和塊寫函數(shù)等.

        2 系統(tǒng)硬件設計

        微控制單元(Micro Control Unit,MCU)選用TI公司的MSP430F5438,它是一個16位的超低功耗單片機,具有256KB閃存、16KB RAM、12位ADC、4個USCI和32位HW乘法器,最高工作頻率是18MHz[3].其中4個USCI可以配置為SPI,UART和I2C中的任意一種,在與SD卡相連時配置為SPI模式.

        MSP430F5438與SD卡的連接如圖2所示.

        圖2 MSP430F5438與SD卡的連接原理圖Figure 2 Schematic of MSP430F5438connected with SD card

        SD卡可以采用SD總線訪問,也可以采用SPI總線訪問[4],考慮到MSP430F5438只有SPI總線接口,所以直接用SPI1(P5.5_UCB1CLK,P5.4_UCB1SOMI,P3.7_UCB1SIMO 和 P3.6_UCB1STE)與SD卡相連.

        卡供電模式采用可控方式[5],這樣在SD卡進入不確定狀態(tài)時,可以通過對卡重新上電使卡復位,而無需拔出卡.可控電路采用P型MOS管2SJ355,由MCU的P4.7控制.當P4.7輸出高電平時,2SJ355關(guān)斷,不給卡供電;當P4.7輸出低電平時,2SJ355開通,給SD卡供電.

        卡檢測電路包括2部分:卡是否完全插到卡座中和卡是否寫保護.檢測信號由卡座的2個引腳以電平方式輸出.當卡插入到卡座并插入到位時,由于卡座內(nèi)部的觸點連接到地線,P4.6為低電平;當卡拔出時,該引腳被拉為高電平.卡是否寫保護的檢測原理與卡是否完全插入到卡座中的檢測原理相同.

        3 FatFs的移植

        FatFs的最新版本是 R0.08版.下載到的FatFs主程序包括5個文件:ffconf.h,ff.h,ff.c,diskio.h和integer.h.在實際的使用過程中移植者需要添加1個diskio.c文件,與diskio.h構(gòu)成底層的硬件I/O.ff.h和ff.c是FatFs主要的應用函數(shù),向上層提供的API函數(shù)都包含在里面.ffconf.h主要對FatFs配置和裁減.integer.h定義了FatFs使用的數(shù)據(jù)類型,本次移植使用的軟件平臺是IAR4.11B,需要對integer.h內(nèi)定義的數(shù)據(jù)類型作一定的修改.

        3.1 配置MCU的SPI口

        本研究要把MSP430F5438的USCI1配置成SPI模式.具體配置為8位主機模式,數(shù)據(jù)高位在前.代碼如下:

        配置之后USCI1就可以以SPI的方式通信.

        3.2 編寫SPI操作函數(shù)和SD卡的命令層函數(shù)

        SPI操作函數(shù)主要有通過SPI口寫1個字節(jié)、讀1個字節(jié)、片選SPI從機和修改SPI時鐘等.SPI通信時不以中斷形式運行,而是以查詢相關(guān)寄存器狀態(tài)位的方式完成讀寫.

        用SPI方式寫1個字節(jié):

        在SPI操作函數(shù)的基礎(chǔ)上就可以實現(xiàn)SD的命令層函數(shù),主要有向SD卡發(fā)送1個命令、讀SD卡內(nèi)部寄存器、復位SD卡、塊命令和CRC校驗等.此外,還需要幾個輔助函數(shù),如檢測SD卡是否插到位和是否寫保護等.

        3.3 編寫SD卡的API函數(shù)

        SD的API函數(shù)由FatFs的硬件層調(diào)用,實現(xiàn)FatFs的disk I/O.SD的API函數(shù)主要由初始化SD卡、讀多個塊和寫多個塊等構(gòu)成.具體函數(shù)形式如下:

        3.4 編寫diskio.c

        最新的FatFs R0.08版本中沒有diskio.c,需要移植者添加到工程項目中.diskio.c有6個接口函數(shù):disk_initialize,disk_status,disk_read,disk_write,disk_ioctl和get_fattime.它們分別實現(xiàn)了存儲介質(zhì)初始化、狀態(tài)讀取、介質(zhì)讀、介質(zhì)寫、介質(zhì)控制和獲取時鐘的功能.

        (1)DSTATUS disk_initialize(BYTE Drive);

        存儲媒介初始化函數(shù).入口參數(shù)Drive是存儲媒介編號,因為系統(tǒng)中只有1個SD卡,Drive為0即可.函數(shù)實體內(nèi)調(diào)用已經(jīng)編寫好的SD卡API函數(shù)中的初始化SD卡函數(shù)SD_Initialize即可.

        (2)DSTATUS disk_status(BYTE Drive);

        狀態(tài)檢測函數(shù).檢測存儲媒介是否存在、初始化及寫保護.在本設計中只要檢測到SD卡已經(jīng)插到位、初始化且沒有寫保護返回0即可.SD沒有初始化則返回1,沒有SD卡返回2,SD卡寫保護返回4.

        (3)DRESULT disk_read(BYTE Drive,BYTE*Buffer,DWORD SectorNumber,BYTE SectorCount);

        讀多塊函數(shù).*Buffer是讀取緩存,SectorN-umber是起始塊號,SectorCount是要讀取的塊的個數(shù).函數(shù)實體內(nèi)調(diào)用SD卡API函數(shù)SD_Read-MultiBlock即可.讀取正確返回0,錯誤返回非0.

        (4)DRESULT disk_write(BYTE Drive,const BYTE*Buffer,DWORD SectorNumber,BYTE SectorCount);

        寫多塊函數(shù).*Buffer是寫緩存,SectorNumber是起始塊號,SectorCount是要寫的塊的個數(shù).函數(shù)實體內(nèi)調(diào)用SD卡API函數(shù)SD_Write-MultiBlock即可.寫正確返回0,錯誤返回非0.

        (5)DRESULT disk_ioctl(BYTE Drive,BYTE Command,void*Buffer);

        存儲媒介控制函數(shù).Command是控制代碼,*Buffer是接收數(shù)據(jù)緩存.在此沒有使用本函數(shù),直接返回0.

        (6)DWORD get_fattime(void);

        獲取實時時鐘函數(shù).獲得的數(shù)據(jù)作為文件或文件夾的修改建立時間.硬件中沒有加入實時時鐘,直接返回一個常數(shù)即可,不影響使用.

        編寫完以上6個函數(shù),F(xiàn)atFs的移植就基本完成了.

        4 FatFs的配置和使用

        4.1 FatFs的配置

        從FatFs的R0.07e版開始,需要對FatFs配置的選項從ff.h分離出來,成為1個單獨的文件ffconf.h.

        ffconf.h中提供了豐富的配置選項,移植者可以根據(jù)硬件資源的多少和需要使用的功能進行配置,從而達到優(yōu)化設計的目的.ffconf.h主要的配置選項如下:

        (1)_FS_TINY.如果_FS_TINY配置為1,那么文件系統(tǒng)和物理介質(zhì)共用1個物理緩存,不再針對每個開啟的文件建立單獨的512字節(jié)的緩存,這樣可以節(jié)省大量的RAM空間,使FatFs更容易嵌入在資源較少的微控制器上.

        (2)_FS_READONLY.其值為1時可以將FatFs配置為只讀文件系統(tǒng),涉及寫功能的函數(shù)在編譯時將被忽略,減少占用的代碼空間.

        (3)_FS_MINIMIZE._FS_MINIMIZE用于裁減FatFs提供的API函數(shù),其值可以為0~3,0為最大模式,保留所有API函數(shù),3為最小模式.

        (4)_USE_STRFUNC.其值為0時表示不使用字符串功能,為1或2時表示使用.

        (5)_USE_MKFS.其值為1時使能f_mkfs函數(shù),即在存儲媒介上創(chuàng)建新文件系統(tǒng)的功能.

        (6)_USE_LFN.其值為1~3時使能長文件名支持,值為0時不使能.使能長文件名會增加1個幾十KB以上的轉(zhuǎn)換表,占用大量代碼空間,建議不使用.

        此外,還有其他一些配置選項在ffconf.h中都有詳細說明.靈活的配置選項增加了移植者的選擇,移植者可以根據(jù)具體的使用情況調(diào)整相關(guān)選項,在功能的多少和代碼的簡潔性之間找到平衡.

        4.2 FatFs的使用

        FatFs共提供了多達26個應用函數(shù),可以實現(xiàn)創(chuàng)建、刪除和讀取文件夾,創(chuàng)建、刪除和讀寫文件,移動文件指針以及改變文件內(nèi)容和大小等功能,表1列示了這些函數(shù)的名稱和功能.

        表1 FatFs提供的應用函數(shù)Table 1 Application function FatFs provided

        具體使用方法上,必須先用f_mount函數(shù)注冊1個工作區(qū),即開辟1個內(nèi)存空間.然后依次使用f_open,f_read/f_write和f_close即可完成基本的文件讀寫功能.下面的代碼是在SD卡上建立1個名為test.dat的文件,并向其寫入1段字符的示例:

        5 結(jié)語

        FatFs專為小型嵌入式系統(tǒng)設計,獨立于硬件平臺,只需要編寫幾個接口函數(shù)就可完成移植,并可以靈活配置.本研究以MSP430F5438微控制器為核心,以SD卡作為存儲媒介,移植了FatFs,實現(xiàn)了用單片機對文件/文件夾進行讀寫等功能.經(jīng)過測試,在16MHz的系統(tǒng)時鐘下,系統(tǒng)讀速率約為300KB/s,寫速率約為100KB/s,滿足了一般系統(tǒng)的應用需求.在一些不需要數(shù)據(jù)實時傳輸或數(shù)據(jù)量比較大的嵌入式系統(tǒng)中,嵌入FatFs文件系統(tǒng)并以SD卡作為存儲媒介存儲管理數(shù)據(jù)會非常方便靈活,同時有利于降低成本,具有較為廣闊的應用前景.

        [1] 洪岳煒,王百鳴,謝超英.一種易于移植和使用的文件系統(tǒng)FatFs Module[J].單 片 機 與 嵌 入 式 系 統(tǒng) 應 用,2008(5):29-31.

        [2] Cha N.FatFs generic FAT file system module[EB/OL].[2010-09-10].http://elm-chan.org/fsw/ff/ooindex_e.html.

        [3] Texas Instruments Corporation.MSP430×5xx1/MSP430x6xx family user'sguide[EB/OL].[2009-09-10].http://focus.ti.com.cn/cn/docs/prod/folders/print/msp430f5438.html.

        [4] SD Gruop.SD Memory Card Specification Part1:Physical Layer Specification v2.0[EB/OL].[2010-09-10].http://www.sdcard.org/developers/tech/sdcard/pls/simplified_ specs.

        [5] 周立功.ARM嵌入式系統(tǒng)實驗教程(二)[M].北京:北京航空航天大學出版社,2005:17-18.

        Implementation of embedded file system based on MSP430F5438and FatFs

        LUDunqiang,WUXiaorong
        (College of Physics and Electronic Information Science,Tianjin Normal University,Tianjin 300387,China)

        FatFs module which is free and open sourced is incorporated in TI MSP430F5438,and a FAT file system is implemented on SD card.The process of porting FatFs is introduced in detail and the necessary migration code is given.

        file system;FatFs;MSP430;SD card

        TP368.1;TP316

        A

        1671-1114(2011)02-0028-04

        2010-09-20

        路敦強(1986—),男,碩士研究生.

        吳曉榮(1956—),男,教授,主要從事電子技術(shù)和嵌入式系統(tǒng)方面的研究.

        (責任編校 紀翠榮)

        猜你喜歡
        嵌入式功能檢測
        也談詩的“功能”
        中華詩詞(2022年6期)2022-12-31 06:41:24
        “不等式”檢測題
        “一元一次不等式”檢測題
        “一元一次不等式組”檢測題
        搭建基于Qt的嵌入式開發(fā)平臺
        關(guān)于非首都功能疏解的幾點思考
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應用
        小波變換在PCB缺陷檢測中的應用
        Altera加入嵌入式視覺聯(lián)盟
        中西醫(yī)結(jié)合治療甲狀腺功能亢進癥31例
        国产顶级熟妇高潮xxxxx| 日本高清视频一区二区| 精品国产三级a在线观看不卡| 日韩精品专区av无码| 藏春阁福利视频| 亚洲国产成人无码电影| 日本一区二区三区四区在线视频| 午夜dy888国产精品影院| 欧美巨大xxxx做受中文字幕| 精品欧洲AV无码一区二区免费| 美利坚合众国亚洲视频| 久久人人爽av亚洲精品| 欧美黑人粗暴多交高潮水最多| 国内精品久久久久久久亚洲| 日韩激情视频一区在线观看| 国产成人av一区二区三区在线观看| 性高朝久久久久久久| 国产精品麻豆A啊在线观看| 久久精品国产亚洲av日韩一| 欧美老妇多毛xxxxx极瑞视频| 亚洲中文久久精品无码ww16| 亚洲精品天堂在线观看| 国产精品国产三级国产av18| 亚洲成av人片在线观看www| 91亚洲无码在线观看| 偷拍美女一区二区三区视频| 亚洲自偷精品视频自拍| 日产无人区一线二线三线新版| 无码精品国产午夜| 日韩av一区二区不卡| 粗大猛烈进出高潮视频| 一本一道波多野结衣av中文| 激情偷拍视频一区二区| 少妇高潮av久久久久久| 人妻aⅴ无码一区二区三区| 日本岛国大片不卡人妻| 亚洲三级视频一区二区三区| 日本免费一区二区三区| 国产精品情侣露脸av在线播放 | 国产美腿丝袜一区二区| 免费无码中文字幕a级毛片|