?? dzb mp3.txt
字號:
上海行知路684-23-502 200442 孔德松 geniuskds@yahoo.com.cn
趕上潮流--自制硬盤MP3
引文
自從第一款MP3隨身聽誕生至今已有6年了,在這么長的一段時間中,MP3從最初的產品不成熟、功能單一、音質不完善,已發展成今天功能多樣,音質日臻成熟的大眾消費類電子產品。MP3憑借其出色的性能優勢大有取代CD、磁帶等傳統音頻設備的勢頭,而其成為新一代音樂播放器的領軍人物也必將是大勢所趨。目前,MP3已經從使用FLASH儲存數據發展到了使用硬盤來存儲數據,各大廠商紛紛推出了使用硬盤作為載體的MP3播放機,如APPLE的IPOD,IRIVER的H10等等。使用硬盤存儲數據最大的優點就是它可以以較低的價格獲得較高的容量,這在對比使用大容量FLASH的MP3時非常明顯。本文所介紹的MP3是基于ATMEL公司的AT89C51SND1C,它被設計用于單芯片MP3方案,比較方便自制。
芯片介紹
AT89C51SND1C主要是由MCU加上了一個硬件的MP3解碼器,結構類似于Sigmatel的35**系列,封裝采用TQFP80,比起BGA更適合DIY。
核心
AT89C51SND1C的MCU是ATMEL的C51,對于這個大家都熟悉的MCU,我想也不用多介紹了吧。正因為使用了C51的核心,所以C51中的兩個定時器,串口等標志性特征也都保留了下來。可以說,只要曾經接觸過C51系列的話,對下文這個MP3就可以很輕松上手了。另外,AT89C51SND1C片內已經集成了64K的內部ROM,一般使用絕對足夠了,減少了外部擴展ROM的麻煩。
特殊寄存器
使用AT89C51SND1C能夠實現單芯片MP3,關鍵就是因為它集成了一個硬件的MP3解碼器,支持LAYER1和LAYER 2所有碼率的MP3。另外還加上了IIC總線,MMC接口,兩個ADC,USB接口等,真正地實現單芯片解決。
下面介紹一下幾個重要的寄存器:
名稱 地址 注釋
MP3CON AAh MP3解碼器工作設定
MP3STA C8h MP3解碼器狀態1
MP3STA1 AFh MP3解碼器狀態1
MP3DAT ACh 存放MP3數據
MP3ANC ADh MP3的額外數據,ID3等
MP3VOL 9Eh MP3左聲道音量
MP3VOR 9Fh MP3右聲道音量
MP3BAS B4h 高音控制
MP3MED B5h 中音控制
MP3TRE B6h 低音控制
MP3CLK EBh MP3時鐘
AUDCON0 9Ah 音頻輸出控制0
AUDCON1 9Bh 音頻輸出控制2
AUDSTA 9Ch 音頻輸出狀態
AUDDAT 9Dh 音頻數據(僅在使用外部數據時使用)
AUDCLK ECh 音頻時鐘
DAT16H F9h 16位傳輸時的高8位數據
KBCON A3h 按鍵控制
KBSTA A4h 按鍵狀態
其他的特殊寄存器請參考AT89C51SND1C的芯片手冊。
外圍設計
硬盤IDE接口
由于考慮到程序的方便性,所以硬盤的連接使用了總線的方式,這樣就可以使用芯片的16位數據傳輸功能了。但要注意的是,這只是在接口上能采用16位寬來傳輸,芯片的內部還是以8位來處理的。當然,由于P0口還是地址和數據的復用端口,加上一片74LS373是少不了的了。
LCD
由于硬盤的大容量,所以儲存的MP3的數量一定不少。這時如果還是使用LED來管理的話就一定很麻煩,所以使用一塊LCD是很有必要的。圖中所使用的LCD是一塊可以通過串口來控制,帶中文字庫的圖形點陣LCD,分辨率為128*64。使用串口控制的可以減少IO口的使用,而且根據實驗,在使用總線方式連接時,LCD會對硬盤的數據傳輸產生干擾影響。而LCD自帶字庫可以在需要顯示中文時,不必再在程序中加入中文字庫,減少ROM的使用。
外接DAC
雖然AT89C51SND1C已經集成了一個MP3的大部分功能,但是DAC還是沒有集成。(在最新的AT89C51SND2C中已經集成了DAC和功率放大)為了和AT89C51SND1C輸出的數據模式匹配,這里選用了CS4334。可以實現96kHz 24bit的精度。
其他
把沒有使用到的接口用插座的形式預留下來,可以在以后方便地來擴展。
程序編譯
程序結構
由于AT89C51SND1C內部已經集成了硬件MP3解碼器,所以最簡化的程序就是MCU從外部媒體讀取MP3文件數據,然后送到經過配置的MP3解碼部分寄存器,然后經由配置后的音頻控制輸出數字信號,最后經過外部的DAC轉換成模擬信號。外部媒體可以是AT89C51SND1C支持的所有類型:如IDE硬盤,ATAPI接口的CD-ROM,MMC卡,FLASH等。這里考慮的是只使用硬盤的情況。
IDE接口
AT89C51SND1C與IDE硬盤連接在這里使用的是總線方式,但并不能像一般的外部ROM來操作,因為AT89C51SND1C與硬盤通信是通過IO寄存器來完成的,訪問硬盤上的寄存器是由CS0(IDE37腳),CS3(IDE38腳),A0 (IDE35腳),A1(IDE33腳),A2(IDE36腳)來譯碼完成的。硬盤的寄存器分為命令寄存器組和控制寄存器組。
1) 數據寄存器,在CS3為1;CS0,A2,A1,A0 為0時選通。通過讀寫該寄存器與硬盤交互數據。
2) 錯誤信息寄存器,在CS3,A0為1;CS0,A2,A1 為0時選通。該寄存器為只讀,代表不同的錯誤信息。
3) 屬性寄存器,在CS3,A0 為1;CS0,A2,A1 為0時選通。該寄存器為只寫,對該寄存器的操作可使硬盤工作在不同的模式。
4) 扇區數目寄存器,在CS3,A1為1;CS0,A2,A0 為0時選通。其值表示需對硬盤讀寫的扇區數目,注意對硬盤的操作都是以扇區位單位,每個扇區包含512個字節,即每次對硬盤的數據讀寫都應該是512個字節的倍數。
5 ) LBA 低8 位地址寄存器,在CS3,A1,A0 為1;CS0,A2 為0時選通。本文中對硬盤的操作是以LBA 模式進行,即硬盤上的存儲扇區映射成連續的邏輯塊地址。要使能LBA 模式,需要對模式寄存器的第6 位置1,現在硬盤幾乎都默認為1。
6) LBA 地址8 - 15 位寄存器,在CS3,A2 為1;CS0,A1,A0 為0時選通。LBA地址共28 位表示。
7) LBA 地址16 - 23位寄存器,在CS3,A2,A0 為高電平;CS0,A1 為0時選通。
8) 模式寄存器,在CS3,A2,A1為1;CS0,A0 為0時選通。其低4位為LBA 地址的24 -27 位,第4位為主從硬盤選擇位,若連接J1,則硬盤設為主設備,相應的第4 位應為0;若斷開J1,則硬盤為從設備,相應的第4 位應置1。
9) 狀態寄存器,在CS3, A2,A1, A0 為1;CS0 為0時選通。該寄存器為只讀。其中第7位若為1,表示硬盤處于忙狀態,第3 位若為1,表示數據準備好,等待傳輸。
10) 命令寄存器,在CS3, A2,A1, A0 為1,CS0 為0時選通。該寄存器為只寫。注意硬盤的命令有帶參數和不帶參數兩種,在具有參數的命令操作時,需要首先寫入所有的參數到各個寄存器,最后寫命令寄存器。
完成一次對IDE硬盤的數據讀取操作基本為:判斷硬盤是否為忙,配置模式,寫入地址,寫入扇區數,寫入讀取命令,讀取數據。
FAT32介紹
為了能夠方便地管理文件,文件系統是必要的,這里采用的是普及度較高的FAT32。它的特點為使用FAT表和簇來管理文件。FAT32 文件系統將邏輯盤的空間劃分為三部分,依次是引導區(BOOT區)、文件分配表區(FAT區)、數據區(DATA區)。FAT32文件系統對數據區的存儲空間是按簇進行劃分和管理的,簇是空間分配和回收的基本單位,即一個文件總是占用若干個整簇,文件所使用的最后一簇剩余的空間就不再使用,而是浪費掉了。FAT32系統一簇對應8個邏輯相鄰的扇區。
在FAT32中,一個目錄項占32字節,可以是文件目錄項、子目錄項、卷標項(僅跟目錄有)、已刪除目錄項、長文件名目錄項等。具體的定義請參考相關文檔。
LCD
選用型號為HZ128-64D20,串行接口控制,128×64點陣漢字顯示液晶模塊,自帶一、二級漢字字庫點陣,一屏可顯示47.5個漢字。
接受命令格式為:
1 byte 1 byte N bytes
0x1b 命令代碼 命令內容
返回格式為:
1 byte N bytes
0x1b 返回內容
具體命令參數請參考其應用手冊。
調試
加工完線路板后不能一次把所有的器件焊上,主要是為分部測試考慮,如果一下都焊上,有的器件有問題,影響整個電路工作,就不好找原因了。應先焊主芯片,以及主芯片運行所必需的一些外圍器件,完成后可以加電,看看主芯片是否正常運行。正常情況下,因為主芯片內部有一個引導程序(相當于PC的BIOS),它運行后連接USB總線能夠被PC發現有新硬件。
這些正常后可以繼續焊完其他的器件。其它部分的硬件需要程序來測試,比如硬盤的讀寫,串口通信,液晶顯示,鍵盤處理等。針對每個部件寫一段最簡單的程序進行測試,確認其能正常工作。
展望
小小的MP3播放機匯聚了多項標準協議,包括MP3標準本身,用于存儲的FAT文件系統,USB通信協議和微軟大容量移動存儲標準。以上以AT89C51SND1C為例介紹了介紹了一種硬盤MP3的硬件和軟件結構。雖然不同的芯片實現MP3播放有差別,但是像FAT32文件系統,IDE接口操作等都是一樣的。
AT89C51SND1C內部還集成了USB HOST和ISP功能。前者可以實現USB接口傳輸數據,當成移動硬盤來使用。后者可以通過USB接口來下載程序,可以方便地實現固件升級。這樣如果當成仿真機來使用的話可比一般的仿真機方便許多了。使用的圖形LCD只用來顯示文件名太小用它了,完全可以根據自己的喜好加入圖形顯示。
AT89C51SND1C還支持CD-ROM,MMC,FLASH等外部媒體,有興趣可以方便地擴展,真正體現DIY的樂趣!
我知道不少朋友單是通過這篇文章恐怕還很難完全掌握所有的細節,真正制作起來可能還存在著這樣那樣的疑問。如果讀者制作中有什么疑惑的地方可以聯系我,EMAIL:geniuskds@yahoo.com.cn很希望能和大家一起討論MP3,MP4等產品的開發。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -