嵌入式MP3播放器设计说明Word文件下载.docx
《嵌入式MP3播放器设计说明Word文件下载.docx》由会员分享,可在线阅读,更多相关《嵌入式MP3播放器设计说明Word文件下载.docx(18页珍藏版)》请在冰点文库上搜索。
接口芯片
MP3解码芯片
D/A转换与音频放大芯片
Flash存储器
方案一
AT89C51SND1中集成
CS4330A+双路运放
K9F5608
方案二
PIC16C64
PDIUSBD12
MAX3507D
DAC3550
方案三
AVR8515
STA013
以数字电路为主的硬件电路设计,一般以芯片为核心来实现系统功能。
单个芯片实现某一部分的主要功能,而多个芯片之间则要有机的协调和配合。
因此,最终选定高集成度的带有CPU、解码器和USB控制器的芯片AT89C51SND1为核心来完成MP3播放器中的设计。
通过AT89C51SND1集成芯片进行解码和USB控制,辅以K9F5608进行存储,并通过CS4330A和双路运放芯片实现D/A转换与音频放大来实现MP3(U盘)的功能。
3、硬件系统设计
(1)嵌入式处理器选型设计
由于AT89C51SND1C芯片中集成有CPU、MP3解码器和USB控制器,可以大大简化硬件设计的复杂度,而且成本不算很高,所以本次课程设计打算采用AT89C51SND1C芯片做为系统的嵌入式处理器。
AT89C51SND1C是美国ATMLE公司针对MP3解决方案新生产的一款芯片,具有C51核,AT89C51SND1C在原有的89C51的基础上增加了MP3解码模块,支持48、44.1、32、24、22.05、16KHz采样频率,左右声道独立的音量控制,重低音、中音、高音均衡控制,重低环绕声效果,辅助数据输出等功能。
还增加了I2C/PCM音频输出模块,串并行接口模块(USB,SPI,IDE),以及其他的外存储器接口模块。
AT89C51SND1C芯片包括8个功能块:
(1)MP3音频解码器:
AT89C51SNDlC可实时解码MP3数据为PCM音频数据,同时也支持MP3其他频率。
解码器也支持其它特性如声音控制、低音放大、辅助数据提取等.
(2)音频输出接口:
允许音频解码位流以不同的格式输出。
(3)通用串行总线(USB)接口:
支持USB存储类的MP3音频解码文件下载;
支持USB固件类升级的在系统编程。
(4)外插闪存卡接口:
该接口适应多媒体卡模式的2.2规.允许移动闪存卡上音频解码文件的存储,这样在应用时可轻易地插入和拔除,此接口亦可用于在系统编程。
(5)IDE/ATAH接口:
该接口允许C2LROM读卡机、压缩闪卡、硬盘等驱动设备的连结。
由一个具有低电平ANSI规的16位双向总线部分组成,具有多存储接口,但只能用于连接C2LROM时的在系统编程。
(6)串行外设接口:
支持主模式和从模式,具有以下功能:
MP3音频解码文件存储到数据闪存的接口;
主机远程控制芯片。
(7)双线控制器:
支持4个标准的主模式和从模式,多主性能。
具有以下功能:
从设备如LCD控制器、音频DAC的连接;
主机远程控制AT89C51SNDlC芯片及在系统编程。
(8)A/D控制器:
2道10位模数转换.具有电源管理、录音等功能。
(2)存储系统设计
AT89C51SNDl芯片具有64K字节的闪存程序空间和4K字节引导闪存以及2304字节的RAM存储器,利用微处理器核对数据流和MP3解码器进行控制,其中地址从F000~FFFF的区域为4K字节的BootFlash,这部分程序是出厂时已经固化的BootLoader代码,它使用DFU(DeviceFirmwareUpdate设备固件升级)协议来更新芯片FLASH存储器中的用户程序。
芯片上电后即执行BootLoader,支持USB接口在线下载固件,这样,不需要硬件烧写器便可下载目标代码到芯片,降低了芯片开发的投资。
AT89C51SNDl芯片用两种不同的空间提供数据存访问。
部空间被映射成3个独立的段:
低128BRAM段、高128BRAM段、扩展的2048BRAM段;
外部空间。
在这里外部RAM扩展我选择了32KB的SRAM芯片HY62WT08081E,存储空间的分配如表3.1所示:
表3.1SRAM存储空间地址分配
地址围
说明
0000h-07FFh
部扩展SRAM
0800h-7FFFh
外部扩展SRAM
表3.2ROM存储空间地址分配
0000h-EFFFh
用户程序空间
F000-FFFFh
BootFlash
外存储采用闪存K9F5608,它共有8个I/O引脚,另外有指令锁存允许线、地址锁存允许线、芯片启用线、读激活线、写激活线、就绪/忙碌输出线、输出缓冲区电源线、设备电源线。
K9F5608闪存拥有32MB存贮量。
它在数据写入和数据读出的时候使数据在I/O缓冲区与存储区之间传递。
K9F5608闪存采用8位I/O线复用方式。
当CE信号线为低电平时,激活WE信号线(即WE为下降沿),则指令,数据,地址都是由8条I/O线写入。
数据锁存是在WE的上升沿。
通过复用8条I/O线,数据,地址,指令分别由CLE,ALE控制传输。
由于K9F5608闪存拥有32MB的存贮量,所以需要24条地址线。
所以需要3个总线周期寻址。
这三个周期分别为行周期,低列周期,高列周期。
对层(page)的读操作和程序操作由于需要指令的输入所以也需要3个周期。
在块的擦写中,需要2个周期。
(3)键盘设计
AT89C51SND1C芯片已经提供了完善的键盘接口,引脚为KIN0、KIN1、KIN2、KIN3。
在这里我直接借用它的键盘接口,直接将开关按键接入到这四个引脚,分别作为STOP、FFW、REW、PLAY/PAUSE按键。
(4)D/A转换和音频处理设计
由于AT89C51SND1C中只带有MP3解码模块,所以需要对MP3解码出来的数字信号进行D/A转换得到模拟信号,然后经过伴音处理芯片TDA7050,输出到耳机。
D/A转换芯片我选用的是CS4330。
这个芯片工作电压为3V或者5V,所以电源提供的3.3V电压并不能完全满足它的要求,这里我加上两个电容C37(0.1uF)和C38(10uF)进行处理,给CS4330提供稳定的电压。
AT89C51SND1C的DOUT引脚直接接到CS4330芯片的SDATA引脚。
TDA7050芯片进行伴音处理,它的最大电压为6V,正常输入电压为3V,这里分别将CS4330的AOL,AOR两个引脚输入接到芯片的IN1-和IN2-两个引脚,芯片处理后,输出OUT1和OUT2为左右声道的声音。
电路原理图如下所示:
图3.1D/A转换和音频处理电路图
(5)电源设计
使用Max1677芯片进行电压转换,将两节七号干电池电压升至3.3V。
连接USB口处:
用AS117把5V电压降至3.3V,并保证3.3V电压的输出。
电源设计图如下所示:
图3.2电源设计图
(6)中断分配
AT89C51SND1C芯片部集成了很多功能部件,也提供了完善的中断机制,表3.2是中断系统信号表,表3.3是本系统用到的中断的中断优先级和中断向量表。
表3.3中断系统信号
信号名称
描述
选择引脚
INT0
外部中断0
P3.2
INT1
外部中断1
P3.3
KIN3:
键盘中断输入
P1.3:
表3.4中断优先级和中断向量表
中断名
优先级
中断向量
1(最高级)
C:
0003h
Timer0
2
000Bh
3
0013h
Timer1
4
001Bh
串口
5
0023h
MP3解码器
6
002Bh
音频接口
7
0033h
双线控制器
9
0043h
A/D转换
11
0053h
键盘
12
005Bh
USB
14
006Bh
(7)RS232接口电路
AT89C51SND1C芯片部集成了UART,在这里我选用了MAX232CWE芯片。
数据由PC机A的串口RS232发出,经MAX232电平转换后,送入芯片。
在芯片中,先由扩展串口UART接收数据,经嵌8051的控制处理。
图3.3RS232电平转换电路设计
4、软件系统设计
主要使用51系统单片机中所使用的C语言来实现MP3源程序设计。
没有实时操作系统的支持。
可以利用单片机开发软件Keil软件方便开发mp3播放器,无需特殊软件平台。
具有U盘功能的MP3程序由两大部分组成:
MP3播放功能和USB通讯功能。
(1)MP3播放功能
MP3播放功能模块的工作分为两个部分:
第一部分是循环播放MP3歌曲,该功能需要首先做一些初始化工作,MP3解码器一旦开始工作,就会一直向CPU请求数据,直至歌曲结束,只有通过键盘操作才会使该功能提前结束。
因为MP3文件的数据量较大,在flash存储器是以页为单位进行存储的,所以MP3的播放程序初始化就是要把该文件的首地址和页数先读出到CPU中,然后CPU可以根据如上数据进行取数据工作。
第二部分则一直在等待中断发生,该程序是与键盘结合起来的,主要用于使用者对播放过程的控制。
键盘操作对MP3播放过程的控制还包括后退、跃进、跳到下一首、音量控制等。
因为整个播放过程的键盘控制功能比较单一,没有键的复合操作,所以程序都很容易实现。
歌曲播放器程序要与键盘和LCD配合起来设计。
程序流程大概可分为:
硬件初始化→获取U盘中mp3歌曲列表→歌曲播放和LCD显示。
MP3播放器部分主流程图如图4.1所示。
歌曲播放和LCD显示是程序的核心部分。
主处理器和LCD从处理器之间通过串口进行通信,以达到歌曲播放与歌词显示的同步以及键盘操作状态的及时刷新。
其程序流程图如图4.2所示。
(2)USB通讯功能
主处理器让USB海量存储设备在批量传输方式下工作,这样共需要3个端点。
0端点:
控制端点。
用于控制传输,PC机通过与端点0相对应的管道来读取设备描述符,完成对设备地址的设置,并完成配置。
此端点为双向数据传输端点。
两个非0端点:
批量传输端点。
这种端点为单向数据传输端点,分别为批量输入端点和批量输出端点。
主处理器通过一个端点中断寄存器(UEPINT)和PC机通信。
如果某个端点完成了相应的操作,就会引发中断。
USB主程序结构框架流程图如图4.3所示。
图4.1MP3播放器部分主流程图
开始
从U盘中查找当前歌曲歌词文件,传给LCD从处理器
从处理器接收文件,查找字库将歌词转换成LCD显示格式,作歌词与显示时间映射表
MP3解码器开始工作,键盘响应中断,LCD同步显示歌词和状态
歌曲结束,准备播放下一首
图4.2歌曲播放程序流程图
图4.3USB主程序结构框架主流程图
(3)文件管理功能
因为该系统还要具有U盘的功能,所以存储器中的文件还要能够让计算机读写和识别,也就是所有的文件还要严格满足计算机文件系统格式的要求。
在所有计算机文件系统中,FAT是比较常用的一种。
一个FAT文件系统卷由4个部分组成:
保留区、FAT区、根目录区、文件和目录数据区。
其中保留区中的第一个分区必须是BPB,也称作“引导扇区”,因为它含有对文件系统进行识别的关键信息,计算机将以此信息识别存储器文件格式,因此十分重要。
FAT区存放的是文件分配表。
操作系统的存储空间是按簇来分配的,簇是操作系统分配的最小存储单元,每个簇在FAT表中占据一个16位的位置,称为一个表项。
同一个文件的数据并不一定存放在存储区的一个连续的区域,往往会分成若干段,像一条链子一样的存放,这种存储方式称为文件的链式存储。
为了实现文件的链式存储,必须准确地记录哪些簇已经被占用,还必须为每一个已经占用的簇指明后继容的下一个簇的簇号,对于一个文件的最后一个簇,则要指明本簇没有后继簇,这些就是由FAT表来存储的。
根目录区存放的是目录项,每个目录项为32个字节,记录一个文件或目录的信息。
目录项所占的空间与目录项的个数有关。
文件和目录数据区是真正存放文件数据的位置,所有数据都按照以上信息分配存储的。
其中比较重要的数据结构设计如下所示:
structBootSecFAT16Str//引导扇区FAT16扩展结构
{
BYTEBS_DrvNum;
BYTEBS_Reserved1;
BYTEBS_BootSig;
DWORDBS_VolID;
charBS_VolLab[11];
charBS_FilSysType[8];
};
structBootSecFAT32Str//引导扇区FAT32扩展结构
DWORDBPB_FATSz32;
//FAT32扇区总数
WORDBPB_ExtFlags;
WORDBPB_FSVer;
DWORDBPB_RootClus;
//根目录开始的簇
WORDBPB_FSInfo;
WORDBPB_BkBootSec;
charBPB_Reserved[12];
structBootSecStr//引导扇区结构
BYTEBS_jmpBoot[3];
BYTEBS_OEMName[8];
WORDBPB_BytesPerSec;
//每扇区字节数512
BYTEBPB_SecPerClus;
//每簇扇区数1248163264128
WORDBPB_RsvdSecCnt;
//保留扇区数0x20
BYTEBPB_NumFATs;
//FAT表个数2
WORDBPB_RootEntCnt;
WORDBPB_TotSec16;
BYTEBPB_Media;
WORDBPB_FATSz16;
WORDBPB_SecPerTrk;
WORDBPB_NumHeads;
DWORDBPB_HiddSec;
DWORDBPB_TotSec32;
unionFATUni
{
structBootSecFAT32StrF32;
structBootSecFAT16StrF16;
}FAT;
structDPTStr//分区表结构
BYTEBootFlag;
BYTECHSBegin[3];
BYTETypeCode;
BYTECHSEnd[3];
DWORDLBABegin;
DWORDCntSec;
structFAT32FSInfoStr//FAT32扩展信息结构
DWORDLeadSig;
BYTEReserved1[480];
DWORDStrucSig;
DWORDFreeCount;
DWORDNxtFree;
BYTEReserved2[12];
DWORDTrailSig;
structFAT32SDirStr//FAT目录结构短文件名
CHARName[11];
BYTEAttr;
BYTENTRes;
BYTECrtTimeTenth;
WORDCrtTime;
WORDCrtDate;
WORDLstAccDate;
WORDFstClusHI;
WORDWrtTime;
WORDWrtDate;
WORDFstClusLO;
DWORDFileSize;
structFAT32LDirStr//FAT目录结构长文件名
BYTEOrd;
BYTEName1[10];
BYTEType;
BYTEChksum;
BYTEName2[12];
BYTEName3[4];
structFAT32Str//FAT32参数表
BYTEClusSecCnt;
//当前簇扇区计数
DWORDCurrentDirectory;
//当前目录入口(簇号)
BYTESecPerClus;
WORDRsvdSecCnt;
BYTENumFATs;
DWORDRootClus;
DWORDClusSec;
//簇开始的扇区
DWORDFATSz;
//FAT表大小(扇区)
DWORDFATSec;
//FAT表开始扇区
DWORDFSISec;
//FSI所在扇区
DWORDFSIFreeCount;
//空闲簇数
DWORDFSINxtFree;
//空闲簇搜索指针
structFCBStr
CHARFileName[12];
//文件名
DWORDSize;
//文件大小
DWORDFirstCluster;
//第一个簇
DWORDLastCluster;
//最近一次读到的簇号
DWORDClusSecCnt;
DWORDByteCnt;
//当前字节计数
structFATStr
DWORDSector;
DWORDFAT[128];
5、课程设计总结
一个嵌入式系统的设计是一个很艰巨的工程,本次课程设计虽然进行了2个多月,但是我仍然感觉到时间很仓促,前期的硬件知识了解花了很多时间,走了很多弯路。
由于条件的限制,我并没有亲手将这些硬件的设计实现,所有的一切都是在纸上谈兵,软件的设计也是凭空想象,在参考了许多设计资料之后,我终于完成了这篇关于嵌入式MP3播放器设计的论文。
对于这篇论文,我本人的实在很难满意,从硬件的设计角度来说,我所选用的芯片都是集成度很高的芯片,市面上用的很多的芯片,当然这并不是什么错误,可是这也局限了我的思维,我始终很难脱离传统的MP3设计,这里的MP3设计已经是2,3年前的技术了,几乎没有加入自己的创新,参考了比较成熟的方案。
而软件的设计部分,虽然程序的流程我大体明白,可是没有动手实际的去做过一个程序,这实在难以服人,不动手永远也不知道问题的关键到底在那里。
虽然上面的话反映出我这篇论文的许多不足,不过我不得不说通过这次嵌入式系统设计课程的学习,我掌握了很多硬件知识,懂得了很多以前我不知道,或者不是很明白的问题,了解了当前实时操作系统设计的一些调度算法,这对我今后的发展很有帮助。
在这里提个建议,如果以后的嵌入式系统设计课程中,能有条件真正让参与课程学习的人做真实的项目,我想那将对嵌入式系统设计的学习有很大的促进。
另外,对于嵌入式系统设计教材的编写,我想就满足大多数人来说,应该侧重于软硬件结合的部分,在讨论一个嵌入式系统时,要将两方面结合起来,软件部分和硬件部分在一个嵌入式系统中的地位,它们是如何配合工作的,我们在设计一个系统时,应当怎样考虑硬件部分与软件部分的分工问题。
以上是我通过学习嵌入式系统设计课程的体会,在此我也要感谢曹老师,是曹老师的认真负责让我从这门课程中学到了嵌入式系统设计的知识,掌握了嵌入式系统设计的方法,这为我以后更深入的学习打下了良好的基础。
6、硬件系统电路图
硬件系统的电路原理图采用Protel9