隨著(zhù)電子技術(shù)的發(fā)展,MP3播放器向著(zhù)大容量,小型化發(fā)展。但播放器與存儲器一體化的設計使得MP3難以擴充容量以容納更多的歌曲。將播放器與存儲器分離是MP3目前發(fā)展的另一方向。本文介紹了一種利用AVR控制以HOST USB方式讀取U盤(pán)的音樂(lè )文件并將其解碼的播放的解決方案。本方案同時(shí)具備讀取音樂(lè )標簽,U盤(pán)電子書(shū),貪吃蛇游戲等功能,具有商業(yè)價(jià)值。 1 系統功能簡(jiǎn)介 本設計主要完成對存儲在U盤(pán)中的音樂(lè )及文本等信息的讀取操作,能夠完成U盤(pán)內MP3音樂(lè )數據的播放及標簽信息的顯示,實(shí)現播放器與存儲器分離,并在此基礎上完成電子書(shū),貪吃蛇游戲等功能。 2 系統芯片選擇 本設計MCU選擇ATMEL公司的ATmega64作為主控芯片。ATmega64是高性能、低功耗的8位AVR微處理器,具有先進(jìn)的RISC結構。64K字節系統內可編程Flash,2K字節EEPROM,4K字節片內SRAM,64個(gè)引腳,53個(gè)可編程I/O口,具有可工作于主機/從機模式的SPI串行接口音頻解碼芯片選擇芬蘭VLSI公司生產(chǎn)的VS1003。VS1003是一款具有MP3/WMA/MIDI音頻解碼及ADPCM編碼功能的芯片,它包含一個(gè)高性能,低功耗的DSP內核VS_DSP,工作數據存儲器,為用戶(hù)應用提供5KB的指令RAM和0.5KB的數據RAM。一個(gè)串行的控制和數據接口,4個(gè)通用I/O口,一個(gè)UART,一個(gè)高質(zhì)量可變采樣率的ADC和立體聲DAC,一個(gè)耳機放大器和地線(xiàn)緩沖器。 USB通信芯片選擇CH375,CH375是一個(gè)USB總線(xiàn)的通用接口芯片,支持USB-host主機方式和USB-DEVICE/SLAVE設備方式。在本地端,CH375具有8位數據總線(xiàn)和讀、寫(xiě)、片選控制線(xiàn)以及終端輸出,可以方便地掛接到單片機等控制其的系統總線(xiàn)上。內置控制傳輸的協(xié)議處理器,簡(jiǎn)化常用的控制傳輸。支持低功耗模式。 3 系統硬件電路設計 3.1 MP3解碼芯片與ATmega64的硬件連接 VS1003使用同步串行總線(xiàn)SPI通信,ATmega64內部集成有SPI總線(xiàn)控制器,故將SCLK,MOSO,MOSI直接與MCU的SPI控制引腳相連接即可。另外將XCS,XRES,DREQ,XDCS分別于PB4~PB7相連接,即可完成對解碼芯片的控制。 3.2 CH375與ATmega64的硬件連接 本設計中,CH375工作在HOST模式下,八位雙向數據總線(xiàn)D0~D7分別于MCU的PD0~PD7相連接,實(shí)現數據與命令的并行傳輸。A0,RD,WR,INT,CS分別于PC3~PC7相連接。這種連接可以很方便的將CH375掛接到各種MCU系統總線(xiàn)上。 3.3 彩屏與ATmega64的硬件連接 彩屏與MCU實(shí)現并口數據命令傳輸,將其16位數據命令口與MCU的PA0~PA7以及PE0~PE7相連接,另外將彩屏的片選CS,數據命令選通RS,寫(xiě)選通WR,讀選通RD,及復位RST分別于MCU的PG0~PG4相連接。 系統啟動(dòng)后,在A(yíng)Tmega64的控制下,首先將數據從U盤(pán)中取出,如果是音頻數據,則直接送入VS1003進(jìn)行解碼,VS1003將接收到的數據解碼后轉換為模擬音頻后,通過(guò)功率放大器輸出。若收到的是文本數據,則進(jìn)行字符格式轉換,并在液晶屏上顯示出來(lái)。 4 系統軟件設計 系統軟件的設計主要分為VS1003的驅動(dòng)程序,CH375的驅動(dòng)程序,彩屏的驅動(dòng)程序以及整體的整合。(分別為:vs1003.cch375.c TFT_ili9320.c mp3_play.c ) 4.1 FAT文件系統管理 一個(gè)FAT文件系統包括四個(gè)不同的部分。保留扇區,FAT區,根目錄區,數據區。其中保留區中的第一個(gè)分區必須是BPB,也稱(chēng)作“引導扇區”,因為它含有對文件系統進(jìn)行識別的關(guān)鍵信息,計算機將以此信息識別存儲器文件格式,因此十分重要。 FAT區包含有兩份文件分配表,這是出于系統冗余考慮,盡管它很少使用,即使是磁盤(pán)修復工具也很少使用它。它是分區信息的映射表,指示簇是如何存儲的。根目錄區是在根目錄中存儲文件和目錄信息的目錄表。在FAT32下它可以存在分區中的任何位置,但是在早期的版本中它永遠緊隨FAT區域之后。數據區是實(shí)際的文件和目錄數據存儲的區域,它占據了分區的絕大部分。 4.2 U盤(pán)的讀取 由于CH375內置控制傳輸的協(xié)議處理器,因此讀取U盤(pán)可以通過(guò)控制CH375的寄存器來(lái)進(jìn)行U盤(pán)的讀取。CH375以C語(yǔ)言子程序庫提供了USB存儲設備的文件級接口,這些應用層接口A(yíng)PI包含了常用的文件級操作,可以移植并嵌入到常用的單片機程序中。CH375的U盤(pán)文件級子程序庫具有以下特性:支持常用文件系統,支持多級子目錄,可以支持小寫(xiě)字母或者長(cháng)文件名,支持文件打開(kāi)、新建、刪除、讀寫(xiě)以及搜索等。CH375的文件級子程序庫需要大約600Byte的隨機存儲器RAM作為緩沖區。文件級子程序庫的所有API在調用后都有操作狀態(tài)返回,但不一定有應答數據。主要子程序如下: (1)初始化CH375芯片: CH375Init; ( 2 )打開(kāi)文件:CH375Fileopen;(3)枚舉或者搜索文件:CH375FileEnumer;(4)關(guān)閉文件: CH375FileClose; (5)以扇區為單位從文件讀數據:CH375FileReadX; ( 6 )以扇區為單位向文件寫(xiě)數據:CH375FilewriteX。 4.3 VS1003的讀寫(xiě)控制 VS1003的寄存器用下列順序讀出,如圖二。首先將XCS片選拉低以選擇芯片,再通過(guò)SI線(xiàn)發(fā)送8位的讀操作碼(0x03)和8位的地址。在地址被VS1003芯片讀入后,SI上的數據將被忽略。相應地址的16位數據將從SO線(xiàn)移出。當數據全被移出后XCS需拉高。 VS1003的寄存器須按以下的順序寫(xiě)入,如圖三。首先將XCS片選拉低,再通過(guò)SI線(xiàn)發(fā)送8位的讀操作碼(0x02)和8位的地址。隨即發(fā)送16位的數據字。當最后一位被移入且最后的時(shí)鐘已發(fā)送,必須將XCS拉高以完成寫(xiě)操作。 4.4 MP3的播放 當執行音樂(lè )播放程序時(shí),ATmega64芯片首先從U盤(pán)中預取標簽信息,經(jīng)過(guò)分析,由Unicode到GBK編碼的轉換,再取字模,最終在LCD上顯示;之后開(kāi)始取音樂(lè )文件的數據,送到VS1003芯片,VS1003開(kāi)始解碼并在音頻接口發(fā)出音頻信號。當按下暫停鍵時(shí),暫停取數據,上一曲、下一曲時(shí)跳出取數據循環(huán)。 4.5 其他軟件設計 1.音樂(lè )標簽的軟件設計。本系統可以讀取的音樂(lè )的標簽有ID3V1、ID3V2,當要區分這兩個(gè)標簽時(shí)可以用程序讀取音樂(lè )文件的開(kāi)頭和結尾,利用其標志符“ID3”、“TAG”來(lái)區分其具有哪一個(gè)標簽。但是標簽中的文字編碼也包括UNICODE、GBK,具體的區分也要查找相關(guān)的標志符。 2.文檔閱讀的軟件設計。GBK的編碼中會(huì )帶有ASC碼,而GBK碼占兩個(gè)字節,ASC碼占一個(gè)字節,如果在取文件過(guò)程中恰好取到GBK碼的每二個(gè)字節,那么以后的內容在LCD上的顯示將全部為亂碼,特別是在向上翻頁(yè)的時(shí)候(文檔內容在LCD上的顯示還要判斷回車(chē)以及其它字符,這樣就會(huì )造成每一頁(yè)具體讀了多少字節,顯示了多少字節都不一樣)。最終解決辦法是用一個(gè)數組記錄每一次翻頁(yè)共顯示了多少字節(不是讀取了多少字節)。 3.在TFT上顯示字符和漢字。對于TFT液晶,沒(méi)有具體的字模存儲在控制芯片中,只能是整體系統的存儲。而且漢字的Unicode和GBK編碼并不相同。筆者把具體的字庫存儲在了要讀取的優(yōu)盤(pán)根目錄下(對應的字模文件是ST16.BIN KT16.BIN)。對于Unicode到GBK的轉換,筆者把轉換文件也存儲在了優(yōu)盤(pán)的根目錄下面(對應文件是UNITOGBK.SYS)。 5 結束語(yǔ) 經(jīng)測試,本設計能夠讀取并播放U盤(pán)中MP3文件,音質(zhì)清晰悅耳,無(wú)延時(shí)和跳幀現象。能夠讀取U盤(pán)中txt文檔以實(shí)現電子書(shū)功能。內置的貪吃蛇游戲也可以順利實(shí)現。由于本設計采用播放器與存儲器分離的方式,因此存儲空間不受限制,自由度較大,這比一般MP3播放器更具有優(yōu)勢。 |