新闻  |   论坛  |   博客  |   在线研讨会
基于AT89C51SND1C单片机的MP3硬件播放器的实现
tongxin | 2009-04-13 13:56:15    阅读:5146   发布文章

摘要: 采用美国ATMEL公司的AT89C51SND1C芯片为主控制器,三星公司的闪存芯片K9F5608为外部存储器进行MP3硬件播放器设计与实现。重点研究外部存储去flash的存储结构,具体的指令操作。在flash的相关源程序编写中,主要有闪存操作的头文件定义和具体的源程序包括有产品认证模式定义,flash复位函数定义,读取闪存中某一扇区(page)的程序。
%A
%A 关键词:MP3播放器;FLASH;AT89C51SND1C
%A
%A 1.        引言
%A 自从1988年以来,MPEG承担了视频和音频压缩技术的标准化工作。1992年11月ISO发布了ISO/IEC 11172标准,即MPEG-1标准。MPEG-1由三部分组成:系统、视频和音频。音频部分的制定是以MUSICAM(3) (Masking paternUniversal Subband Integrated Coding and Multiplexing)屏蔽模式通用子带编码复用)和ASPEC(4) (Adaptive Spectral Perceptual Entropy Coding,自适应谱感觉熵编码)两种算法为基础的。编码针对采样率为32k,44.1k和48k的16位PCM音频信号,支持单声道、双声道、立体声和联合立体声四种模式。编码后的码率在32--192kbps(单声道)或64-384kbps(双声道或立体声)范围内。
%A MPEG-1音频标准分为3层,以满足不同应用的需要。ISO/IEC 11172标准第三部分规定了三个不同层次的音频压缩算法:Layer 1, Layer II和Layer III,对应不同的应用要求,并具有不同的复杂度。MP3是对MPEG-1 Layer III的简称。这三层编码方案作为ISO/IEC MPEG的音频标准,有着广泛的应用价值。其中,Layer I是MUSICAM算法的简化方案,主要用于编码速率为192kbps的应用场合,Layer II的目标编码速率为128kbps,己被用于DAB和VCD的伴音编码,Layer III算法最为复杂而压缩性能比最好,目标编码速率为64kbps,压缩比达12倍,特别适合应用于因特网上的传输和存储。在11172-3中,只对编码器的输出码流格式和解码过程作了标准化,而其编码过程没有标准化,可以使用多种方案进行编码。便携式播放器mp3便是在上述算法出现之后而产生的。
%A 目前,便携式播放器虽然在市场上的销售呈上升趋势,但它的功能还需要进一步完善,使其能够给消费者提供更多的,更完善的功能。现在便携式播放器的发展方向是提高便携性、实现多功能化和对应多种方式。其中,所谓对应多种方式是指对应多种音频编码方式和知识产权管理技术。把未来便携式播放器产品可以分为两大发展方向,一种是专用便携式播放器,另一种是多功能便携式播放器。专用便携式播放器发展方向是追求小、轻便和薄型化。这种便携式播放器,小到邮票大小,最大也超不过信用卡的外形尺寸。多功能便携式播放器,它不仅具备音频功能,而且嵌入信息处理功能。例如,融合MP3播放器、移动电话、PDA、电子邮件终端和汽车导航等为一体的便携式播放器。
%A
%A 2.部分选用芯片简介
%A 2.1  AT89C51SND1C是美国ATMLE公司针对MP3解决方案新生产的一款芯片,具有C51内核,64K字节的闪存程序空间和4K字节引导闪存以及2304字节的ROM存储器,利用微处理器核对数据流和MP3解码器进行控制,并允许通过嵌入的4K字节闪存引导区进行在系统编程。AT89C51SND1C在原有的89C51的基础上增加了MP3解码模块,I2C/PCM音频输出模块,串并行接口模块(USB,2线,SPI,IDE),以及其他的外存储器接口模块。适用于MP3播放器,PDA,摄像机,带MP3手记,汽车音响,家庭影院等嵌入式系统。
%A AT89C51SND1C芯片包括8个功能块,如下图1所示。(1)MP3音频解码器:AT89C51SNDlA可实时解码MP3数据为PCM音频数据,同时也支持MP3其他频率。解码器也支持其它特性如声音控制、低音放大、辅助数据提取等.(2)音频输出接口:允许音频解码位流以不同的格式输出,并可兼容PCM和I’C格式。(3)通用串行总线(USB)接口:支持USB存储类的MP3音频解码文件下载;支持USB固件类升级的在系统编程。(4)外插闪存卡接口:该接口适应多媒体卡模式的V2.2规范.允许移动闪存卡上音频解码文件的存储,这样在应用时可轻易地插入和拔除,此接口亦可用于在系统编程。(5)IDE/ATAH接口:该接口允许C2LROM读卡机、压缩闪卡、硬盘等驱动设备的连结。由一个具有低电平ANSI规范的16位双向总线部分组成,具有多存储接口,但只能用于连接C2LROM时的在系统编程。(6)串行外设接口:支持主模式和从模式,具有以下功能:MP3音频解码文件存储到数据闪存的接口;主机远程控制AT89C51SNDlA芯片;在系统编程。(7)双线控制器:支持4个标准的主模式和从模式,多主性能。具有以下功能:从设备如LCD控制器、音频  DAC  的连接;主机远程控制AT89C51SNDlA芯片及在系统编程。(8)A/D控制器:2道10位模数转换.具有电源管理、录音等功能。
%A
%A
%A
%A
%A 2.2 闪存K9F5608共有8个I/O引脚,另外有指令锁存允许线、地址锁存允许线、芯片启用线、读激活线、写激活线、就绪/忙碌输出线、输出缓冲区电源线、设备电源线。K9F5608闪存拥有264兆比特的存贮量。它的结构是由65536层(page)组成,每层有528个字节即528个列(row)。每一个存贮块(block)由32层组成。其结构图2所示。一个528字节的数据寄存器连接到存储区域。它在数据写入和数据读出的时候使数据在I/O缓冲区与存储区之间传递。读操作在层的基础上进行,擦写操作在块的基础上进行。K9F5608闪存共有2048个块,也就是有2048个擦写单元,每单元有16KB的存储量。K9F5608闪存采用8位I/O线复用方式。
%A 当CE信号线为低电平时,激活WE信号线(即WE为下降沿),则指令,数据,地址都是由8条I/O线写入。数据锁存是在WE的上升沿。通过复用8条I/O线,数据,地址,指令分别由CLE,ALE控制传输。
%A
%A
%A
%A 由于K9F5608闪存拥有264兆比特的存贮量,所以需要24条地址线。所以需要3个总线周期寻址。这三个周期分别为行周期,低列周期,高列周期。对层(page)的读操作和程序操作由于需要指令的输入所以也需要3个周期。在块的擦写中,需要2个周期。
%A
%A 3. 部分电路图
%A
%A AT89C51SND1C连接电路图如图3所示,闪存连接电路如图4。
%A
%A
%A
%A
%A
%A 4.与闪存相关的部分源代码
%A 4.1产品的认证模式函数定义
%A unsigned int Check_Flash_Id(void)
%A {int i;
%A unsigned int id;
%A FC_CMD;         /*指令输入使能*/
%A rK9F5608XDATA = 0x90;   /*指令0x90(读ID的指令)输入到指令寄存器*/
%A FC_ADDR;         /*地址输入使能*/
%A rK9F5608XDATA = 0;         /*将地址设为0x00*/
%A FC_DATA;            /*使芯片进入数据输入和数据输出状态*/        
%A for(i=0;i<5;i++);                /*wait 100ns  */    
%A id = rK9F5608XDATA <<8;    /*将I/O读出的数据左移8位赋给id*/
%A for(i=0;i<5;i++);                /*wait 100ns   */
%A id += rK9F5608XDATA;    /*   将I/O新读出的数据作为低8位,*/
%A                               /*与id的值重新赋给id*/
%A FC_INACTIVE;        /*使芯片处于禁用状态*/
%A return id;              /*将id的值返回给函数*/
%A }
%A 产品的认证模式时序图如图5所示。
%A 4.2   flash 复位函数
%A void Flash_Reset()                
%A { int i;
%A FC_CMD;        /*指令输入使能*/
%A rK9F5608XDATA = 0xff;          /*复位指令(reset command )ff*/
%A for (i=0;i<3000;i++);              /*延时delay */         
%A }
%A
%A
%A
%A
%A 4.3  读取FLASH的page
%A void ReadPage(unsigned int block,unsigned int page,unsigned char *pPage)
%A {
%A int i;
%A unsigned int blockPage = (block<<5) + page;  
%A            /*块地址为低11位有效(高位输入时应为0),左移5位后变*/  
%A /*为块地址,附加层地址5位(低5位)以确定具体的层地址*/
%A FC_CMD;               /*指令输入使能*/
%A rK9F5608XDATA = 0x00;     /*指令0x00(Read 1)输入到指令寄存器*/
%A FC_ADDR;                 /*执行地址输入使能*/
%A rK9F5608XDATA = 0;         /*第1周期的列地址为0x00*/
%A rK9F5608XDATA = blockPage & 0xff;
%A                       /*第2周期的行(row)地址位具体层(page)的低8位地址*/
%A rK9F5608XDATA = (blockPage>>8) & 0xff;
%A                      /*第3周期的行(row)地址位具体层(page)的高8位地址*/
%A for(i=0;i<3;i++);  
%A FC_DATA;    
%A WAITRB;        //random access ,wait max. 10us
%A for(i=0;i<SectorLength;i++) {*pPage++= rKM29UXDATA;}
%A        /*此时处于数据输出状态(re的下降沿),rKM29UXDATA*/
%A       /* 的内容即是被读出的数据,将此数据循环送入到指针pPage*/
%A /*所指向的单片机的存储单元。*/
%A FC_INACTIVE; /*使芯片禁用使能*/
%A }
%A 读取FLASH的page时序图如图6所示。
%A
%A 5.总结
%A    本设计是基于AT89C51SND1C单片机实现媒体播放器(mp3)的硬件实现和软件编程。在硬件设计中,要用到软件Protel来绘制电路图和生成PCB电路图。C语言是一个通用的编程语言,它提供高效的代码,结构化的编程和丰富的操作符。C语言不是为任何特殊应用领域而设计。它一般来说限制较少,可以为各种软件任务提供方便和有效的编程。许多应用用C比其他语言编程更方便和有效。所以在软件设计中,主要通过C语言编写源程序。
%A
%A
%A
%A
%A 参考文献
%A [1].余永权 《ATEML89系列单片机应用技术》 北京航空航天大学出版社,2002年4月第一版
%A [2] 谢淑如,郑光钦,杨渝生  《Protel PCB 99 SE电路板设计》 清华大学出版社,2001年第一版
%A [3]马 驰、崔 向、唐 建.《MP3 播放器解码功能的实现》.沈阳工业学院,2003年1月
%A [4] 马延飞  《MPEG音频第Ⅲ层编码的算法研究与硬件实现 》  西安电子科技大学,2002年
%A [5] 吴绍荣  《MPEG-2编码系统研究与设计》  电子科技大学,2002年
%A
%A
%A%A
%A

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
最近文章
寂寞如雪
2009-05-19 19:01:18
夜色花
2009-05-19 18:56:22
没有爱可以重来
2009-05-19 18:54:59
推荐文章
最近访客