繆賢浩 劉凱
摘 要:以基于雙核單片機AT89C51SND1C以及K9F5608U,設計并實現了一個MP3播放系統,該播放系統能夠實現mp3播放、歌曲信息顯示、歌曲選擇等功能,操作簡單方便,成本低、系統可靠、易于擴展。
關鍵詞:MP3;單片機;AT89C51SND1C
隨著嵌入式技術的不斷發展,MP3播放器已經在大眾生活中越來越普遍。基于單片機的MP3播放器設計包含了很多當今流行的技術。由于各種技術的誕生,MP3播放器設計呈現出多樣化的趨勢。
1 系統整體設計
本系統主要實現一個MP3播放器的功能,其中包括文件傳輸和存儲功能。為簡化設計,降低成本,整個系統主控CPU采用的是雙核AT89C51SNDIC,整個系統還包括K9F5608U,電源部分、音頻部分、串行通信部分和人機接口部分組成。
2 主要硬件電路設計
本設計的主控CPU自帶MP3解碼模塊,因此本設計主要硬件電路為音頻放大以及文件存儲模塊。
2.1 音頻模塊
本系統采用的芯片是CS4330,該芯片能夠支持48KHz,44.1KHz和32KHz的標準音頻數據。音頻數據通過SDATA引腳輸入,LRCK引腳控制著左右聲道以及相應數據的劃分,而SCLK為即將輸入懂啊緩沖區的數據提供時鐘。CS4330沒有配置引腳,無需軟件配置。
CS4330的數據格式是右對齊的18位數據格式,支持內部以及外部SCLK工作模式,且數據在SCLK信號的上升沿有效,可在軟件中通過配置AT89C51SND1C的音頻部件,確保正確工作。聲音信號將數字音頻信息送到芯片CS4330中,再通過TDA2822放大后進入音頻輸出設備,電路如下圖所示。
2.2 文件存儲模塊
K9F5608U是Nand Flash芯片,韓國三星公司產品。這種Flash芯片被大量的應用在存儲設備上,比如U盤、MP3、數碼相機等。因AT89C51SND1C沒有集成Nand Flash的訪問控制器,故只能用單片機I/O口來模擬該芯片的通信時序實現數據的訪存。K9F5608U外圍電路圖如圖2所示。
3 系統的軟件設計
3.1 軟件整體設計方案
根據系統的實際需求,軟件可分為主程序、MP3、U盤控制等模塊,在U盤控制模塊中則有簡單的文件系統和Flash讀寫程序用于U盤的讀寫。通信模塊主要功能是用于調試為加強用戶體驗,該系統還加入了LCD模塊顯示歌曲信息,鍵盤模塊用于切換歌曲。
系統從主程序啟動后,通過選擇單片機的P口中的一個二進制位作為考察位,當它的電平為高電平的時候進入U盤模式,相反則為MP3播放模式。在需要進行程序的調試時,需要借助通信模塊從串口輸出一些信息。
3.2 U盤控制模塊
U盤插入,主機得到U盤描述符后識別出U盤是支持bulk-only的海量存儲設備。于是兩者就通過bulk端點進行通信,主機和設備的通信過程即傳輸定義好的數據包的過程。
對于一個USB海量存儲設備而言,必須支持三個端點的數據處理。即:單0號端點和雙非0端點。在程序結構設計上可以采取中斷或者查詢的方式,在不影響系統運行速度的情況下,這里采用程序查詢的模式進行,即:逐步查詢端點0、1、2是否產生中斷,若有則執行相應的操作。本設計中端點0、1、2分別用于處理標準的USB,Bulk-In以及Bulk-Out請求[1]。
3.3 MP3播放模塊
在每首MP3歌曲開始播放的時候,需要初始化MP3文件,即:從MP3文件的頭部提取采樣率等信息,通過設置,讓采樣率與MP3解碼器模塊中的時鐘相匹配。如果開始檢測到有標簽ID3V2.3的標簽頭,則獲得標簽大小后將這些標簽幀全部跳過,然后將幀頭讀取到內存中,根據MP3幀頭的格式,分離出MPEG版本和采樣率標識來,設置PLL時鐘來滿足MP3解碼器和音頻要求。
MP3歌曲的采樣率設置好以后,就播放該歌曲。在默認情況下,播放完一首歌曲,主控程序會繼續播放下一首歌曲。
在MP3播放程序中,數據是從K9F5608芯片到存儲器然后再到解碼器的緩沖區中,數據量是相當大的,因此,需要充分考慮到考慮到數據在傳輸過程中,程序的運行時間要與數據傳輸時間相匹配的問題,也就是程序的執行效率問題。實際上此類的程序的分析屬于按數據流程思考問題的例子。具體地說,不能因為程序運行的效率不夠高導致MP3解碼器緩沖區填充的數據出現“斷點”,聲音緩沖區出現斷電,播放出來的mp3必然有“斷音”的情況出現,這就是因程序設計導致聲音雜亂的原因所在。為了保證不出現間斷的問題,需要保證MP3解碼的速率不能比填充到緩沖區的速率大,不能讓解碼這個步驟“停止工作”。具體到程序中,從SRAM緩沖區復制到MP3解碼器的時間要足夠短,能夠等待解碼器確認信號,然后再進行下次操作。在這個時間里可以處理例如鍵盤中斷服務程序設置標志位的查詢與響應,本程序中判斷是否暫停。
另外一方面,MP3解碼器也不能處于等待狀態。與上面的情況相反,在等待的過程中處理太多的事情,最后解碼器會出現等待的狀況,這樣也會影響到聲音的播放。另外的一點就是,由于每一級的數據的讀取都需要時間,從數據從FLASH中讀取的最初階段需要有一定的的提前量,不能出現解碼器要數據才開始讀的情況出現。
4 系統的實現
本文對MP3系統的設計進行了深入的研究,并借助AT89C51SND1C芯片設計了一個MP3播放器為例,實現一個MP3播放功能。整個系統由AT89C51SND1C、K9F5608U,供電模塊、音頻處理模塊、串行調試模塊部分和其他輸入/輸出模塊組成。
以下是MP3播放器功能正在運行,當前Flash里面存放了四首歌,系統將會不斷地循環的播放這四首歌,并能調節音量,音調,曲目的切換操作。
[參考文獻]
[1]張景璐,于京,馬澤明.51單片機項目教程[M].北京:人民郵電出版社,2010.3:121-139.
[2]陳海宴.51單片機原理及應用:基于Keil C與Proteus[M].北京:北京航空航天大學出版社,2010.
[3]李軍.51系列單片機高級開發指南名[M].北京:北京航空航天大學出版社,2004.
[4]李華,主編.MCS-51系列單片機實用接口技術[M].北京:北京航空航天大學出版社,1996.
[5]張毅剛,彭喜元,姜守達.新編MCS-51單片機應用設計[M].哈爾濱:工業大學出版社,2008.