何諧+唐大權+張淑廷+陳雪
摘 要: 主要介紹一種基于51單片機的音樂播放器的硬件設計方法,并研究在FAT32文件系統下音樂播放器的程序設計。該音樂播放器采用STC12C5A60S2單片機為主控制器,SD卡作為音樂文件的存儲介質,VS1003芯片作為解碼器。STC12C5A60S2單片機從 SD卡中讀取音樂文件,并不斷將數據流傳送至VS1003解碼,最后連接耳機播放,同時STC12C5A60S2連接OLED液晶顯示屏實時顯示音樂播放信息。實驗表明,該音樂播放器連接耳機能流暢播放多種格式的音樂文件。
關鍵詞: STC12C5A60S2; 音樂播放器; FAT32文件系統; 程序設計
中圖分類號: TN912.2?34 文獻標識碼: A 文章編號: 1004?373X(2014)16?0011?03
Design of music player based on MCU STC12C5A60S2
HE Xie, TANG Da?quan, ZHANG Shu?ting, CHEN Xue
(Jiangyin Polytechnic College, Jiangyin, 214400, China)
Abstract: The hardware design method of the music player based on MCU STC12C5A60S2 is introduced in this paper. The program design of the music player based on principle of FAT32 file system is studied. In the music player, MCU STC12C5A60S2 is taken as a main controller, SD card as a memory medium of music files and VS1003 chip as a decoder unit. When the player is running, MCU STC12C5A60S2 reads the music file from the SD card and continuously transfers data flow to VS1003 for decoding. In the meantime, the OLED liquid crystal display shows the message of the music in real time. The tested results from experiments show the music player can play the music files in multiple formats fluently if the player is connected with ear phone.
Keywords: STC12C5A60S2; music player; FAT32 file system; program design
隨著電子科技的進步,在生活中人們越來越多的使用便攜音樂播放器來欣賞音樂,這樣的音樂播放器以MP3播放器為主流,小巧便攜,但音質不佳,容量有限,且不能兼容播放多種格式音樂文件[1]。本文采用STC 公司的微控制器STC12C5A60S2,結合解碼芯片VS1003進行音樂文件的解碼、SD卡作為音樂文件的存儲介質設計了一種可支持多種音樂格式的音樂播放器。為了使微控制器STC12C5A60S2能自動識別SD卡上的音樂文件,本文還研究了FAT32文件系統在基于51單片機的音樂播放器中的應用。
1 系統硬件電路設計
1.1 單片機 STC12C5A60S2
STC12C5A60S2是宏晶公司的高速 1T單片機,具有一個時鐘/機器周期,增強型8051內核,處理速度比傳統8051快8~12倍,該單片機時鐘從5~35 MHz可選,相當于普通8051的60~420 MHz,運行速度完全可以滿足各種音樂格式的解碼需要[2]。
STC12C5A60S2內置60 KB FLASH存儲器和1 280 B大容量SRAM,滿足大型程序的設計要求。本文所設計的音樂播放器選擇其作為主控制器芯片,利用其2組I/O口模仿SPI接口,一組不斷讀取SD卡音頻文件送入緩存區,另一組則將讀取的音頻數據流送至音頻解碼器VS1003進行解碼,同時主控制器還負責人機交互,連接OLED顯示屏幕顯示歌曲信息,控制鍵盤用以選擇曲目。系統硬件結構如圖1所示。
1.2 SD卡
SD卡存儲器是一種大容量、小尺寸便攜記憶卡,目前被廣泛應用于數碼相機、PAD等設備,本音樂播放器選擇SD卡作為存儲裝置[3]。SD卡使用前應通過讀卡器連接至計算機,格式化為FAT32文件格式,同時將*.MP3,*.WAV,*.WMA格式的音樂文件復制到SD卡中。音樂播放器設計帶SD卡座,SD存儲卡的數據傳輸接口有SD和SPI兩種工作模式, SD模式是SD存儲卡的標準傳輸模式,需要6根信號線,SPI接口只需要4根信號線,是一種串行的數據傳輸方式,由于控制器接口數量的限制,這里采用SPI接口模式,將STC12C5A60S2單片機的4個I/O模擬成SPI總線與SD卡連接。
圖1 系統硬件結構
SPI總線的MIS0,即主設備數據輸入,從設備數據輸出;SPI總線的MOSI,即主設備數據輸出,從設備數據輸入;SPI總線的時鐘信號SCK由主設備產生;CS為從設備片選信號,由主設備控制。在4線SPI模式下數據長度為8位,在SCK的上升沿將數據寫入,且高位在前[3]。
1.3 VS1003音頻解碼器
VS1003是荷蘭VLSI公司出品一款單芯片MP3/WMA/MIDI/WAV音頻解碼和ADPCM編碼芯片,擁有一個高新能DSP處理器核,5 KB的指令RAM,0.5 KB的數據RAM,通過SPI控制,芯片內部帶有一個可變采樣率ADC,一個18位立體聲DAC和耳機放大器[4]。VS1003作為主控芯片的從機使用,STC12C5A60S2通過它的一組模擬SPI接口的I/O向VS1003不斷輸出音頻數據流,VS1003自動解碼,并連接外部功放和喇叭,就可以聽到所播放的音樂。
VS1003與單片機STC12C5A60S2的連接需要7個I/O口,XRST為VS1003的復位信號,當DREQ引腳向主機發出請求數據信號時,主機才可以向VS1003發送數據,XDCS和XCS分別為傳輸數據、命令時所對應的片選信號,低有效,VS_MISO、VS_MOSI、VS_SCK為模擬的SPI接口[5]。單片機與VS1003以及SD卡的連接原理圖如圖2所示。
1.4 鍵盤與顯示
另外單片機STC12C5A60S2的P3.0,P3.1和P3.2口還連接三個獨立式按鍵,實現“播放/暫停、上一曲、下一曲的命令。當前播放信息由128×64的OLED顯示屏來進行顯示,主要顯示當前播放歌曲名稱、播放進度等信息。OLED顯示屏為自發光的二極管點陣,尺寸小,分辨率高,最大可顯示4行英文[6]。該OLED顯示屏的控制器為SSD1306,SSD1306可提供多種接口方式,這里采用8080并口方式與STC12C5A60S2單片機相連,共占用13個I/O口,其具體連接如圖3所示。
圖2 單片機與VS1003以及SD卡的連接
圖3 OLED液晶顯示屏與單片機的連接
OLED_CS是OLED的片選信號,OLED_RST為硬復位OLED,OLED_DC為命令/數據標志(0:命令;1:數據),OLED_WR為向OLED寫入數據,OLED_RD為從OLED讀取數據, OLED_D0~OLED_D7為8位雙向數據線。當需要寫入數據至OLED模塊時,先根據寫入的數據是數據還是命令,設置OLED_DC,然后OLED_CS置為低,選中OLED,由于是寫入操作,因此接著將OLED_WR置為低,隨后在OLED_WR的上升沿,將OLED_D0~OLED_D7的8位數據寫入到了OLED中去。由于VS1003芯片和OLED液晶屏的供電均為3.3 V,而STC12C5A60S2的工作電壓為5 V,因此還加入圖4所示的電源轉換電路,將5 V電壓轉換為3.3 V。
圖4 電源轉換電路
2 文件系統
當SD卡被格式化為FAT32文件格式時,SD卡中的文件是按簇進行劃分存儲的,為讀出文件,必須找到存放文件的所有簇,不同的簇具有不同的簇號,一般每個簇大小為4 KB,也就是8個扇區,一個扇區的大小則為512 B。FAT32文件系統還將SD卡的邏輯盤空間劃分為三大部分:保留區、FAT表區(文件分配表區)和DATA區[7]。
保留區中記錄著FAT32的大部分全局參數,包括每扇區的字節數、每簇扇區數、保留扇區數、FAT表數、FAT區前隱扇區數、FAT表所占扇區數、第一個目錄的簇號等。FAT表區主要是FAT表,它是一個鏈式結構,每4 B為一個FAT表項,從02簇開始,每個簇都依次對應一個FAT表項內容。如該簇未使用或已回收,相應FAT表項內容寫零,如果該簇是文件的最后一簇,FAT表項值為 0FFFFFFFH,,如果該簇不是文件的最后一簇,FAT表項值為該文件占用的下一個簇的簇號,文件占用的各簇構成一個簇鏈,保存在FAT表中。因此,只要知道文件的起始簇號,就可以根據該鏈式結構找到整個文件。DATA區從02簇開始,可分為根目錄區和文件數據區,根目錄區存放根目錄文件,每個文件目錄項占用32字節,每個文件目錄項均描述了和文件相關的大部分信息,如文件名、文件創建時間、訪問時間、文件大小、文件起始簇號等[8]。解析出這些文件信息,特別是文件起始簇號,這樣單片機就可以根據FAT表訪問任意文件內容。
3 系統軟件設計
設計該音樂播放器軟件系統應設計解決以下幾大程序模塊:FAT32文件系統有關驅動程序,SD卡模塊驅動程序,VS1003模塊驅動程序,OLED驅動程序以及主程序模塊。
FAT32文件系統有關驅動程序主要是為了尋找到SD卡中的音樂文件及其相關信息,為此,必須定義和應用一些必要的結構體,包括 MBR(主引導記錄)結構體struct PartSector,DPT(磁盤分區表)結構體struct PartRecord ,BPB(BIOS參數塊)結構體struct FAT32_BPB,文件目錄項結構體struct direntry和文件信息結構體struct FileInfo。解析這些結構體的重要程序函數包括Get_File_Info()和尋找文件下一簇的程序GetNextCluster()等。
SD卡的驅動函數主要有:SD卡的初始化函數SD_Initialize(),給定扇區號讀扇區數據的函數SD_ReadDisk(),以及讀取SD卡CID信息和CSD信息的函數等。這些SD函數的底層均使用單片機I/O口模擬SPI來實現。
VS1003相關函數有VS1003的初始化函數VS_Init(),正弦波測試函數VS_Sine_Test(),VS1003軟硬復位函數,調節音量、音調效果的函數set1003()。開啟VS1003播放音樂文件前必須進行初始化和正弦波測試,然后為VS1003設置音量、音調,在發生錯誤或兩首歌曲播放間隙進行VS1003的軟硬件復位,同樣,VS1003相關函數的底層也均使用單片機I/O口模擬SPI來實現。
主程序在初始化之后首先計算出根目錄下音樂格式歌曲的總數目,隨后判斷按鍵狀態,播放所選擇的歌曲。播放一首歌曲的程序流程圖如圖5所示:播放時,先利用FAT32函數Get_File_Info()解析文件信息結構體FileInfoStruct,找到這首歌曲文件的起始簇號、歌曲名稱等信息。根據歌曲起始簇號調用SD函數SD_ReadDisk()按扇區讀取數據512 B,分兩次存入STM32F103RB中256 B大小的數據緩沖區,緩沖區數據隨后立即發送給VS1003,控制器同時在OLED屏幕上實時顯示當前歌曲的序號,歌曲名稱等信息。當該簇所有扇區播放完畢,再利用FAT32函數GetNextCluster()在FAT表中繼續尋找下一簇簇號,直到簇鏈結束,一首歌曲也就播放完畢[8]。
圖5 播放歌曲程序流程圖
4 結 語
本文提出一種基于STC12C5A60S2單片機和VS1003解碼芯片的音樂播放器的硬件設計方法,并研究了在FAT32文件系統下音樂播放器的程序設計。經過調試,該音樂播放器連接耳機能流暢播放出SD卡中的多種格式的音樂文件,MP3格式、WMA格式以及MIDI格式的文件均可播放,同時歌曲名稱、播放進度等均可正確顯示至OLED屏幕。對于高采樣率的MP3文件,由于單片機本身時鐘頻率的限制,播放有卡頓現象,這可利用采樣率轉換軟件將采樣率降低至64 kb/s即可正常播放。
參考文獻
[1] 何立民.單片機高級教程[M].北京:北京航空航天大學出版社,2007.
[2] 劉軍.例說STM32[M].北京:北京航空航天大學出版社,2011.
[3] 張天益.MP3播放器的設計[J].今日電子,2006(12):7?8.
[4] 唐繼賢.51單片機應用系統開發實例精解[M].上海:科學技術出版社,2012.
[5] 李軍.便攜式MP3播放器的方案分析及其技術研究[J].電聲技術,2004(7):27?29.
[6] 李寧.基于Cortex?M3的MP3播放器設計[J].單片機與嵌入式系統應用,2009(2):48?50.
[7] 劉偉.數據恢復技術深度揭秘[M].北京:電子工業出版社,2010.
[8] 楊明極.嵌入式系統中SD卡的FAT32文件系統的設計[J].電聲技術,2010(4):36?38.
[9] 戴士劍,涂彥輝.數據恢復技術[M].2版.北京:電子工業出版社,2007.
主程序在初始化之后首先計算出根目錄下音樂格式歌曲的總數目,隨后判斷按鍵狀態,播放所選擇的歌曲。播放一首歌曲的程序流程圖如圖5所示:播放時,先利用FAT32函數Get_File_Info()解析文件信息結構體FileInfoStruct,找到這首歌曲文件的起始簇號、歌曲名稱等信息。根據歌曲起始簇號調用SD函數SD_ReadDisk()按扇區讀取數據512 B,分兩次存入STM32F103RB中256 B大小的數據緩沖區,緩沖區數據隨后立即發送給VS1003,控制器同時在OLED屏幕上實時顯示當前歌曲的序號,歌曲名稱等信息。當該簇所有扇區播放完畢,再利用FAT32函數GetNextCluster()在FAT表中繼續尋找下一簇簇號,直到簇鏈結束,一首歌曲也就播放完畢[8]。
圖5 播放歌曲程序流程圖
4 結 語
本文提出一種基于STC12C5A60S2單片機和VS1003解碼芯片的音樂播放器的硬件設計方法,并研究了在FAT32文件系統下音樂播放器的程序設計。經過調試,該音樂播放器連接耳機能流暢播放出SD卡中的多種格式的音樂文件,MP3格式、WMA格式以及MIDI格式的文件均可播放,同時歌曲名稱、播放進度等均可正確顯示至OLED屏幕。對于高采樣率的MP3文件,由于單片機本身時鐘頻率的限制,播放有卡頓現象,這可利用采樣率轉換軟件將采樣率降低至64 kb/s即可正常播放。
參考文獻
[1] 何立民.單片機高級教程[M].北京:北京航空航天大學出版社,2007.
[2] 劉軍.例說STM32[M].北京:北京航空航天大學出版社,2011.
[3] 張天益.MP3播放器的設計[J].今日電子,2006(12):7?8.
[4] 唐繼賢.51單片機應用系統開發實例精解[M].上海:科學技術出版社,2012.
[5] 李軍.便攜式MP3播放器的方案分析及其技術研究[J].電聲技術,2004(7):27?29.
[6] 李寧.基于Cortex?M3的MP3播放器設計[J].單片機與嵌入式系統應用,2009(2):48?50.
[7] 劉偉.數據恢復技術深度揭秘[M].北京:電子工業出版社,2010.
[8] 楊明極.嵌入式系統中SD卡的FAT32文件系統的設計[J].電聲技術,2010(4):36?38.
[9] 戴士劍,涂彥輝.數據恢復技術[M].2版.北京:電子工業出版社,2007.
主程序在初始化之后首先計算出根目錄下音樂格式歌曲的總數目,隨后判斷按鍵狀態,播放所選擇的歌曲。播放一首歌曲的程序流程圖如圖5所示:播放時,先利用FAT32函數Get_File_Info()解析文件信息結構體FileInfoStruct,找到這首歌曲文件的起始簇號、歌曲名稱等信息。根據歌曲起始簇號調用SD函數SD_ReadDisk()按扇區讀取數據512 B,分兩次存入STM32F103RB中256 B大小的數據緩沖區,緩沖區數據隨后立即發送給VS1003,控制器同時在OLED屏幕上實時顯示當前歌曲的序號,歌曲名稱等信息。當該簇所有扇區播放完畢,再利用FAT32函數GetNextCluster()在FAT表中繼續尋找下一簇簇號,直到簇鏈結束,一首歌曲也就播放完畢[8]。
圖5 播放歌曲程序流程圖
4 結 語
本文提出一種基于STC12C5A60S2單片機和VS1003解碼芯片的音樂播放器的硬件設計方法,并研究了在FAT32文件系統下音樂播放器的程序設計。經過調試,該音樂播放器連接耳機能流暢播放出SD卡中的多種格式的音樂文件,MP3格式、WMA格式以及MIDI格式的文件均可播放,同時歌曲名稱、播放進度等均可正確顯示至OLED屏幕。對于高采樣率的MP3文件,由于單片機本身時鐘頻率的限制,播放有卡頓現象,這可利用采樣率轉換軟件將采樣率降低至64 kb/s即可正常播放。
參考文獻
[1] 何立民.單片機高級教程[M].北京:北京航空航天大學出版社,2007.
[2] 劉軍.例說STM32[M].北京:北京航空航天大學出版社,2011.
[3] 張天益.MP3播放器的設計[J].今日電子,2006(12):7?8.
[4] 唐繼賢.51單片機應用系統開發實例精解[M].上海:科學技術出版社,2012.
[5] 李軍.便攜式MP3播放器的方案分析及其技術研究[J].電聲技術,2004(7):27?29.
[6] 李寧.基于Cortex?M3的MP3播放器設計[J].單片機與嵌入式系統應用,2009(2):48?50.
[7] 劉偉.數據恢復技術深度揭秘[M].北京:電子工業出版社,2010.
[8] 楊明極.嵌入式系統中SD卡的FAT32文件系統的設計[J].電聲技術,2010(4):36?38.
[9] 戴士劍,涂彥輝.數據恢復技術[M].2版.北京:電子工業出版社,2007.