基于优盘存储介质的MP3播放器设计

时间:2011-07-18

  引言

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

  ① 外置独立的MP3硬解码芯片。此种方案的好处是可以使用众多的MCU,可根据需要任意选择。硬解码芯片典型的有VS1011B、STA013等芯片。

  ② MCU内置硬解码模块。典型的芯片有Atmel公司的AT89C51SNDI等芯片。

  ③  使用功能强大的MCU进行软解码,如使用DSP或是高性能的ARM。此种方案较为灵活,通过软件升级即可实现产品的升级。

  随着USB技术和闪存技术的发展,优盘已经成为一种大众化的电子产品被广泛使用,但是一般只用作PC机的移动存储设备。在消费电子领域,如MP3,MP4等采用Flash存储芯片的设备,优盘还有很大的应用空间。本文研究的一种方案是在上述MP3设计方案①的基础上,外扩优盘读写电路,使存储介质使用普通的优盘。这样可以解决普遍使用的优盘只能作为PC外设存储数据用的问题,使U盘的使用范围扩展到MP3上。除此之外,更可以将优盘作为数据存储器使用的设计方案,为在微计算机测控系统、仪器仪表、无纸化数据记录仪、数码相机等产品中添加优盘外设功能提供有益的参考。

  1  硬件设计

  S3C44B0X是Samsung公司开发生产的为嵌入式设备提供的一个低成本、高性能的ARM7TMDI核处理器,其运行频率可达66 MHz。SL811HS是Cypress公司的一款遵从USB1.1协议的嵌入式Host/Slave USB芯片;可以支持低速和高速模式,能自动侦测低速模式1. 5 Mbps设备和高速模式12 Mbps全速设备。由于具有8位数据总线的支持,使该芯片可以较为简单地与微控制器相连,SL811HS芯片与S3C44B0X的接口较为简单。本系统中ARM读/写优盘原理框图如图1所示。

  SL811HS的控制命令和数据均通过D0~D7传输,A0为数据或地址选择线。当A0置为低电平时,D0~D7上传输的是SL811HS片内寄存器的地址;反之当A0置为高电平时传输的则为数据。nWR、nRD、nCS、nRST0分别为写控制线、读控制线、片选线和复位线,S3C44B0X通过这几根控制线完成对SL811HS片内缓冲区的读写、片选和复位等操作。INT是SL811HS的中断请求信号线。当SL811HS检测到优盘插入、拔出时,通过将INT线拉高通知S3C44B0X。S3C44B0X可以通过查询SL811HS片内状态寄存器来得知是优盘插入或是拔出。对状态寄存器进行写操作可以清除中断,但需要注意的是ARM的结构特性。ARM内部通常是Little Endian方式存储和使用4字节对齐方式[1],并且当采用16位数据总线时,地址线ADDR0是无效的[2]。在本系统中,SL811HS芯片A0端是与ADDR1相连接的。

  VS1011B是一款单芯片的MP3解码芯片,在国际MP3业余爱好者中影响较大,集成解码、A/D转换、音频放大等功能。VS1011B与S3C44B0X接口为SPI接口,其连接电路原理框图如图2所示。

  VS1011B的控制与数据传输是通过SPI接口完成的,DREQ、xDCS、xCS、nRST1分别为数据请求端口、数字片选信号线、片选线、复位线。在VS1001B的新模式下,SDI(Serial Data InteRFace)数据和SCI(Serial Command Interface)数据传输可以共享ARM的一个SPI接口;而在兼容模式下,SDI数据传输要用DCLK、SDATA串行接口,SCI数据传输用SPI接口。为了简化电路,此处选用了新模式。

  2  软件设计

  2.1  优盘读写软件的实现

  USB组织定义了海量存储设备类(mass storage class)的规范。这个类规范包括4个独立的子类规范:USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport 、USB Mass Storage Class BulkOnly Transport、USB Mass Storage Class ATA Command Block、USB Mass Storage Class UFI Command Specification。其中优盘属于海量存储设备,遵循bulkonly传输协议,子类采用UFI命令集。本设计软件的总体结构如图3所示。其中两条点画线之间的部分为读/写优盘的软件结构。

  2.1.1  USB物理层协议的实现

  该部分实现S3C44B0X对SL811HS芯片的直接底层数据的读写,包括对SL811HS的初始化及读/写一个字节的函数。限于篇幅,此处只列出对SL811HS芯片的初始化程序:

  /*********************************

  函数名称:SL811_Init

  函数功能:初始化SL811HS芯片

  输入参数:无

  返回值:无

  *********************************/

  void SL811_Init(void){

  //初始化U盘为未插入状态

  bFlags.bits.SLAVE_ONLINE = FALSE;

  bFlags.bits.SLAVE_FOUND = FALSE;

  bFlags.bits.SLAVE_REMOVED = FALSE;

  bFlags.bits.SLAVE_ENUMERATED = FALSE;

  bFlags.bits.SLAVE_IS_ATTACHED = FALSE;

  //允许硬件产生SOF(Start of Frame)

  SL811Write(CtrlReg,0x04);

  DelayMs(100);

  SL811Write(CtrlReg,0x01);

  //设置SOF,1 ms中断

  SL811Write(cDATASet,0xe0);

  //设置为主机工作模式

  SL811Write(cSOFcnt,0xae);

  SL811Write(EP0Status,0x50);

  //地址设为0

  SL811Write(EP0Counter,0);

  //允许数据发送

  SL811Write(EP0Control,0x01);

  SL811Write(IntEna,0x20);

  //清中断

  SL811Write(IntStatus,INT_CLEAR);

  }

  2.1.2  USB设备协议层的实现

  该部分实现对优盘扇区的直接读写,其中两个很重要的函数为Bulkin和Bulkout。此处只列出Bulkin函数的实现:

  /**********************************

  函数名称:epB

  ulkRcv

  函数功能:实现bulkonly协议中的Bulkin函数

  输入参数:pBuffer为数据的地址,len为数据的长度

  返回值:TRUE为成功,FALSE为失败

  **********************************/

  unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int len){

  usbstack.usbaddr=0x1;

  usbstack.endpoint=usbstack.epbulkin;

  usbstack.pid=PID_IN;

  //设置包长度为64

  usbstack.wPayload=64;

  usbstack.wLen=len;

  usbstack.buffer=pBuffer;

  if(usbstack.wLen){

  if(!usbXfer())

  return FALSE;

  }

  return TRUE;

  }

  2.1.3  FAT16/FAT32文件格式的实现

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

  本方案mp3播放器的实现原理就是控制器 从优盘读取MP3文件数据,当VS1011B的数据缓冲区需要数据时,将数据送入VS1011B进行解码。VS1011B采用串行接口,有两种接口模式:

  Native Modes(新模式)和Compatibility;

  Mode(兼容模式)。当地址为0x0的MODE寄存器的SM_SDINEW位为1时为新模式;反之为兼容模式。上电时默认为新模式。

  在播放音乐之前,首先需要对VS1011B进行初始化,然后输入音乐文件即可播放歌曲。其控制步骤如下:[3]

  ①  拉低nRST1。

  ②  等待DREQ引脚信号变高。

  ③  写寄存器MODE的参数,包括正确设置SM_SDINEW和SM_SDISHARED位。

  ④  若时钟数率非24.576 MHz,应设置SCI_CLOCKF。

  ⑤  若使用倍频时钟,试图通过改变SCI_CLOCKF直接操作,应将适当的采样速率写入SCI_AUDATA寄存器,等待至少11 000个时钟后才可以操作高速的SPI通信。

  ⑥  设置音量寄存器SCI_VOL。

  ⑦  若希望加强低音,可设置寄存器SCI_BASS。

  ⑧  从优盘读取一首MP3歌曲文件,并开始传送音乐数据。应注意数据传送的规则,DREQ信号是用来表示VS1011B的MP3数据缓冲区是否需要数据。当VS1011B的数据缓冲区可再接收32字节数据时,DREQ引脚电平变高。当软件查询到此引脚电平变高时,就再送入32个字节的MP3音乐数据。

  ⑨  本首歌曲完成播放,读取下一首MP3歌曲,并转到步骤⑧。

  结语

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


  

参考文献:

[1]. STA013 datasheet https://www.dzsc.com/datasheet/STA013_625628.html.
[2]. S3C44B0X datasheet https://www.dzsc.com/datasheet/S3C44B0X_589522.html.
[3]. SL811HS datasheet https://www.dzsc.com/datasheet/SL811HS_611618.html.


上一篇:从虚拟化角度看云计算的本质
下一篇:一种油漆配料的控制系统介绍

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料