徐陽(長江大學工程技術(shù)學院信息系,湖北 荊州 434023)
起初,MP3音樂文件只能由電腦來播放,隨著互聯(lián)網(wǎng)的發(fā)展,促進了MP3音樂播放器的產(chǎn)生。隨著人們對MP3產(chǎn)品需求層次的進一步提高,MP3音樂播放器發(fā)生了一系列變化,其更加小巧精致,更人機化和情趣化,個性區(qū)分也越來越強,應用場合也越來越廣,其不僅具有音頻播放功能,同時還具有嵌入式信息處理功能,通常被應用于汽車導航、移動電話、個人數(shù)字助理(Personal Digital Assistant,PDA)等。為此,筆者提出了一種基于AT89C51SND1C單片機的MP3音樂播放器設計方案?長江大學工程技術(shù)學院院級教學研究項目(JY201413)。。
MP3的全稱為“MPEG1Layer-3”音頻文件,即 MPEG音頻文件第3層。MPEG音頻文件是MPEG1標準中的聲音部分,根據(jù)壓縮質(zhì)量和編碼復雜程度劃分為3層,分別對應于MP1、MP2和MP3這3種聲音文件。音頻編碼層次越高,壓縮率也越高,MP1和MP2的壓縮率分別為4∶1和6∶1,而MP3的壓縮率則高達12∶1。1min CD音質(zhì)的音樂,未經(jīng)壓縮需要10MB左右的存儲空間,而經(jīng)過MP3編碼壓縮后只有1MB左右。不過MP3對音頻信號采用的是有損壓縮方式,為了降低聲音失真度,MP3采取了“感官編碼技術(shù)”,即編碼時先對音頻文件進行頻譜分析,然后通過濾波器濾掉噪音,接著通過量化方式將剩下的每一位數(shù)據(jù)打散排列,最后形成具有較高壓縮比的 MP3文件,并使壓縮后的文件在回放時能夠達到接近原音源的聲音效果[1]。
MP3音樂播放器硬件電路圖如圖1所示。整個系統(tǒng)由AT89C51SND1C(單片機)、K9F2808U0A(FLASH存儲器)、電源部分、音頻部分(LM4880)、D/A轉(zhuǎn)換部分(CS4330)、USB接口部分、鍵盤和顯示部分組成。MP3播放器通過USB接口把FLASH存儲器上的MP3或者WMA等格式的數(shù)字音樂文件送到單片機內(nèi)部集成的解碼單元進行解碼,這些音樂文件經(jīng)解碼后成為數(shù)字信號,然后DA轉(zhuǎn)換器CS4330通過D/A轉(zhuǎn)換將數(shù)字音頻信號轉(zhuǎn)化為模擬音頻信號,再通過功率放大器LM4880進行音頻放大,最后通過耳機輸出音樂。整個系統(tǒng)采用3V電源供電,系統(tǒng)電源可以取自USB接口,也可以來自干電池,所以系統(tǒng)電源由2部分組成:一部分通過降壓芯片AS1117提供從USB接口的5V到3V的DC-DC降壓轉(zhuǎn)換,另一部分通過升壓芯片MAX856提供從1.5V干電池到3V的DC-DC升壓轉(zhuǎn)換[2]。
AT89C51SND1C是Atmel公司專門針對MP3設計需求研發(fā)的一款多媒體8位微處理器,它具有C51內(nèi)核,其主要特點是其內(nèi)部嵌入一個MP3硬件解碼器,支持48、44.1、32、24、22.05、16kHz采樣頻率,并且具有左右聲道獨立的音量控制和重低音、中音、高音均衡控制功能。另外,AT89C51SND1C內(nèi)部有一個USB Rev1.1控制器,可以完成USB接口的數(shù)據(jù)通信。為了避免噪聲對音頻輸出信號的影響,在AT89C51SND1C的正負電源間需要加上一個RC濾波電路以消除電路中的噪聲,而且對于AVDD和UVDD的2個模擬電壓和數(shù)字電源而言,兩者需要在數(shù)字地和模擬地處單點通過一個磁珠相連,以免數(shù)字電源和模擬電源之間的影響[3]。
圖1 MP3音樂播放器硬件電路圖
電源電路部分包括升壓芯片MAX856和降壓芯片AS1117,由于AT89C51SND1C內(nèi)部CPU的工作電壓要求為3.3V,因此需要為MP3音樂播放器系統(tǒng)提供合適的工作電壓,當電路由1.5V工作電壓的5號電池供電時,通過升壓芯片MAX856可以為系統(tǒng)提供3.3V穩(wěn)定的電壓;當電路由USB供電時,插入USB電纜,電路獲得5V電壓,再通過降壓芯片AS1117后,可以將5V電壓降為3.3V供系統(tǒng)使用。
采用三星公司的Nand Flash K9F2080作為系統(tǒng)的數(shù)據(jù)存儲器,用來存儲系統(tǒng)所需播放的音樂文件。主芯片AT89C51SND1C和Flash存儲器間的通信與讀取一般的存儲器RAM、EEPROM等基本上是一致的,不同的是多了CLE和ALE這2個引腳,這是由Flash本身的特點所決定的。ALE和CLE的信號均為上升沿有效。WP引腳為寫保護,用來保護當電源由于切換等造成不穩(wěn)定的情況下丟失數(shù)據(jù)的情況。
音頻部分是整個系統(tǒng)中最為重要的一部分,在數(shù)字信號轉(zhuǎn)化為模擬信號的過程中,其容易產(chǎn)生噪聲,這關(guān)系到MP3播放器聲音效果的好壞,為此選擇CS4330芯片,該芯片能兼容48、44.1和32kHz的音頻流。聲音數(shù)據(jù)通過串行輸入引腳SDATA輸入。左右輸入時鐘LRCK決定了左右聲道,在串行輸入時鐘SCLK的驅(qū)動下數(shù)據(jù)被送入CS4330的數(shù)據(jù)緩存中,而主時鐘決定了數(shù)據(jù)濾波器的使用。
USB接口部分一般通過PC的USB接口進行MP3文件的下載,傳輸速率為12Mbps。由于Atmel公司生產(chǎn)的AT89C51SND1C芯片僅支持USB1.1技術(shù)規(guī)范,因而接口速度稍慢。但對于MP3播放來說,已能夠滿足需要。
人機接口部分主要提供一個人和系統(tǒng)進行信息交換的接口,包括鍵盤輸入、LED顯示2個部分。鍵盤輸入提供給用戶選擇功能的能力,包括向前、向后、播放、功能切換4種功能。LED顯示播放器現(xiàn)在的工作狀態(tài),其中指示燈1和指示燈2為供電指示燈,當5~3V供電正常時,指示燈1亮;當1.5~3V供電正常時,指示燈2亮。指示燈3為U盤指示燈,當執(zhí)行U盤功能時,無數(shù)據(jù)傳輸時燈亮,有數(shù)據(jù)傳輸時燈閃爍。指示燈4為MP3指示燈,當執(zhí)行MP3功能時燈亮、播放時該燈閃爍。
MP3音樂播放器的軟件設計按照模塊,可以劃分為以下幾個部分:①MP3解碼控制部分,該部分控制系統(tǒng)中間的MP3解碼器把從Flash中取出來的MP3壓縮數(shù)據(jù)流解碼成音頻數(shù)據(jù)流,提供給音頻解碼接口;②音頻處理部分,該部分主要實現(xiàn)對音頻驅(qū)動芯片進行配置以及控制,把解碼后的數(shù)字信號轉(zhuǎn)化為模擬聲音并且驅(qū)動耳機;③FLASH存儲與USB通信部分,該部分按照FAT文件格式對Flash芯片進行劃分,對芯片的操作必須按照FAT格式進行;USB通信包括如何按照Windows 7中對USB移動硬盤的描述編寫設備的固件程序,以便操作系統(tǒng)的運行;④人機接口部分,該部分由提供人機接口的鍵盤掃描驅(qū)動、LED顯示驅(qū)動和數(shù)碼管驅(qū)動等組成。
MCS-51內(nèi)核和MP3的解碼器接口是通過11個特殊功能寄存器來實現(xiàn)的,分別是MP3控制寄存器MP3CON、MP3解碼狀態(tài)寄存器MP3STA、MP3狀態(tài)寄存器MP3STA1、MP3數(shù)據(jù)寄存器MP3DAT、MP3附加數(shù)據(jù)寄存器MP3ANC、MP3左聲道控制寄存器MP3VOL、MP3右聲道控制寄存器MP3VOR、MP3重音控制寄存器MP3BAS、MP3中音控制寄存器MP3MED、MP3高音控制寄存器 MP3TRE、MP3時鐘寄存器MP3CLK。
對數(shù)據(jù)幀的處理過程可能產(chǎn)生層錯誤(layer error)、同步錯誤(sychronization error)和CRC錯誤(CRC error),每個錯誤將引起對應的中斷,硬件將根據(jù)中斷把相應寄存器中的數(shù)據(jù)位置位[4]。在 AT89C51SND1C中斷過后,根據(jù)中斷的不同,硬件將進入中斷并且將相應數(shù)據(jù)位置位,這些標志位可向MCS-51內(nèi)核申請中斷,也可供內(nèi)核查詢。MP3解碼控制程序流程圖如圖2所示。
圖2 MP3解碼控制程序流程圖
音頻部分是MP3音樂播放器的一個重要的組成部分,由于存在片上鎖相環(huán)結(jié)構(gòu),AT89C51SND1C支持PCM和I2S2種音頻結(jié)構(gòu),音頻數(shù)據(jù)流可以來自MP3解碼輸出,也可以來自MCU直接音頻輸出,整個音頻部分和MCS51內(nèi)核也通過5個寄存器來進行數(shù)據(jù)和控制信息的交流,這5個寄存器分別是音頻接口控制寄存器0(AUDCON0)、音頻接口控制寄存器1(AUDCON1)、音頻接口控制寄存器2(AUDSTA)、音頻接口數(shù)據(jù)寄存器(AUDDAT)、音頻時鐘分頻器(AUDCLK)。音頻處理程序流程圖如圖3所示。
圖3 音頻處理程序流程圖
在AT89C51SND1C單片機片內(nèi)集成了一個USB控制器,支持USB1.1全速引擎,通過它可以方便地從PC機下載音樂文件到FLASH存儲器中。FLASH存儲功能是靠FLASH EEPROM芯片K9F2808實現(xiàn)的。對K9F2808的讀操作流程圖如圖4所示。首先向K9F2808的命令端口寫1個字節(jié)的命令字00h,接著向K9F2808的地址端口寫入FLASH內(nèi)部地址。由于K9F2808的存儲容量是16MB,內(nèi)部地址為24字節(jié),因此要分3個字節(jié)寫入,寫入時第1個字節(jié)為A0-A7;第2個字節(jié)為A9-A16;第3個字節(jié)最高位為0,低7位為A17-A23。地址寫入后就可以從K9F2808的數(shù)據(jù)端口讀出Flash內(nèi)部地址為A23-A0的存儲單元對應的數(shù)據(jù)了。K9F2808的空閑區(qū)域可用來存放校驗信息,如果希望使用校驗信息來保證數(shù)據(jù)存放的可靠性,可以使用這一部分存儲區(qū)域。
人機接口也稱為輸入/輸出接口(I/O接口),是單片機和人機交互設備之間的交接界面,通過接口可以實現(xiàn)單片機與外設之間的信息交換。MP3音樂播放器中人機接口包括LED顯示、鍵盤輸入2個部分,LED主要用來指示MP3播放器當前的工作狀態(tài),包括電源供電、USB傳輸是否正常等部分;鍵盤輸入提供給用戶選擇功能的能力,當執(zhí)行MP3程序的時候,通過按鍵操作來控制MP3歌曲的播放,每個鍵對應一個鍵盤響應函數(shù),這些函數(shù)分別是Func(功能切換)、Next(向后)、Previous(向前)、PlayPause(播放/暫停)。人機接口程序流程圖如圖5所示。
圖4 K9F2808的讀操作流程圖
圖5 人機接口程序流程圖
為取得較好的音樂播放效果,采用基于AT89C51SND1C單片機設計MP3音樂播放器。由于寬帶音頻信號的取樣率也較高(一般為44.1kHz以上),所以MP3編解碼的運算量和數(shù)據(jù)量都相當龐大。設計的MP3音樂播放器系統(tǒng)既具有播放歌曲的功能又具有U盤功能,2種功能的轉(zhuǎn)換用USB接口檢測電路來控制。當MP3播放器上的USB設備插入PC機上的USB接口進行文件下載時執(zhí)行U盤功能,否則程序運行執(zhí)行MP3功能。此外,MPEG LayerⅢ解碼算法在AT89C51SND1C上驗證通過并獲得較好的效果,通過優(yōu)化后可流暢播放音樂。
[1]徐愛鈞.單片機原理實用教程——基于Proteus虛擬仿真[M].北京:電子工業(yè)出版社,2011.
[2]博創(chuàng)科技.MP3播放器與U盤設計[M].北京:清華大學出版社,2004.
[3]熊開勝,董兆鑫.基于DSP技術(shù)的MP3播放器的硬件設計[J].現(xiàn)代電子技術(shù),2007,30(12):164~166.
[4]黃勇堅,王亞麗.智能MP3播放控制系統(tǒng)的設計[J].電子技術(shù),2006(10):36~38.