999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

FAT 32文件系統在Cortex-M3音樂播放器中的應用

2013-08-14 08:03:06
單片機與嵌入式系統應用 2013年6期
關鍵詞:音樂結構

何 諧

(江陰職業技術學院,江陰214400)

何諧(講師),研究方向為單片機與嵌入式應用。

引 言

FAT類文件系統是Windows操作系統在磁盤文件管理上最常用的一種文件系統。而FAT32文件系統是微軟FAT類文件系統中的最高版本,微軟從Windows95版本開始,后續的操作系統均支持FAT32文件系統,是現今Windows下最常用的硬盤文件系統。當人們使用SD卡等存儲裝置從計算機上拷取文件時,存儲器中的文件管理即符合FAT32文件系統的管理原則,因此,使用嵌入式芯片設計音樂播放器時,為了能自動識別SD卡上的音樂文件,關鍵是FAT32文件系統在嵌入式芯片上的實現,本文研究了FAT32文件系統在Cortex-M3內核的音樂播放器上的應用,并設計了基于FAT32的音樂播放器。

1 系統硬件設計

Cortex-M3內核是ARM公司推出的基于ARMv7體系架構的處理器核,具有高性能、低成本、低功耗的特點,而意法半導體公司的STM32系列芯片STM32F103RB則是在Cortex-M3內核的基礎上擴展了高性能的外圍設備。該芯片工作頻率為72MHz,內置高速存儲器(128KB的閃存和20KB的SRAM)。由于其豐富的外設和優異的性價比,音樂播放器選擇其作為主控制器芯片,利用其自帶的2組SPI接口讀取SD卡音頻文件以及緩存,并將讀取的音頻數據流送至音頻解碼器VS1003進行解碼;同時主控制器還負責人機交互,連接TFT屏幕顯示歌曲名稱以及鍵盤用以選擇曲目。

本音樂播放器選擇SD卡作為存儲裝置。SD卡使用前應通過讀卡器連接至計算機,格式化為FAT32文件格式,同時將*.mp3、*.wav、*.wma格式的音樂文件復制到SD卡中。一般來說,SD卡支持兩種工作模式:SD模式和SPI模式。由于STM32F103RB本身具有2個SPI接口,因此SD卡以SPI模式連接STM32F103RB的SPI1口。

VS1003是荷蘭VLSI公司出品的一款單芯片MP3/WMA/MIDI/WAV音頻解碼和ADPCM編碼芯片,通過SPI控制。該系統中,VS1003作為主控芯片的從機使用,STM32F103RB通過它的SPI2口向VS1003不斷輸出音頻數據流,VS1003自動解碼,并連接外部功放和喇叭,就可以聽到所播放的音樂了。

STM32F103RB與SD卡和VS1003的連接圖如圖1所示。

圖1 STM32F103RB與SD卡和VS1003的連接圖

2 FAT32文件系統基本原理

FAT類文件系統對文件的存儲空間是按簇進行劃分和管理的,即一個文件總是占用若干個整簇,即文件最后一簇剩余的空間將不再使用。不同的簇采用簇號來區分,FAT32文件系統使用32位二進制來表示簇號,適用于空間大于512MB的磁盤。每簇對應的扇區數將決定磁盤的容量,扇區是僅小于簇的存儲單位,一般每扇區大小為512字節。為了提高對整個磁盤空間的利用率,“簇”不宜大,也不宜小。對于小容量的磁盤,FAT32系統實際每個簇為4KB,也就是8個扇區;當磁盤容量超過8GB時,每個簇為8KB,32GB以上每簇為32KB。

當SD卡被格式化為FAT32文件格式時,SD卡中的邏輯盤空間就被劃分為三大部分:保留區、FAT表區(文件分配表區)、DATA區。其中保留區和FAT表區又合稱為系統區,文件的真正存儲從DATA區開始。

2.1 保留區

保留區包含了FAT32的重要數據結構——MBR(主引導記錄)和DBR(系統引導扇區)。MBR如果存在,則絕對0扇區就是MBR;如不存在,此扇區就是DBR。MBR的前面446字節為引導程序,隨后的64字節是4條記錄,稱為DPT(磁盤分區表),每條記錄均包含了分區的開始磁頭、開始柱面與分區類型、分區的結束頭、結束柱面與扇區、分區的第一個扇區、總扇區數等信息。由于SD卡容量不是很大,通常不作分區,后面三條分區記錄均為0。

通過DPT可以找到DBR扇區,在DBR中記錄了分區的很多重要的信息,這些重要信息都保存在BPB(BIOS參數塊)這個區域。這些重要信息包含了FAT32的大部分全局參數,例如:每扇區的字節數、每簇扇區數、保留扇區數、FAT表數、FAT區前隱扇區數、FAT表所占扇區數、第一個目錄的簇號等。

2.2 FAT表區

DBR扇區之后是保留扇區,再接著便是FAT表區了,FAT32中有兩個FAT表,第二個是第一個的備份,通過對BPB的解析可知FAT表的開始扇區和大小。FAT表是一個鏈式結構,每4個字節(一個32位二進制)為一個FAT表項,每個FAT表項對應一個簇,00簇和01簇被系統保留,因此前2個FAT表項為特殊字符。從02簇開始,每個簇都依次對應一個FAT表項內容。如果該簇未使用或已回收,相應FAT表項內容寫零,壞簇以0FFFFFF7H標識;如果該簇是文件的最后一簇,FAT表項值為0FFFFFFFH;如果該簇不是文件的最后一簇,FAT表項值為該文件占用的下一個簇的簇號,文件占用的各簇構成一個簇鏈,保存在FAT表中。因此,只要知道文件的起始簇號,就可以根據該鏈式結構找到整個文件。當新建文件時,如果新建的文件只占用一個簇,為其分配的簇對應的FAT表項將會寫入結束標記,如不只占用一個簇,則在FAT表項中記錄下一簇簇號直至結束;當刪除文件時,文件所對應的FAT表項將被設置為0,以表示其對應的簇處于未分配狀態。

2.3 DATA區

DATA區從02簇開始,該區根據存放的內容,可分為根目錄區和文件數據區。根目錄區存放根目錄文件,通過BPB解析可知02簇的開始扇區,該扇區也稱根目錄簇開始扇區。從這個扇區開始依次存放文件目錄項,每個文件目錄項占用32字節,根目錄文件的大小隨文件目錄項個數增加而增加。除了第一個32字節為文件卷標,其后的每個文件目錄項均描述了和文件相關的大部分信息,如文件名、文件創建時間、訪問時間、文件大小、文件起始簇號等等。解析出這些文件信息,特別是文件起始簇號,嵌入式芯片就可以根據FAT表訪問任意文件內容了。根目錄項中的內容也可以是子目錄文件的信息用同樣方法也可以找出子目錄下的所有文件的信息。

3 FAT32文件系統的實現

FAT32在Cortex-M3內核的嵌入式芯片上的實現依賴于一些必要的結構體,這些結構體包括了FAT32文件系統的重要區域信息,通過對這些結構體的解析,可以方便計算出目標文件的重要信息。因此,FAT32文件系統首先定義這些結構體,包括MBR結構體struct PartSector、DPT結構體struct PartRecord、BPB結構體struct FAT32_BPB、文件目錄項結構體struct direntry和文件信息結構體struct FileInfo。

3.1 FAT32與SD卡的接口

FAT32文件系統本身就是用來管理和控制對扇區數據的讀和寫,因此,需要構建一個FAT32_ReadSector()函數,用來讀取存儲設備的扇區,與FAT32_WriteSector()一起構成其他FAT32函數的底層函數。由于系統的存儲設備是SD卡,SD卡函數SD_ReadDisk()可從指定物理扇區號讀取1個扇區的數據,放入全局變量數據緩沖區FAT32_Buffer[512]中,因此,使用SD_ReadDisk()來作為這個底層函數。

3.2 初始化FAT32文件系統

初始化FAT32文件系統包括以下幾個函數。

尋找 DBR函數 FAT32_Find_DBR():此函數用FAT32_ReadSector()讀入SD卡0扇區數據,強制類型轉換為MBR結構體struct PartSector,解析出其中的DPT結構體struct PartRecord,返回DBR所在扇區號。

FAT32_Init()函數:將DBR扇區數據讀入緩沖區,強制類型轉化為BPB結構體,解析struct FAT32_BPB,計算出FAT32的重要信息:每扇區字節數、每簇扇區數、第一個FAT表扇區號、FAT表占用的扇區數、根目錄簇號、根目錄簇開始扇區、根目錄占用扇區、第一個數據扇區,作為全局變量參數。

ClustToSector()函數:輸入參數是任意簇號,返回該簇所對應的起始扇區號。

GetNextCluster()函數:根據文件當前簇號,在FAT表中找到文件下一簇號返回,如沒有后繼簇,則返回0x0ffffff8,表示文件結束。

3.3 打開文件后獲取文件信息

Get_File_Info():該函數輸入參數為根目錄簇號dir_clust、全局參數文件信息結構體struct FileInfo、音樂文件類型、音樂文件序號count。該函數首先根據根目錄簇號找到該簇起始扇區號,連續讀取扇區,直到FAT表中簇鏈結束。對讀取的每個扇區數據以32字節為單位強制轉換為文件目錄項結構體struct direntry,對每個合法的文件目錄項結構體struct direntry進行解析。若音樂文件類型符合輸入參數,文件索引號自增1;若該文件索引號即為音樂文件序號時,表示找到目標音樂文件。將該目標文件的struct direntry的32字節內容轉化到全局變量文件信息結構體struct FileInfo,提取文件信息詳情。struct FileInfo結構體如下:

4 音樂播放器系統軟件設計

音樂播放器可循環播放SD卡上的音樂格式文件,只要文件格式為*.mp3、*.wav、*.wma,就可順序播放,TFT屏幕顯示正在播放的音樂文件名稱,通過對按鍵的操作可實現歌曲的暫停/播放、選擇上一首和下一首。該音樂播放器軟件系統設計除FAT32文件系統FAT32.c之外,還包括以下幾大模塊:歌曲播放模塊music_play.c為軟件的最高層應用層;SD卡模塊sd.c、VS1003模塊vs1003.c為music_play.c提供設備驅動;而SPI模塊spi.c為最底層的物理數據交換程序,為sd.c和vs1003.c提供支持。軟件系統結構如圖2所示。

圖2 軟件系統結構

應用層程序music_play.c在初始化之后首先計算出根目錄下音樂格式歌曲的數目,隨后判斷按鍵狀態,當選擇前一首、后一首或一首歌播放完畢時,改變播放歌曲的索引號,播放該索引號的歌曲。

播放某歌曲時,首先利用FAT32函數Get_File_Info(),根據歌曲索引號和文件類型來構造該文件的文件信息結構體struct FileInfo,并獲取這首歌的文件起始簇號、歌曲名稱等信息。根據文件開始簇號,調用FAT32函數FAT32_ReadSector()讀取1扇區數據,存入STM32F103RB的512字節的數據緩沖區,緩沖區數據隨后通過SPI函數SPI2_ReadWriteByte()發送給 VS1003播放。當該簇所有扇區播放完畢后,一簇結束,利用FAT32函數GetNextCluster()在FAT表中繼續尋找下一簇簇號,循環上述過程,直到簇鏈結束,歌曲也播放完畢。

歌曲播放主流程如圖3所示。

系統讀取SD卡時使用STM32F103RB的SPI1口,設置為高速模式;發送數據到VS1003時使用SPI2口,設置為低速模式。這樣在歌曲的播放過程中,數據的讀取速度永遠超過數據的發送速度,可以得到比較好的音質,不會出現聲音的抖動。

結 語

本文結合FAT32文件系統提出嵌入式系統的音樂播放器設計方案,研究了FAT32文件系統在Cortex-M3內核的音樂播放器中的實現方法,對便攜式多媒體播放器的研發具有一定的指導意義。

圖3 歌曲播放流程圖

[1]何立民.單片機高級教程[M].北京:北京航空航天大學出版社,2007.

[2]戴士劍,涂彥輝.數據恢復技術[M].2版.北京:電子工業出版社,2007.

[3]劉偉.數據恢復技術深度揭秘[M].北京:電子工業出版社,2010.

[4]唐繼賢.51單片機應用系統開發實例精解[M].上海:科學技術出版社,2012.

[5]劉軍.例說STM32[M].北京:北京航空航天大學出版社,2011.

猜你喜歡
音樂結構
《形而上學》△卷的結構和位置
哲學評論(2021年2期)2021-08-22 01:53:34
奇妙的“自然音樂”
論結構
中華詩詞(2019年7期)2019-11-25 01:43:04
新型平衡塊結構的應用
模具制造(2019年3期)2019-06-06 02:10:54
音樂從哪里來?
藝術啟蒙(2018年7期)2018-08-23 09:14:16
圣誕音樂路
兒童繪本(2017年24期)2018-01-07 15:51:37
論《日出》的結構
音樂
創新治理結構促進中小企業持續成長
現代企業(2015年9期)2015-02-28 18:56:50
基于BIM的結構出圖
主站蜘蛛池模板: 亚洲黄色高清| 91久久国产综合精品| 亚洲精品无码久久毛片波多野吉| 精品久久久久久中文字幕女| 国产激爽爽爽大片在线观看| hezyo加勒比一区二区三区| 国产真实乱了在线播放| 久热99这里只有精品视频6| 国产无码高清视频不卡| 日本日韩欧美| 免费人成黄页在线观看国产| 精品福利视频网| 国产素人在线| 欧美一级黄片一区2区| 青青极品在线| 国产精彩视频在线观看| 久久国语对白| 中文字幕永久在线观看| 大香伊人久久| 精品一区二区久久久久网站| 99国产精品国产| 婷婷六月综合| 毛片在线播放网址| 国产一区二区精品福利| 日韩欧美国产中文| 亚洲精品无码不卡在线播放| 最新加勒比隔壁人妻| 啦啦啦网站在线观看a毛片| 久久黄色毛片| 不卡视频国产| 国内精品小视频在线| 欧美亚洲中文精品三区| 亚洲AV无码不卡无码| 乱码国产乱码精品精在线播放| 日本免费一区视频| 欧美国产日韩另类| 国产 日韩 欧美 第二页| 欧美色图久久| 久久精品亚洲专区| 亚洲va欧美va国产综合下载| 呦女精品网站| 国产99视频精品免费视频7 | a在线亚洲男人的天堂试看| 国产福利2021最新在线观看| 一本色道久久88亚洲综合| 91麻豆国产视频| 久久6免费视频| 在线免费看片a| 久久国产精品娇妻素人| 亚洲欧美一区二区三区蜜芽| 国产网友愉拍精品| 久久国产精品波多野结衣| A级毛片无码久久精品免费| 午夜欧美理论2019理论| 大香伊人久久| 精品无码国产一区二区三区AV| 再看日本中文字幕在线观看| 99久久免费精品特色大片| 亚洲色图狠狠干| 精品无码国产自产野外拍在线| 四虎成人精品| 亚洲一道AV无码午夜福利| 91在线一9|永久视频在线| 国产精品爽爽va在线无码观看 | 一本大道香蕉久中文在线播放| 亚洲大学生视频在线播放| 国产日韩欧美精品区性色| 国产国语一级毛片在线视频| WWW丫丫国产成人精品| 国产精品30p| 亚洲午夜天堂| 久青草网站| 丰满的熟女一区二区三区l| av在线无码浏览| 人妻无码中文字幕第一区| 久久精品波多野结衣| 成年女人a毛片免费视频| 亚洲人成网站18禁动漫无码| 伊人久久精品亚洲午夜| 国产美女免费网站| 扒开粉嫩的小缝隙喷白浆视频| 91日本在线观看亚洲精品|