吳小鋒,張西寧,馬 博
(1.西安郵電大學人事處,陜西西安710121;2.陜西廣電網絡傳媒(集團)股份有限公司技術部,陜西西安
710061;3.西安郵電大學計算機學院,陜西西安710121)
隨著編碼與解碼,以及壓縮技術的進步,語音文件一直朝著高壓縮比、高保真的方向發展。在目前普遍應用的音頻壓縮標準中,MP3具有算法復雜、壓縮比大、效果好等優點,其音質在低碼率的條件下能夠接近CD的效果。在市場消費刺激下,各大公司紛紛推出了自己的MP3播放器產品。為了進一步改善市場上MP3播放器存儲容量小、價格昂貴、播放歌曲單一的不足,文中基于STM32F103VET6微控制器,結合芬蘭VLSI Solution公司生產的音頻編解碼芯片VS1003,設計實現了一種個性化的MP3播放器。
MP3幀結構如圖1所示,主要包含以下幾個字段,即幀頭、CRC校驗、邊信息、主數據和附加數據等[1]。在每一個幀中都有一個幀頭,長度為4個字節,幀頭最前面的12比特總是被設置為1,被稱作為“幀同步字”。如果幀頭的校驗位為0,則幀頭后面有長度為2個字節的CRC校驗值,把這個值和通過計算得出的CRC值進行比較就可以得知該幀是否有效。對邊信息進行解碼能夠找出主數據從哪里開始以及尺度因子長度等參數信息。

圖1 MP3幀結構
根據解碼方式不同,解碼MP3文件可以采用軟件解碼和硬件解碼兩種方式[2]。
軟件解碼過程是通過解碼程序來實現,這一程序依據解碼算法編寫,CPU執行解碼程序后,就可以將音頻信號從MP3音頻文件中解析出來。該方案只需要開發者提供基本的硬件條件,對硬件要求不高。經過解碼得到的MP3數據通過主控板的數模轉換功能就可以生成音頻信號,輸入功放后即可播放聲音。然而,如果有大量的MP3文件需要解碼,就需要占用大量的CPU時鐘,因此該方案對CPU性能要求相對高些。
硬件解碼過程就是將解碼算法過程硬件化。解碼模塊集成專用的解碼芯片,自動對MP3文件的音頻信號進行解析,獲取解碼頻率和解碼時間。這一方案的顯著優點是解碼速度快,同時不需要占用CPU對音頻文件進行處理,只需要把MP3數據流送入解碼模塊中,芯片就會自動解碼。
由以上分析可以看出,通過硬件解碼方式能夠得到音質較好的音頻信號[3],而軟件解碼中由于CPU性能和解碼算法中數據處理的優化操作,導致其音頻信號會有損耗。文中采用硬件解碼MP3文件方式,使用具有SPI接口的專用MP3解碼芯片,同時保證了文件數據傳輸的速度。
設計實現的MP3播放器具備以下功能:
1)支持對SD卡的訪問,能夠播放SD卡中的MP3文件;
2)在播放音頻文件時,同步顯示MP3文件的歌曲名、播放時間以及聲音幅度的大小變化;
3)播放過程中,能夠對播放文件進行上一曲、下一曲、循環等操作,以及對音效進行改變;
4)可以顯示SD卡中的文件夾和文件,調節播放音量的大小。
通過對MP3播放器系統的功能需求分析,可以將系統劃分為STM32F103RB核心處理[4]、SD卡音頻文件讀取、觸摸屏控制、LED控制、SPI控制、音頻數據控制、MP3音頻解碼播放等多個模塊,系統總體功能結構如圖2所示。

圖2 MP3播放器系統總體結構
主控制程序的流程如圖3所示,系統開機后,依次按如下步驟執行:

圖3 系統主控程序流程圖
1)對系統各個硬件模塊的初始化;
2)對FAT文件系統[5]的初始化。這里需要判斷初始化是否成功,如果不成功,系統則會一直檢索SD卡[6],直到檢測到能被系統識別的SD卡和文件系統為止。
3)查找系統文件。系統文件保持在SYSTEM文件夾下,該文件夾下又包括FONT子文件夾。FONT文件夾下包括FONT12.FON和FONT16.FON兩個字體文件。
4)根據用戶輸入,執行相應功能。SD卡中有用戶建立的MUSIC文件夾,其中存放著歌曲文件。用戶插上耳機,根據顯示界面上的提示選擇相應功能,即可聽到播放的歌曲。
STM32系列采用ARM Cortex-M3內核,其功耗為36 mA,是市場上功耗最低的32位產品,相當于0.5 mA/MHz[7],是專門為高性能、低成本、低功耗的嵌入式應用而設計的。本項目實現過程中,采用STM32F103RB處理器。STM32系列處理器具有如下一些特點:
1)內核:32位ARM Cortex-M3 CPU,最高工作頻率為72 MHz,1.25 DMIPS/MHz。單周期乘法和硬件除法[8-10]。
2)存儲器:片上集成的Flash存儲器容量為32-512KB、SRAM存儲器容量為6-64KB[11]。
3)DMA:DMA控制器的通道數為12[12]。支持的外設有多種,例如定時器、ADC、DAC、I2C、USART和SPI等。
4)2個12位的微秒級的A/D轉換器(通道數為16):A/D測量范圍為0~3.6 V,雙采樣和保持能力。片上同時集成了一個溫度傳感器。
5)2通道 12位 D/A轉換器:STM32F103xC、STM32F103xD、STM32F103xE獨有。
6)多達13個通信接口:2個I2C接口(支持SMBus/PMBus),5個 USART接口(支持 ISO7816、LIN、IrDA接口和調制解調控制),3個SPI接口(18 Mbit/s),其中2個可復用為I2S接口,CAN接口(2.0B),USB 2.0全速接口和SDIO接口。
硬件解碼過程通過解碼芯片VS1003來實現[13](如圖4所示)。輸入的比特流首先通過解碼芯片VS1003的串行接口來接收。輸入的比特流被解碼后,通過一個數字音量控制器到達一個過采樣立體聲DAC(18位)。VS1003模塊的初始化是通過XRST、XDCS、XCS、DREQ、SCK、SO、SI等7個引腳來實現的。VS1003芯片工作時,首先進行硬件復位,經過延時處理后,再進行軟件復位,等待DREQ信號為高;軟件復位結束后便可設置VS1003芯片,最后向VS1003發送4個字節無效數據,啟動SPI發送后,即可完成對VS1003芯片的初始化工作。
系統采用FAT文件系統管理SD卡。文件分配表FAT采用鏈式結構,在FAT32文件系統中用于磁盤數據(文件)索引和定位。讀取SD卡文件時,SD卡上的文件存取都是以簇為單位,首先根據文件名查找到該文件的目錄登記項,然后根據目錄登記項中的簇號便可以讀取文件的全部內容。在需要讀取SD卡中數據時,使用的命令字為CMD17,接收正確時第一個響應命令字節為0xFE,隨后是512字節的用戶數據塊,最后為2個字節的CRC校驗碼。

圖4 VS1003硬件結構圖
1)TFT觸摸屏
系統采用2.4寸的TFT液晶屏,其分辨率為240*320,65K色,通過TI公司ADS7846觸摸屏控制芯片增添觸摸功能[14]。
2)觸摸屏工作原理
觸屏校準是使用觸摸屏之前必須進行的操作,通過采集觸摸屏上4個角的物理坐標,然后使用一定方法(如待定系數法)就可以算出坐標系之間的平移關系。
3)uC/GUI顯示模塊
uC/GUI是一種圖形支持系統,主要應用于嵌入式環境,具有以下特點[15]:只要有合適的C編譯器提供支持,可以適用于任何8/16/32位CPU;只要有合適的LCD驅動(小模式顯示時除外),可以適用于任何類型的液晶顯示,支持單色、灰度和彩色;所有接口支持使用宏進行配制;可以定制顯示尺寸;字符和位圖對液晶顯示的起點沒有特別要求,可以從任意起點開始顯示。此模塊利用uC/GUI顯示播放器的界面,包括歌曲的名字、音量大小、上一曲、下一曲、循環、列表瀏覽等功能。
4)字庫設計
由于CPU的Flash存儲器容量只有512KB,無法一次把所有的字庫數據全部寫入到W25X16芯片。可以將這些數據分為5部分寫入,依次為:ASCII字符的寫入、GB2312字庫文件前半部分的寫入、GB2312字庫文件后半部分的寫入、unicode碼到oem碼轉換表[16]的寫入、oem碼到unicode碼轉換表的寫入。
本項目以STM32F103RB為核心控制器,結合VS1003音頻解碼器,設計實現了一個MP3播放器。STM32系列CPU擁有豐富的資源,基本不需要添加外部器件,可以通過軟件升級來增加產品的功能,性能提升非常方便。播放器系統采用觸摸屏控制,使得系統操作更為人性化,可以方便地控制整個系統。同時實現了MP3歌曲的播放、換歌、循環等功能,具有成本低、存儲容量大、擴展性強、攜帶方便等優點,必將在智能汽車、智能家居等領域得到廣泛應用。該系統實現了MP3播放器的主要功能,可以對一些輔助功能進一步加以完善,例如增加鬧鐘、電子書等功能,以使得系統更具實用性。
[1]王星磊,于蓮芝,孫金,等.基于MP3編碼過程的音頻加密研究[J].信息技術,2014(10):191-193.
[2]董寧.MP3編碼器算法原理研究[J].電子設計工程,2013,21(5):47-49.
[3]杜春雷.ARM體系結構與編程[M].2版.北京:清華大學出版社,2015.
[4]肖俊生,周小鳳,左鴻飛.基于STM32的高爐爐身厚度監測系統的設計[J].工業控制計算機,2014,27(3):113-114,116.
[5]梁鐘麗.基于嵌入式平臺的文件系統研究[D].大連:大連海事大學,2016.
[6]常亮亮,王廣龍,張成吉.基于SOPC的圖像采集與存儲系統設計[J].測控技術,2012,31(11):11-14.
[7]周官喜.基于STM32低功耗云臺控制系統設計[D].青島:青島理工大學,2012.
[8]馬忠梅,張子劍,張全新,等.ARM&Linux嵌入式系統教程[M].3版.北京:北京航空航天大學出版社,2014.
[9]徐成波,張常年.基于嵌入式Linux的移動機器人控制系統[J].單片機與嵌入式系統應用,2014(7):24-27.
[10]陳永強,陶品,王篤強.嵌入式Linux移植[J].實驗室研究與探索,2012,31(9):67-68,72.
[11]方海濤.高速低功耗嵌入式SRAM的設計[D].武漢:華中科技大學,2012.
[12]李濤濤.基于PCIE的高速存儲系統設計[D].西安:西安電子科技大學,2014.
[13]郝迎吉,關強.基于VS1003解碼器的信號發生器[J].儀表技術與傳感器,2013(2):19-20,54.
[14]于春濤,馮奇,孫濤,等.基于TPS65105的TFT?LCD電源設計[J].現代電子技術,2013,36(18):155-156,163.
[15]楊存祥,張春蕾,龐永超.基于uC/GUI的虛擬儀表盤的設計[J].化工自動化及儀表,2012,39(4):511-514.
[16]馮靈清,楊懷卿,劉宇晶.常用編碼方式及其格式轉換[J].計算機時代,2012(1):33-35.