1、VS1003 解码器的 MP3 播放器设计(转)引言虽然现在市场上 MP3 的款式越来越多,功能越来越丰富,外观设计也越来越个性化和人性化,但是,现有的 MP3 播放器大部分还是将解码器与存储器一体化。这种设计对 MP3 播放器的便携性起了关键性的作用,但与此同时也带来了一些问题:一方面存储容量不易扩展,另一方面也不利于 MP3 播放器在其他领域的应用。本系统将存储器与解码器分离,可以利用多余的 I/O 接口,只要适当增加少量硬件开销并添加相应代码,即可以在此系统基础上方便地增加电压测量、频率测量、温度测量等功能,做到一机多用。1 系统设计MP3 播放器系统结构框图如图 1 所示。系统在硬件上
2、主要包括 MSP430F149单片机最小系统、音频解码模块、SD 卡读写模块、液晶显示模块以及用来存储自制字库的 Flash 存储器等重要模块。MSP430F149 是美国 TI 公司的 MSP430 系列单片机,它具有适合于各种应用的 16位结构。采用“冯诺依曼”结构,因此其 RAM、ROM 和全部外围模块都位于同一片地址空间内。而且具有超低功耗性能,同其他微控制器相比,MSP430 系列可以大大延长电池的使用寿命,这对手持设备及一些要求低功耗电子产品中是非常重要的。此外,它还具有灵活、强大的处理能力、丰富的存储器、外设等优点。2 硬件模块的具体实现2.1 MSP430F149 单片机最小系
3、统MSP430F149 最小系统是整体设计中最核心的部分,控制着系统各个子模块之间的协调运行。它设计的成功与否,直接关系到整个设计能否正常运行。如图 2 所示,MSP430F149 最小系统中主要由稳压模块、晶振电路、复位电路以及人机交互式按键输入 4 部分组成。SPX1117M3-3.3 是系统稳压芯片,为系统提供稳定的 3.3 V 电源。SP708S 是系统管理芯片,与手动复位开关一起,主要起可靠复位作用。考虑到 MP3 播放器的人机交互操作,共设计了 6 个按键(KEY1到 KEY6)。它们的按键功能分别是:确定、向下、向上、退出、音量加、音量减。2.2 音频解码模块VS1003 是芬兰
4、 VLSI 公司生产的单芯片 MP3/WMA 音频解码芯片。其拥有一个高性能、低功耗的 DSP 处理器核 VSDSP,5 KB 的指令 RAM,O.5 KB 的数据RAM,串行的控制和数据输入接口,4 个通用 I/O 口,1 个 UART 口,1 个可变采样率的 ADC,1 个立体声 DAC 以及音频耳机放大器。其内部结构图如图 3 所示。音频解码模块对单片机从 SD 卡里读取的数字 MP3 音频数据流进行解析,并转换成模拟信号进行输出。图 4 是该 MP3 播放器的音频解码模块电路原理图。采用 VS1003 音频解码芯片来实现音乐数据流的解析。VS1003 与核心控制器MSP430F149
5、的数据通信是通过 SPI 总线方式进行的。 VS1003 通过串行命令接口(SCI)和串行数据接口(SDI)来接收 MSP430F149 的控制命令和 MP3 的数据;通过 xCS、xDCS 引脚的置高/低来确认是哪一个接口处于传送状态。VS1003 的功能控制,如初始化、软复位、暂停、音量控制、播放时间的读取等,均是通过SCI 口写入特定寄存器实现的。两条 SCI 指令之间要通过 DREQ 引脚信号判断上一次处理是否完成。2.3 SD 卡模块SD 卡价格低,存储容量大,使用方便,通用性与安全性强,MP3、数码相机等设备上都采用 SD 卡作为其存储设备。SD 卡支持两种总线模式:SD 模式与
6、SPI 模式。其中,SD 模式采用 6 线制,而 SPI 模式采用 4 线制。采用单片机对 SD 卡进行读写时一般都采用 SPI 模式。可用不同的初始化方式使 SD 卡工作于 SD 或 SPI 模式。本设计中,音频数据 MP3 文件以 SD 卡为载体,所以设计电路时必须含有读取SD 卡模块。图 5 为 SD 卡模块(SPI 模式)的接口电路。2.4 液晶显示模块LCD3310 液晶是一个 48 行 84 列的液晶显示器。其带有低功耗 PCD8544 的CMOS LCD 控制驱动器,串行输入速度最高可达 4.O Mb/s。为了让 LCD3310 液晶能够显示 4 行 1212 的汉字,系统开辟了
7、一个 684 字节的缓冲区。写液晶时就不用直接写入 LCD3310 的静态 DDRAM 了,可以先写入系统为它开辟的数据缓冲区,最后再刷新修改的部分就可以显示出要显示的内容。LCD3310 的接口采用 SPI 模式,其电路如图 6 所示。3 软件设计图 7 是 MP3 播放器的软件流程。系统启动后,先初始化硬件模块。由单片机通过 FAT32 文件系统接口读取 SD 卡的一些基本信息,如容量、扇区大小、FAT 表以及根目录所在的起始扇区等。通过这些信息就可以找出 SD 卡是否有可以播放的音乐文件。若有,单片机通过 SPI 总线方式读出音频信息,并将歌曲的码流信息送入到 VS1003 芯片中,通过
8、 VS1003 解码芯片及其内含的高质量立体声 DAC 和耳机驱动电路,实现 MP3 歌曲的播放功能。在按键的控制下,通过 LCD3310 中菜单选项的选择,实现对歌曲选择及音量控制等功能;在播放的同时,LCD3310 上显示的信息除歌曲名称外,还包括进度和音量等。经过运行测试,系统可以正常流畅地播放出 320 kb/s 的高音质 MP3 音乐文件,而且在使用 500 mA 锂电池的情况下,可以连续正常地播放长达 10 个小时。可见,其功耗比较低。结语本着低成本、实用性强的原则,设计了一种解码器与存储器分离的 MP3 播放器,可以流畅地播放出高音质的 MP3 文件。同时,只要适当增加少量硬件开
9、销并添加相应代码,即可以利用多余的 I/O 口在此系统基础上方便地增加如电压测量、频率测量、温度测量等功能,真正做到一机多用。VS1003 是 VLSI 的一款音频编解码芯片威声(VLSI) ,创立于 1991 年,是一家创新型超大规模集成电路的设计、研发、制造公司,专注于音频编解码产品,总部位于芬兰。威声(VLSI)在创造独特的信号处理解决方案上实力强大,一半的员工在进行研究与开发(Rif(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)recv_com1_data = USART_ReceiveData(USART1); /收下从串口 1
10、(计算机)发来的数据 /*/接收计算机发来的命令和短消息 接收命令头 0x55 0x55 结束命令 0x55 0x35com1_data_num+;if(com1_data_num = 1) /接收命令头0x55if(recv_com1_data != 0x55) /如果第一个字符不是0x33,不是有用的信息com1_data_num = 0;com1_data_sum = 0;else if(com1_data_num = 2) /数据 2 是 0X35if(recv_com1_data != 0x55) /收到了不认得的信息,不去理会com1_data_sum = 0;else if(re
11、cv_com1_data = 0x35)com1_data_num = 0;sd_read_start = 1;else if(com1_data_num = 514) /单个数据块com1_data_num = 2;com1_shuju_buff127 = com1_shuju_buff127 | recv_com1_data; /单个数据块写sd_start = 1;elseif(recv_com1_data = 0x0F)sd_jieshu = 1;else if(recv_com1_data = 0x0D)else if(recv_com1_data = 0x0A)mp3_date_c
12、eshi2*i+1 = sd_block_buffi;/sd_block_buffi = 0;for(j=0;j8);SPI_Readbyte(mp3_date_ceshi16*j+t);GPIO_SetBits(GPIOB, GPIO_Pin_8);while (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7) = 0);/等待 DREQ 为高IWDG_ReloadCounter();sd_block_add2 = sd_block_add2+BlockSize; /单块sd_read_start = 0;if(sd_block_num = 1)for(i = 0;i 24);while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) = RESET);USART_SendData(USART1, ceshi_buffi16);while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) = RESET);USART_SendData(USART1, ceshi_buffi8);while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) = RESET);