1.引言 MP3是生活中常見的電子產(chǎn)品。受手機(jī)、paid的沖擊,當(dāng)前人們對(duì)MP3功能的要求更加差異化和苛刻。傳統(tǒng)MP3功能單一,芯片處理能力較差,大多無法播放高音質(zhì)音樂文件。基于這一問題本文提出一種基于51增強(qiáng)型單片機(jī)的低成本多功能大容量MP3解決方案,在可播放高音質(zhì)MP3歌曲的基礎(chǔ)上加入圖片播放和電子書播放,以應(yīng)對(duì)MP3功能的差異化需求。詳細(xì)設(shè)計(jì)如下。 2.硬件設(shè)計(jì)本多功能MP3由數(shù)據(jù)存儲(chǔ)、音頻解碼、液晶顯示、中心控制、電源、鍵盤等功能模塊構(gòu)成。 2.1 數(shù)據(jù)存儲(chǔ)模塊 選用KingstonSDHC卡作為存儲(chǔ)介質(zhì)。SDHC卡是一種高容量SD存儲(chǔ)卡,容量在2GB~32G,符合SD2.0規(guī)范,可采用FAT32文件系統(tǒng)管理。單片機(jī)通過通信讀寫SDHC卡命令和狀態(tài)寄存器完成相關(guān)操作工作。SD卡內(nèi)部有7個(gè)寄存器。其中OCR,CID,CSD和SCR寄存器保存卡的配置信息:RCA寄存器保存SD模式下通信過程SDHC卡當(dāng)前暫時(shí)地址;卡狀態(tài)(Card Status)和SD狀態(tài)(SD Status)寄存器保存卡當(dāng)前狀態(tài),如:是否寫成功,通信的CRC校驗(yàn)是否正確等,這兩個(gè)寄存器的內(nèi)容與通信模式有關(guān)。 須注意SD卡的工作電壓為3.3V,不能與5V單片機(jī)直接相連,可在SD模塊集成5-3.3V轉(zhuǎn)換電路,方便單片機(jī)與SDHC卡的耦合。 2.2 音頻解碼模塊 MP3文件其實(shí)是一種經(jīng)過MP3(即動(dòng)態(tài)影像專家壓縮標(biāo)準(zhǔn)音頻層面)編碼算法壓縮的數(shù)據(jù),不能直接送給功放,必須先通過解碼還原出原始音頻數(shù)據(jù)再進(jìn)行播放。本文所選解碼芯片為VLSI公司的VS1003,它支持MP3/WAV/WMA/MIDI音頻解碼和ADPCM編碼。VS1003的工作是通過對(duì)功能、狀態(tài)寄存器的讀寫完成的。其中控制信息通過SCI寫入功能寄存器,音頻數(shù)據(jù)通過SDI寫入VS1003數(shù)據(jù)緩沖區(qū)。寫音頻數(shù)據(jù)時(shí),拉低XDCS,SDI有效;寫命令數(shù)據(jù)時(shí),拉低XCS,SCI有效。須注意,VS1003在DREQ管腳為高電平時(shí)才可以接收數(shù)據(jù)。當(dāng)工作在解碼狀態(tài)時(shí)它通過一個(gè)串行接口接收比特流,比特流被解碼后通過數(shù)字音量控制器被送到18位DAC,得到的音頻模擬信號(hào)經(jīng)過功放被送到耳機(jī)接口,接上耳機(jī)即可聽到音樂聲。 2.3 單片機(jī)控制模塊 本文采用宏晶公司STC15F2K60S2單片機(jī)作為控制器,其2K字節(jié)片內(nèi)RAM可滿足系統(tǒng)運(yùn)行RAM要求;該單片機(jī)采用增強(qiáng)型8051內(nèi)核,速度快,可滿足MP3播放數(shù)據(jù)交換要求;內(nèi)置SPI串行通信接口,易于與SD模塊、VS1003模塊耦合操作。該單片機(jī)的工作電壓5.5V~3.8V的寬電壓,推薦5V,須做好與SD卡管腳3.3V工作電壓的耦合,以防SD卡損壞或工作失常。 2.4TFT液晶顯示模塊 TFT液晶即彩色晶體管液晶顯示器,它的像素點(diǎn)由集成在其后的薄膜晶體管來驅(qū)動(dòng),通過一定電路控制每一像素三基色光強(qiáng)的配比即可顯示各種彩色。8位單片機(jī)系統(tǒng)下的TFT液晶的顯示需要TFT液晶控制器來驅(qū)動(dòng),單片機(jī)可通過與TFT液晶控制器的交互間接控制TFT液晶的顯示。 本文顯示模塊采用的是一款3.5寸320*480分辨率的16位真彩色TFT液晶屏。模塊采用8位并口方式與單片機(jī)連接,可通過8位的標(biāo)準(zhǔn)Intel8080總線進(jìn)行指令和數(shù)據(jù)的傳輸,便于操作。 TFT液晶的顯示是將圖形中每個(gè)像素點(diǎn)的位置和顏色信息在屏上對(duì)應(yīng)顯示,16位真彩色屏每一個(gè)像素點(diǎn)的位置信息(即坐標(biāo))和顏色信息按照一定格式存儲(chǔ)在兩個(gè)字節(jié)中。單片機(jī)操作時(shí)在對(duì)應(yīng)模式下將圖案所有像素點(diǎn)的信息送給控制器,在顯示器上通過像素點(diǎn)的點(diǎn)陣組合便可完成顯示。 3.軟件設(shè)計(jì)本多功能MP3具備三大功能:歌曲播放、圖片播放、電子書播放。目標(biāo)數(shù)據(jù)的獲取是實(shí)現(xiàn)每個(gè)功能的首要問題。由于歌曲、圖片、電子書文件大,在SDHC卡以簇鏈形式存儲(chǔ),需由文件系統(tǒng)進(jìn)行數(shù)據(jù)管理,故嵌入FAT32文件系統(tǒng)(znFAT)解決上述問題。在此基礎(chǔ)上完成每個(gè)子功能與之相關(guān)的數(shù)據(jù)處理及系統(tǒng)整體運(yùn)行框架即可實(shí)現(xiàn)全部功能。 3.1 數(shù)據(jù)獲取 數(shù)據(jù)獲取需保證SDHC卡的正確驅(qū)動(dòng)和FAT32文件系統(tǒng)的正常運(yùn)行。 3.2 SDHC卡的驅(qū)動(dòng) (1)初始化操作 ①延時(shí)至少74clock,等待SD卡內(nèi)部操作完成。 ②拉低CS選中SD卡。 ③發(fā)送CMD0,若返回0x01,進(jìn)入Idle狀態(tài)。 ④發(fā)送CMD8命令,若返回0x01,初步判斷為2.0卡,循環(huán)發(fā)送CMD55+ACMD41,直至返回0x00,確定SD2.0卡初始化成功。 ⑤拉高CS。 (2)讀數(shù)據(jù)操作 ①發(fā)送CMD17(讀取單個(gè)扇區(qū))或CMD18(連續(xù)讀取多個(gè)扇區(qū))讀命令,返回0x00表示操作成功。 ②接收數(shù)據(jù):格式為開始令牌(0xfe)+512B正式數(shù)據(jù)+2BCRC校驗(yàn)碼。 (3)寫數(shù)據(jù)操作 ①發(fā)送CMD24(寫單個(gè)扇區(qū))或CMD25(連續(xù)寫多個(gè)扇區(qū))寫命令,返回0x00表示操作成功。 ②發(fā)送數(shù)據(jù):格式為開始令牌(0xfe)+512B正式數(shù)據(jù)+2BCRC校驗(yàn)碼。 (4)擦除操作 ①發(fā)送CMD32擦除開始地址。 ②發(fā)送CMD33和擦除結(jié)束地址。 ③發(fā)送CMD38,擦除指定的多扇區(qū)內(nèi)容。 SDHC驅(qū)動(dòng)常用函數(shù)如下: 函數(shù)定義 功能與參數(shù)描述 SD_Init() SD卡初始化 SD_Write_Sector(addr,buffer) 將buffer中的數(shù)據(jù)寫入到addr扇區(qū)中 SD_Read_Sector(addr,buffer) 讀取addr扇區(qū)中數(shù)據(jù)到buffer中 SD_Write_nSector(nsec,addr,buffer) 將buffer中的數(shù)據(jù)寫入到addr開始的nsec個(gè)扇區(qū)中 SD_Read_nSector(nsec,addr,buffer) 讀取addr開始的nsec個(gè)扇區(qū)數(shù)據(jù)到buffer中 SD_Erase_nSector(addr_sta,addr_end) 擦除addr_sta開始addr_end結(jié)束的多個(gè)扇區(qū) SD_GetTotalSec() 獲取SD卡的物理總扇區(qū)數(shù) 4.FAT32文件系統(tǒng)本文文件系統(tǒng)選擇免費(fèi)開源系統(tǒng)znFAT。znFAT的整體結(jié)構(gòu)分為應(yīng)用層層、實(shí)現(xiàn)層、物理驅(qū)動(dòng)層,用戶只需編寫物理驅(qū)動(dòng)層扇區(qū)讀寫等函數(shù)。可供用戶操作的功能包括打開文件、讀取數(shù)據(jù)、創(chuàng)建文件等; 本文中涉及最多的是數(shù)據(jù)的讀取,讀取數(shù)據(jù)可通過“打開文件函數(shù)UINT8 znFAT_Open_File(struct FileInfo *pfi,INT8 *filepath,UINT32 n,UINT8 is_file)”和“讀取數(shù)據(jù)函數(shù)UINT32znFAT_Read_File(struct FileInfoStruct *pfi,UINT32 offset,UINT32 len,UINT8 *pbuf)”來完成。 4.1 歌曲播放 歌曲播放是STC15F單片機(jī)通過文件系統(tǒng)讀取SDHC卡中的MP3文件,將MP3數(shù)據(jù)送給VS1003模塊解碼得到模擬音頻信號(hào)流的過程。同時(shí)通過MP3文件文件目錄項(xiàng)信息解析出文件名(歌曲名);用文件已讀取字節(jié)數(shù)量除以文件總大小得到播放進(jìn)度;在VS1003打入頻譜補(bǔ)丁的前提下從地址0x6 0x7 0xa三個(gè)寄存器中讀出頻譜相關(guān)信息;并逐一顯示。播放過程中,按鍵可以切換歌曲,調(diào)節(jié)音量。歌曲的切換是通過改變系統(tǒng)內(nèi)部為不同歌曲分配的不同序列號(hào)而完成的。由于一方面單片機(jī)RAM有限,無法單次讀取太多MP3數(shù)據(jù)且一次讀取過多會(huì)因耗時(shí)過多而引起播放的卡頓;另一方面,兩次數(shù)據(jù)讀取中間有按鍵檢測(cè),若一次讀取數(shù)據(jù)過多會(huì)降低按鍵的靈敏性。要實(shí)現(xiàn)邊播放邊檢側(cè)按鍵需找到一個(gè)單次讀取數(shù)據(jù)量的平衡點(diǎn),建議選擇300B。 播放過程需解決VS1003驅(qū)動(dòng)問題和相關(guān)數(shù)據(jù)處理。VS1003驅(qū)動(dòng)方法如下: 單片機(jī)對(duì)VS1003驅(qū)動(dòng)是通過SPI通信方式對(duì)VS1003的命令狀態(tài)寄存器進(jìn)行讀取和刷寫而完成的。使用時(shí)須首先對(duì)VS1003硬件復(fù)位,將XRESET拉低并延時(shí);其次向模式寄存器(地址0x0)寫入0X0804;再次設(shè)置時(shí)鐘寄存器(地址0x3)和采樣率寄存器(地址0x5);最后設(shè)置音量且發(fā)送4個(gè)無效數(shù)據(jù)啟動(dòng)數(shù)據(jù)傳輸,4個(gè)無效數(shù)據(jù)的傳輸不能忽略。其中VS1003采用大端模式;音量寄存器的設(shè)置值為0~255,對(duì)應(yīng)音量的最大和最小,編程時(shí)需注意。 數(shù)據(jù)處理偽代碼如下: void Mp3play() { //相關(guān)變量定義 //文件系統(tǒng)及相關(guān)物理設(shè)備初始化 //刷寫播放背景 while(!znFAT_Open_File(&FileInfo,”\\歌曲\\*.mp3”,Sang_Num,1))//打開歌曲目錄下序號(hào)為1的歌曲文件 { while( len =znFAT_Read_File(&FileInfo,F(xiàn)ileInfo.FileCurOffset,400,mp3_buf))//讀出部分MP3數(shù)據(jù) { //MP3數(shù)據(jù)發(fā)送給VS1003 VS_XDCS = 0; for( i=0; i《len; i++) { VS_Send_Dat(mp3_buf[i]); } VS_XDCS = 1; //播放進(jìn)度顯示 //頻譜顯示 } //歌曲名顯示 //按鍵檢測(cè)及處理 } } 4.2 圖片播放 圖片播放類似于歌曲播放,不同在于讀出的圖片文件數(shù)據(jù)發(fā)送給TFT顯示屏模塊進(jìn)行顯示。由于所選顯示屏分辨率為320*480,單次數(shù)據(jù)讀取大小建議為320,則兩次讀數(shù)據(jù)寫屏過程便可寫滿顯示屏的一行,重復(fù)書寫320行即可完成圖片顯示。 4.3 電子書播放 電子書播放的首要問題是漢字顯示。漢字的顯示就是以字模信息為底本在顯示屏上畫圖,以某漢字字模信息為底本畫出的圖即是該漢字。本文選擇的字模庫(kù)是UCDOS操作系統(tǒng)下的漢字字模庫(kù)HZK16.dat。 txt文件存儲(chǔ)信息實(shí)質(zhì)為漢字在字模庫(kù)中的區(qū)碼和位碼。首先從SDHC卡分多次讀出txt文件數(shù)據(jù),其中每個(gè)漢字信息由兩個(gè)字節(jié)儲(chǔ)存,每個(gè)英文字母及英文標(biāo)點(diǎn)由一個(gè)字節(jié)儲(chǔ)存。字節(jié)內(nèi)容為字符在字模庫(kù)中的位置,漢字字模位置可由公式“字模在HZK16中的偏移量=[(區(qū)碼-1)*94+(位碼-1)]*32”算出;接著用“UINT8 znFAT_seek(struct FileInfo *pfi,UINT32 offset)函數(shù)(znfat功能層函數(shù))”讀出16*16漢字的32字節(jié)字模信息并將對(duì)應(yīng)漢字刷寫在顯示屏上。重復(fù)以上漢字的顯示過程便可實(shí)現(xiàn)電子書的播放。建議每次讀取的txt文件大小為200B,需特別注意的是,須檢測(cè)每次讀取最后一個(gè)字節(jié)是不是英文字母或英文標(biāo)點(diǎn),是則讀,若不是或是下個(gè)漢字的區(qū)碼,則不讀,以免造成漢字顯示紊亂。同時(shí),在每次txt文件讀取的間隙進(jìn)行按鍵處理,包括上下頁、上下篇、返回等。 5.實(shí)物調(diào)試及結(jié)果 經(jīng)過制板和元件焊接,完成實(shí)物制作。將SDHC卡格式化為FAT32格式,裝入歌曲、圖片、電子書文件。將內(nèi)存卡裝入卡座進(jìn)行測(cè)試。各方面功能正常,可正常播放320kbs音樂文件、300K 320*480的二進(jìn)制圖片文件、txt電子書文件。MP3文件的播放可以暫停,切換上下去,快進(jìn);圖片的播放可切換上下張;txt的播放可上下翻頁,可切換篇,查看進(jìn)度。但圖片刷寫和電子書刷寫稍稍顯慢,這是受單片機(jī)處理速度所限,但也在可承受范圍。 6.結(jié)語 雖然當(dāng)前電子產(chǎn)品日益豐富,但由于MP3的便攜性和專業(yè)性,相信MP3不會(huì)走出人們的視角,并會(huì)將以功能個(gè)性化作為主打,在不遠(yuǎn)的將來,MP3的功能及設(shè)計(jì)有望實(shí)現(xiàn)個(gè)人定制。本文即是針對(duì)當(dāng)前MP3功能差異化需求現(xiàn)象做出的一次嘗試,設(shè)計(jì)了一款多功能MP3,旨在滿足當(dāng)下人們對(duì)電子產(chǎn)品功能的差異化需求。該設(shè)計(jì)功能強(qiáng)大,成本低,宜于批量化生產(chǎn)。
|