馬 俊
(上海海事大學信息工程學院,上海 201306)
MP3的全稱是Moving Picture Experts Group Audio Layer III,它是利用 MPEG Audio Layer 3技術,將音樂以1∶10甚至1∶12的壓縮率壓縮成容量較小的文件。換句話說,它能夠在音質丟失很小的情況下把文件壓縮到更小的程度,而且還非常好地保持了原來的音質。正是因為MP3具有體積小、音質高的特點,使得MP3格式幾乎成為網(wǎng)上音樂的代名詞。
MP3播放器,顧名思義也就是可播放MP3格式的音樂播放工具。它通常由微控制器、存儲器、解碼芯片、音頻放大電路、按鍵及LCD顯示屏等幾個部分組成。MP3播放器通過USB接口與電腦建立通訊聯(lián)系,將MP3編碼格式的文件存儲于存儲器中。播放時,在微控制器系統(tǒng)的作用下,提取存儲器中的音樂文件通過解碼芯片進行解碼。解碼后的數(shù)字信號再進行數(shù)模轉換,形成模擬音頻信號,然后經(jīng)過音頻放大器放大,再由耳機信號端口輸出,最后就可以通過接在音頻端口的耳機聽到動聽的音樂。
作為一個完整MP3播放系統(tǒng),其系統(tǒng)將會涉及到硬件和軟件2方面。其中,硬件系統(tǒng)的設計主要包括硬件系統(tǒng)的結構、器件選擇和相互間的接口設計,各模塊的劃分、相互關系以及具體功能的設定等[1]。軟件系統(tǒng)的設計包括外部總線的實現(xiàn),以及在此基礎上對各外設的驅動,并通過C語言編程控制數(shù)據(jù)流的走向和各組件的協(xié)調工作[2]。
音樂播放器的特點是實用性、便攜性和穩(wěn)定性。正是因為如此,在設計上盡量讓電路精簡、體積小、功耗低。為了方便對系統(tǒng)進行修改、功能升級以及進行測試和調試,系統(tǒng)采用了模塊化設計的思想[3]。從功能方面來看,本系統(tǒng)可以分為音頻解碼模塊、微控制器模塊、液晶模塊、鍵盤模塊、電源模塊、JTAG編程接口模塊幾個部分。整個系統(tǒng)框圖如圖1所示。
本系統(tǒng)采用Silicon Laboratories公司的SOC型單片機C8051F020。C8051F系列單片機是完全集成的混合信號系統(tǒng)級芯片,具有與傳統(tǒng)MCS-51單片機完全兼容的指令內核。除此之外,它采用了流水線處理技術,不再區(qū)分時鐘周期和機器周期,能在執(zhí)行指令期間預處理下一條指令,提高了指令的執(zhí)行效率,且大部分指令都能在一個時鐘周期內完成,最大處理速度達到25MIPS[4]。該單片機包括豐富的模擬和數(shù)字外設,如AD、DA、PGA、比較器、電壓基準、溫度傳感器、WDT、定時器、PCA、PWM接口,以及多種串行接口,如UART、I2C、SPI,同時集成有 JTAG,方便在線編程和調試。此外,該單片機的存儲器資源豐富,集成有256B的片內RAM和4k的片外RAM,以及64k的FLASH。因此,總的說來該單片機完全可以滿足一般的系統(tǒng)設計要求。
圖1 系統(tǒng)框圖
音頻編解碼模塊是本設計的核心之一。為了使系統(tǒng)對MP3、WMA、MIDI等格式的音頻文件均能進行播放,本設計選用 VLSI公司出品的VS1003B這款音頻編解碼芯片。該芯片是一款單芯片的MP3、WMA、MIDI音頻解碼和ADPCM編碼芯片,其擁有一個高性能低功耗的DSP處理器核VS_DSP,5k的指令 RAM,0.5k的數(shù)據(jù) RAM,串行的數(shù)據(jù)輸入接口,4個通用I/O口,1個UART口,同時片內帶1個可變采樣率的ADC,1個立體聲DAC以及音頻耳機放大器,非常符合本系統(tǒng)的設計要求。
VS1003對電源的要求較高,正常工作時需要2種不同的電壓2.5 V和3.3 V同時對其供電,且同一電源電壓下模擬電源和數(shù)字電源之間為免相互之間發(fā)生干擾要用電感相隔[5]。其供電電路如圖2所示。
圖2 VS1003供電電源原理
如圖3所示,系統(tǒng)的輸入電源是9 V,經(jīng)過LM7805穩(wěn)壓后變?yōu)? V。LM7805的輸出端并有2個電容到地,起濾波作用。其后5 V電壓分成2路,一路給AMS117-3.3V,穩(wěn)壓后輸出3.3 V電壓,另一路給AMS117-2.5 V,穩(wěn)壓后輸出2.5 V電壓。2路輸出電壓后面分別經(jīng)過∏型濾波,進一步降低電壓紋波,最后再給芯片供電。圖中為避免AVDD和IOVDD之間相互干擾,二者之間使用0歐姆電阻R1起加以隔離。另外,VS1003B除了電源引腳之外,其他引腳都可以與單片機的通用I/O口相連。它與單片機的連接可參見其典型應用。
圖3 NOKIA5110顯示模塊與單片機的連接
本設計中的音頻文件存取模塊電路以美國SanDisk公司生產(chǎn)的SD卡為核心。該SD卡支持SPI總線[6],只需要3根線和單片機相連,使用起來非常方便。除此之外,SD卡通過外接SD卡專用的USB讀寫控制芯片AU6331可以方便地實現(xiàn)SD卡與上位機之間的USB通信。
SD卡的內部結構主要包括片上控制器、FLASH存儲模塊、控制和狀態(tài)寄存器、內部時鐘、電源管理以及引腳接口部分。SD卡上所有單元由內部時鐘發(fā)生器提供時鐘,接口驅動單元同步外部時鐘的DAT和CMD信號到內部所用時鐘。SD卡共有6個寄存器,通過讀寫這些寄存器可對SD卡進行設置并獲得其狀態(tài)。SD卡有2個可選的通信協(xié)議:SD模式和SPI模式。SD模式下總共需要6條線,1條時鐘線,1條命令線,4條數(shù)據(jù)線。此模式下的數(shù)據(jù)傳輸是受保護的。SPI模式下共需要4條線,3條SPI總線(時鐘,數(shù)據(jù)輸入,數(shù)據(jù)輸出),1條片選信號線。此模式下的數(shù)據(jù)傳輸是不受保護的。SD卡以塊為單位對數(shù)據(jù)進行讀寫。在設定塊大小為512字節(jié)時,一次可以讀寫1個扇區(qū)。本系統(tǒng)中單片機讀寫SD卡采用的是SPI總線。
本系統(tǒng)屬于便攜式設備,在系統(tǒng)的使用中,液晶顯示模塊除了能夠滿足顯示要求之外,還應當具有體積小、功耗低等特點。LPH7366是NOKIA公司生產(chǎn)的可用于該公司的5110系列移動電話的液晶顯示模塊,所以習慣稱該顯示模塊為NOKIA5110液晶顯示模塊。與類似產(chǎn)品相比較,NOKIA5110顯示模塊具有如下特點:①84×48的點陣LCD,可以顯示4行漢字、字符及圖片;② 采用串行接口與控制器進行通訊,對I/O口資源的占用大大減少,傳輸速率高達4Mb/s,可全速寫入顯示數(shù)據(jù),無需等待時間;③ LCD控制器/驅動器芯片(PCD8544)已經(jīng)綁定到LCD晶片上,模塊體積進一步減小;④采用低電壓供電,正常顯示時工作電流在200 μA以下,且具有掉電模式。正是由于NOKIA5110有以上特點,所以非常適合應用在電池供電的便攜式設備中。NOKIA5110顯示模塊采用串行口與控制器進行通訊。它與微控制器的連接如圖3所示。
在一個完整的系統(tǒng)設計中,除了硬件之外,軟件設計也是一項非常重要的內容。本系統(tǒng)的軟件設計主要分為4個部分,即 SD卡讀取軟件,VS1003B解碼單元軟件,液晶顯示軟件,鍵盤控制軟件。
要想成功從SD卡中讀取所需文件或把外界文件存儲在SD卡中,除了按照規(guī)定的通信方式和SD卡通信外,還要遵從SD卡中已有的文件存儲方式來進行,即按照通常所說的文件系統(tǒng)來存取文件。在本系統(tǒng)中,單片機對SD卡的讀寫采用SPI總線模式,所選SD卡采用FAT32文件系統(tǒng)進行數(shù)據(jù)的存儲。因此,從SD卡中讀取文件的實現(xiàn)主要分為2個部分:單片機與SD卡間SPI通信的實現(xiàn)和FAT32文件系統(tǒng)讀寫的實現(xiàn)。
本設計中所選用的單片機C8051F020含有一個串行外設接口SPI0[7],對它的訪問和控制是通過系統(tǒng)控制寄存器中的配置寄存器SPI0CFG、控制寄存器SPI0CN、數(shù)據(jù)寄存器SPI0DAT和時鐘頻率寄存器SPI0CKR這4個特殊功能寄存器來實現(xiàn)的。而在SD卡內部包含1個片上控制器[8],它通過9腳和外部微控制器通信,接口可采用SPI模式或SD模式。當SD卡收到復位命令(CMD0)時,并且CS信號有效(低電平),SPI模式將啟動。
操作系統(tǒng)中負責管理和存儲文件信息的軟件機構稱為文件管理系統(tǒng),簡稱文件系統(tǒng)。文件系統(tǒng)由3部分組成:與文件管理有關的軟件、被管理的文件以及實施文件管理所需的數(shù)據(jù)結構。從系統(tǒng)角度來看,文件系統(tǒng)是對文件存儲器空間進行組織和分配,負責文件的存儲并對存入的文件進行保護和檢索的系統(tǒng)[9]。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,當用戶不再使用時撤銷文件等。其中,常見的文件系統(tǒng)有FAT和NTFS。在本系統(tǒng)中,SD卡內的數(shù)據(jù)存儲采用的FAT32文件系統(tǒng)。對FAT32文件統(tǒng)讀寫的軟件實現(xiàn)是本系統(tǒng)軟件設計部分的難點和核心內容。為了能更為直觀的了解這些分區(qū)中數(shù)據(jù)的存儲,可以借助一款專門用于磁盤數(shù)據(jù)保護和恢復的軟件WinHex。從SD卡中讀取文件流程如圖4所示。
圖4 讀取FAT32文件系統(tǒng)數(shù)據(jù)流程
如前所述,VS1003B用SPI總線來與單片機進行通信,其解碼過程的實現(xiàn)是通過單片機操作其內部相應寄存器的值來完成的。VS1003B的解碼初始化的流程:①將XRESET引腳電平置為0,對VS1003B進行硬件復位;② 延時一段時間后,將XDCS、XCS、XRESET引腳電平置為1;③ 等待DREQ引腳電平變高,即表示VS1003B可以接收數(shù)據(jù);④ 設置 SPI總線為低速模式;⑤ 將 SPI_MODE寄存器值設為0X0804,對VS1003B進行軟件復位;⑥等待DREQ引腳電平變高,表示軟件復位結束;⑦ 給 SCI_CLOCKF寄存器賦值,設置VS1003B的時鐘頻率;⑧給SPI_AUDATA寄存器賦值,設置VS1003B的采樣率;⑨ 給SCI_VOL寄存器賦值,設置音量;⑩ 設置 SPI總線為高速模式。
至此,VS1003B的解碼初始化結束,接下來只要按正確的方式將音頻文件數(shù)據(jù)發(fā)送給VS1003B,就能自動識別其碼率,然后通過一定的解碼速率進行解碼[10]。由于解碼的速率已經(jīng)確定,為了能流暢地播放出音樂,VS1003為用戶準備了0.5k的數(shù)據(jù)緩沖區(qū)作為音頻數(shù)據(jù)的緩沖。另外,為了實時確定數(shù)據(jù)緩沖區(qū)里有無數(shù)據(jù)[10],VS1003專門設定了一個中斷腳DREQ,只需要判斷其引腳電平的高低即可。解碼電路單元的程序設計流程如圖5所示。
圖5 VS1003解碼流程
液晶顯示模塊選用的是NOKIA5110,它的控制器是PCD8544。由于該控制器無內部字庫,因此全部西文及中文字庫均需自制,由于可通過字模軟件自由生成字模代碼,因此顯示字體可靈活多變。關于顯示程序,主要包括基本的讀寫操作和初始化操作。
PCD8544的初始化過程分為幾部分:給復位電平,復位電平的脈寬最多為100 ms;設置顯示模塊的工作模式;設置顯示模塊的工作偏置電壓;配置功能寄存器,進行溫度校正;清屏;開顯示(CE引腳置為低電平)。
給出了一款高音質MP3播放器的設計方案。經(jīng)過實際制作和測試,該系統(tǒng)完成了對 MP3、WMA、MIDI等格式音頻文件的播放,且音質較好。系統(tǒng)設有矩陣鍵盤輸入,可供多種不同的播放形式的選擇,從而實現(xiàn)了人機交互。顯示屏選用NOKIA5110,界面友好??偟恼f來,該方案具有便于攜帶、電路簡單、成本低廉的特點,性價比較高。
[1]何立民.單片機高級教程[M].北京:北京航空航天大學出版社,2007.
[2]馬忠梅.單片機的C語言應用程序設計[M].4版.北京:北京航空航天大學出版社,2007.
[3]潘永雄,劉殊.單片機原理與應用[M].西安:西安電子科技大學出版社,2000.
[4]張培仁.基于C語言C8051F系列微控制器原理與應用[M].北京:清華大學出版社,2007.
[5]康華光,鄒壽彬.電子技術基礎數(shù)字部分[M].4版.北京:高等教育出版社,2000.
[6]SanDisk Corporation.SanDIsk Secure Digital Card Product Manual[M].[S.l.]:[s.n.],2004.
[7]萬光毅.SOC單片機試驗、實踐與應用設計—基于C8051F系列[M].北京:北京航空航天大學出版社,2006.
[8]SanDisk Corporation.SanDIsk Secure Digital Card Product Manual[M].[S.l.]:[s.n.],2004.
[9]Microsoft Corporation.Microsoft Extensible Firmware Initiative FAT32 File System Specification[M].[S.l.]:[s.n.],2000.
[10]VLSI Solution Oy.VS1003MP3/WMA AUDIO CODEC[Z].[S.l.]:VLSI Solution Oy,2005.