基于ARM的MP3播放器的设计与制作

  • 格式:doc
  • 大小:262.00 KB
  • 文档页数:8

下载文档原格式

  / 15
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式MP3播放器的设计

1 系统概述

本文采用STM32系列微控制器,结合解码芯片VS1003、SD卡、LCD等外围设备设计并实现了MP3播放器。其主要功能有:播放VS1003支持的所有音频文件,如MP3、WMA、WAV文件,且音质非常好;通过触摸屏实现按键功能,控制播放上一首/下一首、音量增减等;通过LCD显示歌曲名字和播放状态;本系统还实现了读卡器功能,PC机可通过USB接口直接对开发板上的SD卡进行读写操作,以方便拷贝音频文件。

MP3播放过程是STM32通过SPI1接口将数据从SD卡中取出,然后通过SPI2接口送至解码芯VS1003解码播放。这里解码模块单独使用一个SPI接口,以减小干扰和噪声、提高音质。

2 系统硬件设计方案

本系统在硬件上分为6个模块: 微控制器STM32F103、解码模块VS1003、存储模块SD卡、触摸屏、USB接口和显示屏LCD。系统硬件框架如图5所示。

VS1003

STM32

图5 系统硬件框架图

2.1 存储模块设计

SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡。在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。SD卡支持两种总线方式: SD方式与SPI方式。其中SD 方式采用6线制,而SPI方式采用4线制,采用单片机对SD卡进行读写时一般都采用SPI模式。可用不同的初始化方式使SD卡工作于SD方式或SPI方式。

在本设计中,音频数据MP3文件是以SD卡为载体。所以在电路设计中必须含有读取SD卡模块。该系统使用STM32内部接口SPI1与SD卡进行通信,下面介绍其引脚连接情况。

PE3:低电平有效,连接到SD卡的片选引脚CD/DAT3。SPI在和SD卡进行通

信时,需要将PE3拉低才能对SD卡进行操作。

PA7:映射为STM32内部接口SPI1的主输出从输入(MOSI)信号线。这里

STM32是主设备,SD卡是设备。数据流的传输方向是从STM32传输给SD卡。该信号线用于传输一些控制命令来完成SD卡的操作,如读、写等。

PA5: 已连接到STM32内部接口SPI1的时钟(SCL K)信号线。可设置SPI的时钟频率来调整读取SD卡数据的快慢。

PA6:已连接到STM32内部接口SPI1的主输入从输出(MISO)信号线。数据的传输方向是从SD卡传输给STM32,主要返回SD卡的一些状态、内部寄存器值等。

PC12 :用于检测SD卡是否完全插入。当SD卡完全插入时,PC12为低电平,否则为高电平。

2.2 音频解码模块设计

音频解码模块完成MCU从SD卡里读取的数字MP3音频数据流进行解析、并转化成模拟信号进行输出。在这里,系统使用VS1003音频解码芯片来实现音乐数据流的解析。VS1003是由芬兰VLSI公司出品的一款单芯片的MP3/WMA音频解码芯片,其拥有一个高性能低功耗的DSP处理器核VS_DSP,5K的指令ROM,0.5K的数据RAM,串行的控制和数据输入接口,4个通用I/O口,一个UART口,同时片内带有一个可变采样速率的ADC、一个立体声DAC以及音频耳机放大器接口。VS1003与核心控制器MSP430F149的数据通信是通过SPI总线方式进行的。VS1003主要通过串行命令接口(SCI)和串行数据接口(SDI)来接收MSP430F149控制器的控制命令和MP3的数据。通过XCS、XDCS引脚的置高、置低来确认是哪一个接口处于传送状态。对于VS1003芯片的功能控制,如初始化、软复位、暂停、音量控制、播放时间的读取等,均是通过SCI写入到特定寄存器的内容来实现的。两条SCI指令之间要通过DREQ引脚信号判断上次处理是否完成。

该系统使用STM32内部接口SPI2 与VS1003 进行通信,下面介绍其引脚连接情况。

PA3 :VS1003 的中断请求引脚。当VS1003 内部数据已处理完毕,需要新的数据时,将DREQ拉高。STM32根据这个信号来给VS1003 发送新的数据流。

PB13 : 已连接到STM32内部接口SPI2 的时钟(SCL K)信号线。

PB14 :已连接到STM32内部接口SPI2 的主输入从输出(MISO)信号线。这里STM32是主设备,VS1003是从设备。数据流的传输方向是从VS1003 传输给STM32。主要用于读取VS1003的一些状态和内部寄存器值,比如寄存器测试返回的内部寄存器的值。

PB15:已连接到STM32内部接口SPI2的主输出从输入(MOSI)信号线。这里STM32是主设备,VS1003是从设备。数据流方向是从STM32传输给

VS1003,主要传输给VS1003一些控制命令、MP3/ WMA 数据流等。

PA1:低电平有效,如果拉低该引脚,那么通过SPI 传输的是控制信号。控制信号包括读写VS1003的内部寄存器、对VS1003进行初始化、设置左右声道音量等。

PA2:低电平有效,如果拉低该引脚,那么通过SPI 传输的是数据信号。比如在向VS1003 传输MP3/ WMA 的数据流时需要拉低该引脚。

PA0 :低电平有效,拉低该引脚则硬件复位VS1003。

2.3 液晶显示模块设计

LCD3310芯片是一个48行84列的液晶显示器主要模块。其内存带有低功耗

PCD8544的CMOSLCD控制驱动器,串行输入速度最高可达4. 0Mbits/S,而且所有必须的显示功能集成在一块芯片上,包括LCD电压及偏置电压发生器,所以LCD3310是一款低功耗的液晶显示器。为了让LCD3310液晶能够显示4行12* 12的汉字,系统开辟了一个6* 84字节的缓冲区,要写液晶时,就不用直接写

LCD3310的静态DDRAM了,可以先写系统为它开辟的数据缓冲区,最后再刷新修改的部分就可以显示出要显示的内容,LCD3310与主控制器是SPI接口方式。

3 系统软件设计方案

3.1 MP3播放器软件系统流程原理

系统启动后,先初始化硬件模块。由MCU通过FAT32文件系统接口读取SD 卡的一些基本信息,如容量、扇区大小、FAT表及根目录所在的启始扇区等。通过获得这些信息后,就可以找出SD卡是否有我们可以播放的音乐文件。若有音乐文件,微处理器将通过SPI总线方式读出该文件的音频信息,并将歌曲的码流信息送入到VS1003芯片中,通过VS1003芯片解码以及其内含的高质量的立体DAC和耳机驱动电路,实现MP3歌曲的播放功能。在触摸键的控制下,通过LCD3310中菜单选项的选择,实现对歌曲选择及音量控制等功能;在播放的同时,LCD3310上显示的信息除歌曲名称信息外,还包括进度和音量等信息。

由于SPI1 读取SD卡文件的速度远超过VS1003播放数据流的速度,因此VS1003 在播放来自SPI2的数据流期间,SPI1能从SD 卡中读取下次播放所需的数据,不会产生声音不连续的情况。由于使用了2 个SPI接口,相互之间无干扰,且提高了文件系统的效率,因此本系统能得到非常高品质的音乐。

如图6是MP3播放器的软件系统流程图。下面介绍软件的核心模块。

(1)SD模块

SD模块主要提供SD 卡驱动以及对FAT 文件系统操作的函数,FAT 文件系统支持长文件名。该模块主要含有2个文件msd.c和fat16.c 。下面分别介绍其主要函数的功能。

(1)msd.c

该文件用于提供SD 卡的驱动,主要包括以下函数。

SPI_ Config : 配置与SD 卡相连接的SPI1 及相关GPIO。

MSD_Init :初始化SD 卡通信。

Get_Medium_Characteristics :获取SD 卡的容量和块大小等相关信息。

MSD_GoIdleState :令SD 卡处于空闲态。

MSD_SendCmd :向SD 卡发送命令。

MSD_GetResponse :从SD 卡获取响应。

MSD_GetStatus :获取SD 卡的状态。

MSD_WriteBlock :向SD 卡写入1 个块的数据。

MSD_ReadBlock :从SD 卡读取1 个块的数据。

以下是函数MSD_ReadBlock 的实现:

u8 MSD_ ReadBlock ( u8 * pBuffer ,u32 ReadAddr ,u16 NumByte ToRead) { u32 i = 0 ;

u8 rvalue = MSD_RESPONSE_FAILURE;

MSD_CS_LOW() ; / / 拉低片选信号,选中SD 卡