基于ISP1362的U盘MP3播放器设计

2007-02-06 13:35:42来源: 电子设计应用

播放器与存储器的一体化设计对MP3播放器的便携性起了关键性的作用,但与此同时,它又带来了很多新的问题。比如存储容量固定,如果想装下更多的歌曲只能去购买新的产品,造成了巨大的浪费。另一方面,一体化又限制了MP3播放器在其它领域的应用,比如汽车电子等。于是,将存储器与播放器分离,成为MP3的另一发展方向,也是开发这款U盘MP3播放器的意义所在。

主要芯片简介

AT89C51SND1是ATMEL推出的基于8位C51 MCU内核的MP3解码器芯片。它内置MP3硬件解码器,支持48kHz、44.1kHz、32kHz、24kHz、22.05kHz及16kHz采样频率,具有重低音、中音、高音均衡控制和重低环绕声效果。它可以适应市场上不同DAC的可编程音频输出接口,兼容PCM和I2S格式。内置2304B RAM和64KB Flash程序空间,方便用户增加复杂的功能。并通过内置锁相环提供MP3和音频时钟以及USB时钟。
要想读取U盘,USB主机控制器必不可少。为了将来进一步升级系统,本文选用了功能强大的USB-OTG芯片ISP1362。ISP1362在单芯片上集成了OTG控制器、高级主机控制器和外设控制器。ISP1362的OTG控制器完全兼容USB2.0以及On-The-Go Supplement 1. 0协议,主机和设备控制器兼容USB 2. 0协议,并支持12Mbps的全速传输和1.5Mbps的低速传输。

图1 系统框架图

系统硬件结构

整个系统的搭建围绕AT89C51SND1进行,如图1所示。由于其内部具有硬件解码器,因此电路构成并不复杂。首先由单片机控制ISP1362,将U盘中的MP3文件读取出来,送到硬件解码器进行解码。解码之后由数字音频接口将数字信号传送至音频DAC CS4330,转换之后产生音频信号。由于DAC输出的信号功率有限,在后端又加入了运算放大器,经过放大之后的信号就可以直接输出给音箱或耳机等设备了。

AT89C51SND1是基于51内核的单片机,因此,最小系统结构非常简单。除了传统单片机的晶振和复位电路之外,还有PLL滤波电路和USB接口电路,如图2所示。



图2 PLL滤波电路及USB接口电路

ISP1362是16位总线结构,不能直接和8位单片机接口。因此,将单片机的P0和P2口一同作为数据总线接至ISP1362的16位总线上,将 、、分别接到单片机的P3.4、P3.7和P3.6,通过仿真读写时序控制它的数据读取等操作。

除了这些基本的总线连接,ISP1362还需要连接一些特殊的控制引脚:

A0:用于决定控制器处于命令状态还是数据状态:0表示数据状态,1表示命令状态;
A1:用于决定控制器工作于主机还是设备控制模式:0表示处于主机控制(HC) 模式;1表示处于设备控制(DC) 模式。
接至MCU的P1.5。P1.5=0时表示处于OTG工作状态,P1.5=1则表示处于非OTG状态。

INT1_USB、INT2_USB分别接至MCU的INT0和INT1引脚,用以产生中断。

ISP1362有两个USB端口,分别是OTG端口和主机端口。因为OTG端口包含了主机功能,所以系统中使用OTG端口来连接U盘。根据USB2.0协议,USB主机需要2个15k降南吕缱瑁玂TG端口同时又可作为设备端口使用,而设备是没有下拉电阻的。因此ISP1362提供了“软连接”机制,通过内部的寄存器来控制电阻的连接与否。所以在硬件设计时并不需要在外部加下拉电阻。而 为开漏输出,因此加入了一个10kW的上拉电阻R14_USB。如图3所示。

图3 OTG端口电路图

AT89C51SND1C及ISP1362的初始化

在开始播放MP3文件之前,需要一系列初始化操作。这些操作是通过设置
AT89C51SND1C及ISP1362内部的相关寄存器来完成的。

AT89C51SND1C的初始化

为了正常播放MP3文件,首先要对主控制器AT89C51SND1C进行以下几方面的设置。

锁相环初始化

MP3解码器和音频输出接口使用的都是内部锁相环提供的时钟。锁相环的初始化是通过设置PLLCON、PLLNDIV和PLLNDIV来完成的。其输出频率的计算公式为:PLLclk=OSCclk×(R+1)/(N+1)。

MP3解码器初始化

MP3解码器的初始化需要对MP3CON和MP3CLK进行设置。MP3解码器分缺少数据中断和校验中断两类中断,在MP3CON中可以对其进行设置。简单处理可以采用查询标志位方式,避免使用中断。MP3解码器对时钟有一定的要求,MPEG I格式的MP3数据要求最低时钟为21MHz,MPEG II格式为10.5MHz。该时钟计算公式为:MP3clk=PLLclk/(MPSD4:0+1)。

音频输出接口初始化

得到两个声道串行数据前需先对音频输出接口的AUDCON0和AUDCON1中的相关部分进行正确的设置。配合DAC芯片CS4330,其设置如下:输出32位数据格式(DSIZ=1),声道选择信号中的高电平为左声道(POL=1),选择256·Fs的数据速率(HLR=0),选择MP3解码器的输出为数据源(SRC=0),18位数据右对齐(JUST4:0=14)。为了听到正常的声音,还需根据MP3的采样率设置MP3CLK来得到正确的音频输出接口的时钟,该时钟的计算公式为:AUDclk=PLLclk/(AUCD4:0+1)。

按键初始化

要实现播放MP3的人机交互功能,就需要键盘的支持,AT89C51SND1C专门提供了4个中断的按键接口,当这些中断被使能后就可以简单地通过读取KBSTA得到按键的状态。按键初始化的时候只需要在KBCON开启相应接口的中断,再开启总中断的EA即可。

ISP1362的设置

为了能正确地从U盘中读取MP3文件,首先要对USB控制芯片ISP1362进行以下几方面的设置。

数据缓冲区的划分

ISP1362内部有4KB的数据缓冲区,可划分为4部分以供USB的四种传输方式使用。其中同步传输为双缓冲,占用ISTL0和ISTL1,一般二者大小是一样的。中断传输占用INTL。控制传输和块传输共用ATL。分别通过HcISTLBufferSize 、HcINTLBufferSize和HcATLBufferSize 来设置ISTL、INTL和ATL的大小。

中断的设定

这里的中断并不是指USB中的中断传输,而是传统意义上的硬件中断。如果不使用中断,则应该将其关闭,具体操作为将HcuPInterruptEnable置0,而 HcInterruptDisable中所有位都置1。

ATL 缓冲的设定

控制传输是任何USB设备都有的数据传输类型,而在ISP1362中,它占用的是ATL缓冲区,因此对ATL 缓冲的设定是必不可少的。具体的操作是设置以下几个寄存器:HcATLPTDSkipMap、HcATLLastPTD、HcATLBlkSize、HcATLPTDDoneThresholdCount和HcATLPTDDoneThresholdTimeOut。

其它相关寄存器

ISP1362还有一些关于硬件的设置,比如端口设定以及过流保护等。除此之外,还需要确定一个帧所发送的最大数据量等信息,这些操作通过设定HcHardwareConfiguration和HcFmInterval两个寄存器完成。

读取U盘

U盘在使用USB传输时使用的是块传输方式,操作相对比较复杂。除了最基本的USB协议之外,还需要实现许多其它相关协议,比如Mass Storage、Bulk-Only、SCSI-2、UFI等。但对USB接口芯片ISP1362而言,需要完成的仅是按照协议规定进行数据的传送。

相关描述符和设置

U盘一般使用Mass Storage协议进行通信。然而在使用Mass Storage协议通信之前,应首先关注传输协议和U盘的端点描述符。

Mass Storage中的传输协议常用Bulk_Only,然而在这种传输方式下又可分多种指令集,而U盘常用SCSI指令集。 Bulk_Only的传输方式在通信时应首先读取端点描述符来获取Bulk_In和Bulk_Out这两个端点号,之后才能进行USB的正常通信。

FAT文件系统

由于现在U盘的容量普遍较大,对U盘的操作往往都是按块来进行的,其大小一般均为512B。但实际U盘上的数据是以文件系统的方式来存储的,目前U盘常用的文件系统有FAT16和FAT32。而这两种文件系统在很多内容方面都是相同的,因此,在实际访问中可以对其简单的区分,然后分别进行不同的操作,就能实现对不同文件系统的U盘进行访问,提高通用性。

播放MP3文件

播放一个MP3文件需要经过以下几个环节:解析U盘的文件系统,获取MP3文件的信息,从U盘中读取指定的MP3文件,将文件中的数据送至AT89C51SND1C内嵌的MP3解码器,解码后的数据经音频输出接口调整格式后输出两个声道的串行数据,再经过DAC芯片CS4330将数字信号转换为模拟信号,最后经集成运放MC33202将信号放大输出。

初始化相关芯片

对主控器AT89C51SND1C和USB接口芯片ISP1362的初始化是至关重要的,除了上述一些需要初始化设置的地方,还应注意单片机和ISP1362复位要同步。另外还应对MP3解码器音量控制的相关寄存器进行初始化,默认情况下它们都是0,即处于静音状态。

获取MP3文件中的数据

从U盘中获取MP3文件是一个相对烦琐的过程,首先应能按照USB的相关协议读取U盘上指定块的数据,之后还要根据得到的数据解析文件系统,从而得到指定MP3文件的起始块地址,然后通过查FAT表的方法得到后继的数据。并且还应将得到的数据存储在AT89C51SND1C内部开设的数据缓存中,等待MP3解码器缺少数据时使用。由于MP3解码器内部的数据缓存较小,因而就要求获取MP3文件数据的时间要尽可能的少,这就需要该部分的代码要尽量精简。

MP3解码器解码

启动MP3解码器之前应先对读取来的MP3数据的帧头进行解析,根据解析得到的采样率设置音频输出接口的时钟。从U盘中读取的数据也应先暂存在AT89C51SND1C内部开设的数据缓存中,开始播放之前需要先通过MP3DAT向MP3解码器的数据缓存中送满1KB的数据,之后待MP3解码器出现缺少数据的状态(MP3STA1寄存器中的MPFREQ=1),再将AT89C51SND1C内部数据缓存中的数据写入MP3解码器中。当数据缓存中的数据全部用完后,就应立即再次读取U盘,如此往复直到整个MP3文件都播放完毕为止。
  
结语

本系统很好地实现了对U盘的识别和读取,突破了传统MP3播放器中解码器与存储器一体化的限制,只需使用更大容量的U盘就可以在原有硬件基础上增加存储容量,在音响和汽车电子方面具有良好的应用前景。

参考文献

1. Atmel Corporation. Single-Chip Flash Microcontroller with MP3 Decoder and Human Interface, 2003
2. Philips Electronics. ISP1362 Single-Chip Universal Serial Bus On-The-Go controller, 2004
3. USB Implementers Forum, inc. On-The-Go Supplement to the USB 2.0 specification Revision 1.0a, 2003

关键字:存储  解码  音频  传输

编辑: 引用地址:http://www.eeworld.com.cn/xfdz/2007/0206/2729.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
存储
解码
音频
传输

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved