吳小鋒,張西寧,馬 博
(1.西安郵電大學(xué)人事處,陜西西安710121;2.陜西廣電網(wǎng)絡(luò)傳媒(集團(tuán))股份有限公司技術(shù)部,陜西西安
710061;3.西安郵電大學(xué)計(jì)算機(jī)學(xué)院,陜西西安710121)
隨著編碼與解碼,以及壓縮技術(shù)的進(jìn)步,語(yǔ)音文件一直朝著高壓縮比、高保真的方向發(fā)展。在目前普遍應(yīng)用的音頻壓縮標(biāo)準(zhǔn)中,MP3具有算法復(fù)雜、壓縮比大、效果好等優(yōu)點(diǎn),其音質(zhì)在低碼率的條件下能夠接近CD的效果。在市場(chǎng)消費(fèi)刺激下,各大公司紛紛推出了自己的MP3播放器產(chǎn)品。為了進(jìn)一步改善市場(chǎng)上MP3播放器存儲(chǔ)容量小、價(jià)格昂貴、播放歌曲單一的不足,文中基于STM32F103VET6微控制器,結(jié)合芬蘭VLSI Solution公司生產(chǎn)的音頻編解碼芯片VS1003,設(shè)計(jì)實(shí)現(xiàn)了一種個(gè)性化的MP3播放器。
MP3幀結(jié)構(gòu)如圖1所示,主要包含以下幾個(gè)字段,即幀頭、CRC校驗(yàn)、邊信息、主數(shù)據(jù)和附加數(shù)據(jù)等[1]。在每一個(gè)幀中都有一個(gè)幀頭,長(zhǎng)度為4個(gè)字節(jié),幀頭最前面的12比特總是被設(shè)置為1,被稱作為“幀同步字”。如果幀頭的校驗(yàn)位為0,則幀頭后面有長(zhǎng)度為2個(gè)字節(jié)的CRC校驗(yàn)值,把這個(gè)值和通過(guò)計(jì)算得出的CRC值進(jìn)行比較就可以得知該幀是否有效。對(duì)邊信息進(jìn)行解碼能夠找出主數(shù)據(jù)從哪里開(kāi)始以及尺度因子長(zhǎng)度等參數(shù)信息。
圖1 MP3幀結(jié)構(gòu)
根據(jù)解碼方式不同,解碼MP3文件可以采用軟件解碼和硬件解碼兩種方式[2]。
軟件解碼過(guò)程是通過(guò)解碼程序來(lái)實(shí)現(xiàn),這一程序依據(jù)解碼算法編寫,CPU執(zhí)行解碼程序后,就可以將音頻信號(hào)從MP3音頻文件中解析出來(lái)。該方案只需要開(kāi)發(fā)者提供基本的硬件條件,對(duì)硬件要求不高。經(jīng)過(guò)解碼得到的MP3數(shù)據(jù)通過(guò)主控板的數(shù)模轉(zhuǎn)換功能就可以生成音頻信號(hào),輸入功放后即可播放聲音。然而,如果有大量的MP3文件需要解碼,就需要占用大量的CPU時(shí)鐘,因此該方案對(duì)CPU性能要求相對(duì)高些。
硬件解碼過(guò)程就是將解碼算法過(guò)程硬件化。解碼模塊集成專用的解碼芯片,自動(dòng)對(duì)MP3文件的音頻信號(hào)進(jìn)行解析,獲取解碼頻率和解碼時(shí)間。這一方案的顯著優(yōu)點(diǎn)是解碼速度快,同時(shí)不需要占用CPU對(duì)音頻文件進(jìn)行處理,只需要把MP3數(shù)據(jù)流送入解碼模塊中,芯片就會(huì)自動(dòng)解碼。
由以上分析可以看出,通過(guò)硬件解碼方式能夠得到音質(zhì)較好的音頻信號(hào)[3],而軟件解碼中由于CPU性能和解碼算法中數(shù)據(jù)處理的優(yōu)化操作,導(dǎo)致其音頻信號(hào)會(huì)有損耗。文中采用硬件解碼MP3文件方式,使用具有SPI接口的專用MP3解碼芯片,同時(shí)保證了文件數(shù)據(jù)傳輸?shù)乃俣取?/p>
設(shè)計(jì)實(shí)現(xiàn)的MP3播放器具備以下功能:
1)支持對(duì)SD卡的訪問(wèn),能夠播放SD卡中的MP3文件;
2)在播放音頻文件時(shí),同步顯示MP3文件的歌曲名、播放時(shí)間以及聲音幅度的大小變化;
3)播放過(guò)程中,能夠?qū)Σシ盼募M(jìn)行上一曲、下一曲、循環(huán)等操作,以及對(duì)音效進(jìn)行改變;
4)可以顯示SD卡中的文件夾和文件,調(diào)節(jié)播放音量的大小。
通過(guò)對(duì)MP3播放器系統(tǒng)的功能需求分析,可以將系統(tǒng)劃分為STM32F103RB核心處理[4]、SD卡音頻文件讀取、觸摸屏控制、LED控制、SPI控制、音頻數(shù)據(jù)控制、MP3音頻解碼播放等多個(gè)模塊,系統(tǒng)總體功能結(jié)構(gòu)如圖2所示。
圖2 MP3播放器系統(tǒng)總體結(jié)構(gòu)
主控制程序的流程如圖3所示,系統(tǒng)開(kāi)機(jī)后,依次按如下步驟執(zhí)行:
圖3 系統(tǒng)主控程序流程圖
1)對(duì)系統(tǒng)各個(gè)硬件模塊的初始化;
2)對(duì)FAT文件系統(tǒng)[5]的初始化。這里需要判斷初始化是否成功,如果不成功,系統(tǒng)則會(huì)一直檢索SD卡[6],直到檢測(cè)到能被系統(tǒng)識(shí)別的SD卡和文件系統(tǒng)為止。
3)查找系統(tǒng)文件。系統(tǒng)文件保持在SYSTEM文件夾下,該文件夾下又包括FONT子文件夾。FONT文件夾下包括FONT12.FON和FONT16.FON兩個(gè)字體文件。
4)根據(jù)用戶輸入,執(zhí)行相應(yīng)功能。SD卡中有用戶建立的MUSIC文件夾,其中存放著歌曲文件。用戶插上耳機(jī),根據(jù)顯示界面上的提示選擇相應(yīng)功能,即可聽(tīng)到播放的歌曲。
STM32系列采用ARM Cortex-M3內(nèi)核,其功耗為36 mA,是市場(chǎng)上功耗最低的32位產(chǎn)品,相當(dāng)于0.5 mA/MHz[7],是專門為高性能、低成本、低功耗的嵌入式應(yīng)用而設(shè)計(jì)的。本項(xiàng)目實(shí)現(xiàn)過(guò)程中,采用STM32F103RB處理器。STM32系列處理器具有如下一些特點(diǎn):
1)內(nèi)核:32位ARM Cortex-M3 CPU,最高工作頻率為72 MHz,1.25 DMIPS/MHz。單周期乘法和硬件除法[8-10]。
2)存儲(chǔ)器:片上集成的Flash存儲(chǔ)器容量為32-512KB、SRAM存儲(chǔ)器容量為6-64KB[11]。
3)DMA:DMA控制器的通道數(shù)為12[12]。支持的外設(shè)有多種,例如定時(shí)器、ADC、DAC、I2C、USART和SPI等。
4)2個(gè)12位的微秒級(jí)的A/D轉(zhuǎn)換器(通道數(shù)為16):A/D測(cè)量范圍為0~3.6 V,雙采樣和保持能力。片上同時(shí)集成了一個(gè)溫度傳感器。
5)2通道 12位 D/A轉(zhuǎn)換器:STM32F103xC、STM32F103xD、STM32F103xE獨(dú)有。
6)多達(dá)13個(gè)通信接口:2個(gè)I2C接口(支持SMBus/PMBus),5個(gè) USART接口(支持 ISO7816、LIN、IrDA接口和調(diào)制解調(diào)控制),3個(gè)SPI接口(18 Mbit/s),其中2個(gè)可復(fù)用為I2S接口,CAN接口(2.0B),USB 2.0全速接口和SDIO接口。
硬件解碼過(guò)程通過(guò)解碼芯片VS1003來(lái)實(shí)現(xiàn)[13](如圖4所示)。輸入的比特流首先通過(guò)解碼芯片VS1003的串行接口來(lái)接收。輸入的比特流被解碼后,通過(guò)一個(gè)數(shù)字音量控制器到達(dá)一個(gè)過(guò)采樣立體聲DAC(18位)。VS1003模塊的初始化是通過(guò)XRST、XDCS、XCS、DREQ、SCK、SO、SI等7個(gè)引腳來(lái)實(shí)現(xiàn)的。VS1003芯片工作時(shí),首先進(jìn)行硬件復(fù)位,經(jīng)過(guò)延時(shí)處理后,再進(jìn)行軟件復(fù)位,等待DREQ信號(hào)為高;軟件復(fù)位結(jié)束后便可設(shè)置VS1003芯片,最后向VS1003發(fā)送4個(gè)字節(jié)無(wú)效數(shù)據(jù),啟動(dòng)SPI發(fā)送后,即可完成對(duì)VS1003芯片的初始化工作。
系統(tǒng)采用FAT文件系統(tǒng)管理SD卡。文件分配表FAT采用鏈?zhǔn)浇Y(jié)構(gòu),在FAT32文件系統(tǒng)中用于磁盤數(shù)據(jù)(文件)索引和定位。讀取SD卡文件時(shí),SD卡上的文件存取都是以簇為單位,首先根據(jù)文件名查找到該文件的目錄登記項(xiàng),然后根據(jù)目錄登記項(xiàng)中的簇號(hào)便可以讀取文件的全部?jī)?nèi)容。在需要讀取SD卡中數(shù)據(jù)時(shí),使用的命令字為CMD17,接收正確時(shí)第一個(gè)響應(yīng)命令字節(jié)為0xFE,隨后是512字節(jié)的用戶數(shù)據(jù)塊,最后為2個(gè)字節(jié)的CRC校驗(yàn)碼。
圖4 VS1003硬件結(jié)構(gòu)圖
1)TFT觸摸屏
系統(tǒng)采用2.4寸的TFT液晶屏,其分辨率為240*320,65K色,通過(guò)TI公司ADS7846觸摸屏控制芯片增添觸摸功能[14]。
2)觸摸屏工作原理
觸屏校準(zhǔn)是使用觸摸屏之前必須進(jìn)行的操作,通過(guò)采集觸摸屏上4個(gè)角的物理坐標(biāo),然后使用一定方法(如待定系數(shù)法)就可以算出坐標(biāo)系之間的平移關(guān)系。
3)uC/GUI顯示模塊
uC/GUI是一種圖形支持系統(tǒng),主要應(yīng)用于嵌入式環(huán)境,具有以下特點(diǎn)[15]:只要有合適的C編譯器提供支持,可以適用于任何8/16/32位CPU;只要有合適的LCD驅(qū)動(dòng)(小模式顯示時(shí)除外),可以適用于任何類型的液晶顯示,支持單色、灰度和彩色;所有接口支持使用宏進(jìn)行配制;可以定制顯示尺寸;字符和位圖對(duì)液晶顯示的起點(diǎn)沒(méi)有特別要求,可以從任意起點(diǎn)開(kāi)始顯示。此模塊利用uC/GUI顯示播放器的界面,包括歌曲的名字、音量大小、上一曲、下一曲、循環(huán)、列表瀏覽等功能。
4)字庫(kù)設(shè)計(jì)
由于CPU的Flash存儲(chǔ)器容量只有512KB,無(wú)法一次把所有的字庫(kù)數(shù)據(jù)全部寫入到W25X16芯片。可以將這些數(shù)據(jù)分為5部分寫入,依次為:ASCII字符的寫入、GB2312字庫(kù)文件前半部分的寫入、GB2312字庫(kù)文件后半部分的寫入、unicode碼到oem碼轉(zhuǎn)換表[16]的寫入、oem碼到unicode碼轉(zhuǎn)換表的寫入。
本項(xiàng)目以STM32F103RB為核心控制器,結(jié)合VS1003音頻解碼器,設(shè)計(jì)實(shí)現(xiàn)了一個(gè)MP3播放器。STM32系列CPU擁有豐富的資源,基本不需要添加外部器件,可以通過(guò)軟件升級(jí)來(lái)增加產(chǎn)品的功能,性能提升非常方便。播放器系統(tǒng)采用觸摸屏控制,使得系統(tǒng)操作更為人性化,可以方便地控制整個(gè)系統(tǒng)。同時(shí)實(shí)現(xiàn)了MP3歌曲的播放、換歌、循環(huán)等功能,具有成本低、存儲(chǔ)容量大、擴(kuò)展性強(qiáng)、攜帶方便等優(yōu)點(diǎn),必將在智能汽車、智能家居等領(lǐng)域得到廣泛應(yīng)用。該系統(tǒng)實(shí)現(xiàn)了MP3播放器的主要功能,可以對(duì)一些輔助功能進(jìn)一步加以完善,例如增加鬧鐘、電子書等功能,以使得系統(tǒng)更具實(shí)用性。
[1]王星磊,于蓮芝,孫金,等.基于MP3編碼過(guò)程的音頻加密研究[J].信息技術(shù),2014(10):191-193.
[2]董寧.MP3編碼器算法原理研究[J].電子設(shè)計(jì)工程,2013,21(5):47-49.
[3]杜春雷.ARM體系結(jié)構(gòu)與編程[M].2版.北京:清華大學(xué)出版社,2015.
[4]肖俊生,周小鳳,左鴻飛.基于STM32的高爐爐身厚度監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2014,27(3):113-114,116.
[5]梁鐘麗.基于嵌入式平臺(tái)的文件系統(tǒng)研究[D].大連:大連海事大學(xué),2016.
[6]常亮亮,王廣龍,張成吉.基于SOPC的圖像采集與存儲(chǔ)系統(tǒng)設(shè)計(jì)[J].測(cè)控技術(shù),2012,31(11):11-14.
[7]周官喜.基于STM32低功耗云臺(tái)控制系統(tǒng)設(shè)計(jì)[D].青島:青島理工大學(xué),2012.
[8]馬忠梅,張子劍,張全新,等.ARM&Linux嵌入式系統(tǒng)教程[M].3版.北京:北京航空航天大學(xué)出版社,2014.
[9]徐成波,張常年.基于嵌入式Linux的移動(dòng)機(jī)器人控制系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014(7):24-27.
[10]陳永強(qiáng),陶品,王篤強(qiáng).嵌入式Linux移植[J].實(shí)驗(yàn)室研究與探索,2012,31(9):67-68,72.
[11]方海濤.高速低功耗嵌入式SRAM的設(shè)計(jì)[D].武漢:華中科技大學(xué),2012.
[12]李濤濤.基于PCIE的高速存儲(chǔ)系統(tǒng)設(shè)計(jì)[D].西安:西安電子科技大學(xué),2014.
[13]郝迎吉,關(guān)強(qiáng).基于VS1003解碼器的信號(hào)發(fā)生器[J].儀表技術(shù)與傳感器,2013(2):19-20,54.
[14]于春濤,馮奇,孫濤,等.基于TPS65105的TFT?LCD電源設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2013,36(18):155-156,163.
[15]楊存祥,張春蕾,龐永超.基于uC/GUI的虛擬儀表盤的設(shè)計(jì)[J].化工自動(dòng)化及儀表,2012,39(4):511-514.
[16]馮靈清,楊懷卿,劉宇晶.常用編碼方式及其格式轉(zhuǎn)換[J].計(jì)算機(jī)時(shí)代,2012(1):33-35.