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