⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dzb mp3.txt

📁 自制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 + -