mp3播放器设计
更新时间:2024-05-05 09:32:01 阅读量: 综合文库 文档下载
结合实际情况,设计一个解决某问题的方案,并详细说明相关工作原理,实现 方式,方案优缺点,电路图和程序
1.多通道专业MP3播放器是专为满足公共语音广播市场的需求而设计的,其主要功能包括:
(1)音频解码和播放功能;
(2)通过USB接口与大容量外部存储设备进行数据传输; (3)操作界面统一管理功能;
(4)多通道播放功能。
为了提高系统运行效率,实现多通道播放管理,本系统选用三星公司的S3C44B0X作为核心处理器,主要负责数据转换,输出通道的选择,以及LCD的控制。同时,选用意法半导体的STA013作为解码芯片,配合AK4393实现模拟音频信号的输出,此外,使用SL811HS和ISP1520提供两个主USB接口,以实现移动硬盘或U盘的挂接。其系统总体结构如图1所示:
图1 系统总体结构图
系统硬件设计
作为一种典型的嵌入式系统,其开发的优点在于软硬件的可裁剪性[2],在确保有一个稳定的最小系统以后,再对外围的设备进行扩展。此多通道专业MP3播放器的核心芯片S3C44B0X是基于ARM7而开发的多功能SOC(Signal Operation Control)。S3C44B0X除具备一般嵌入式芯片所具有的总线、SDRAM控制器和3个串口等外设之外,还具有TFT LCD控制器、USB Slave、USB Host、I2C总线控制器、SPI控制器、IIS音频接口、SD&MMC存储卡接口等丰富的扩展功能[3]。由于S3C44B0X对于SL811构建的主USB接口技术已经相当成熟,在这里就不再叙述。此外,S3C44B0X提供的标准接口可以支持市面上绝大多数型号的LCD显示屏,制作也相对简单,所以本文只对MP3播放器的解码实现部分和多通道的实现方法进行详细说明。 MP3解码电路设计
本系统解码部分的硬件采用了ST公司的STA013解码芯片以及AKM的
AK4393芯片。STA013是一款优秀的MP3解码芯片,它通过IIC总线来传输控制信息,通过串行数据线接收语音数据。AK4393是一款高品质的立体声DAC芯片,支持24bit/96KHz取样,采用 “复合比特”技术使芯片的解码更为快速和准确。
解码部分与S3C44B0X的接口电路部分如图2所示。通过S3C44B0X的I/O口对STA013发送音频数据,解码过程由STA013的DSP核来进行。STA013解码后的数字音频信号由SDO(串行数据输出), SCKT(串行时钟), LRCKT(左右声道时钟), OCLK(采样时钟)4个脚输出到D/A转换器AK4393。通过AK4393将得到的模拟音频信号,再经过功率放大电路放大后就可以直接驱动无源音箱。
图2 解码部分接口电路图
此外,由于实现多通道的播放形式,所以需要在设计过程中提供多套相同的解码芯片和DAC。
多通道功能的实现
系统多通道播放采用的基本方法是(以四通道为例):当系统上电以后,解码控制信号为了实现对每一个解码通道的具体工作状态控制,通过采用外接一个四路转换开关(CD4066),控制各路通道解码芯片的工作状态。转换开关四路通道的输入部分连接CPU的IIC总线的IICSDA,通过与CPU相连的多个控制引脚(CTRL1,2,3,4),确定控制数据的传输方向。四路通道的时钟信号则直接连接在CPU上,只有控制数据传输时才发生作用。
在播放过程中,CPU实时响应各通道传输数据的请求,选通该路的解码芯片,被选通的解码芯片对从总线上获取的mp3文件数据进行解码,而未被选通的解码通道则忽略总线上的音频数据。当数据请求的中断请求信号由高变低,系统开始响应下一次数据请求。通过这种各通道交替工作的方式,实现四通道同步播放的功能。工作原理图如图3所示:
图3 多通道工作原理图
系统软件设计
系统软件包括操作系统、驱动程序及播放器应用程序3部分。 操作系统的实现
在嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。BootLoader的任务是初始化芯片和主板,系统选用的是U-Boot-1.1.2启动程序,因为U-Boot的优点在于对多系统和多平台的支持。由于S3C44B0X没有存储管理单元(MMU),所以无法移植标准的Linux内核,而μClinux主要是针对没有MMU的处理器设计的操作系统[4],因此可以作为播放器的操作系统平台进行移植。通过修改相应的配置文件和驱动程序就可以实现移植过程中需要创建的开发板文件。
驱动程序的设计
本系统所编译的μClinux内核中包含有USB、LCD等驱动程序,只要根据需要适当的修改便可以应用。但是对于MP3解码部分芯片的驱动需要自己编写。音频驱动程序实现的主要功能是:
(1)系统启动时可以完成芯片的初始化;
(2)具体操作时可以提供给操作系统合适的软件接口。音频驱动初始化程序如下:
void STA013_Init(void) {
if(STA013_SendCommand(RESET_REG,0,0x00)) //复位STA013 STA013_PrintError();
if(STA013_SendCommand(ACT_CON_REG,0,0x00)) //未激活状态 STA013_PrintError();
if(STA013_SendCommand(PWR_CON_REG,0,0x00)) //上电 STA013_PrintError();
if(STA013_SendCommand(FS_CON_REG,0,
I STA013L_FsValue[SysInfo.SamplingIndex])) //选择采样频率 STA013_PrintError();
if(STA013_SendCommand(IF_CON_REG,0,0x02+(0<<6))) //选择16位
IIS数据格式
STA013_PrintError();
if(STA013_SendCommand(ANG_CTL_REG,0,0)) // 0x13, 0x12选择DAC STA013_PrintError(); 和Line In输入模式
if(STA013_SendCommand(DGT_CTL_REG,0,0x00)) // DAC静音 STA013_PrintError();
if(STA013_SendCommand(LHP_VOL_REG,0,0x00)) //左声道音量 STA013_PrintError();
if(STA013_SendCommand(RHP_VOL_REG,0,0x00)) //右声道音量 STA013_PrintError();
if(STA013_SendCommand(ACT_CON_REG,0,0x00)) //数据传送激活 STA013_PrintError(); }
播放程序的设计
作为本系统的一个主要创新点,在多通道部分设计合理且高效的播放程序代码很重要,在这里采用的是将待解码的MP3文件先由USB设备复制到内存的缓冲区,再由缓冲区发送给解码器的方法。播放时,程序会根据每个通道的歌曲信息将MP3文件流从USB设备复制到相应的缓冲区中。其主要实现代码如下:
for(i=0;i<4;i++){
if((dbuf[i]=malloc(BUF_LEN))==NULL){ printf(\ exit(1); }
}
操作界面的实现
完整的MP3播放器设备需要有一个简洁的操作界面。本系统的操作界面选用MiniGUI软件进行编写,通过对MiniGUI运行模式的选择、MiniGUI的移植[5]以及界面程序的编写,最终的操作界面如图4所示。整个操作界面简洁明了,系统在开机后提供了当前时间,以及播放、设置和复位按键,可以直接通过播放键来实现多通道播放功能,通过设置键进行歌曲目录的编排。
图4 播放器主界面 2.嵌入式MP3播放器的设计 系统概述
采用STM32系列微控制器, 结合解码芯片VS1003、SD卡、LCD等外围设备设计并实现了MP3播放器。其主要功能有:播放VS1003支持的所有音频文件,如MP3、WMA、WAV文件,且音质非常好;通过触摸屏实现按键功能,控制播放上一首/下一首、音量增减等;通过LCD显示歌曲名字和播放状态;本系统还实现了读卡器功能,PC机可通过USB接口直接对开发板上的SD卡进行读写操作, 以方便拷贝音频文件。
MP3播放过程是STM32通过SPI1接口将数据从SD卡中取出,然后通过SPI2接口送至解码芯VS1003解码播放。这里解码模块单独使用一个SPI接口,以减小干扰和噪声、提高音质。
系统硬件设计方案
本系统在硬件上分为6个模块: 微控制器STM32F103、解码模块VS1003、存储模块SD卡、触摸屏、USB接口和显示屏LCD。系统硬件框架如图5所示。
VS1003DREQSCLKSOSICSDCSRESETCD/DAT3CMDCLKDATOWPSD卡STM32PA3PB13PB14PB15PA1PA2PA0 PE3PA7PA5PA6PC12USBLCD触摸屏
图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为低电平,否则为高电平。
音频解码模块设计
音频解码模块完成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 。
液晶显示模块设计
LCD3310芯片是一个48行84列的液晶显示器主要模块。其内存带有低功耗PCD8544的CMOSLCD控制驱动器,串行输入速度最高可达4. 0Mbits/S,而且所有必须的显示功能集成在一块芯片上,包括LCD电压及偏置电压发生器,所以LCD3310是一款低功耗的液晶显示器。为了让LCD3310液晶能够显示4行12* 12的汉字,系统开辟了一个6* 84字节的缓冲区,要写液晶时,就不用直接写LCD3310的静态DDRAM了,可以先写系统为它开辟的数据缓冲区,最后再刷新修改的部分就可以显示出要显示的内容,LCD3310与主控制器是SPI接口方式。
系统软件设计方案
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 卡 MSD_SendCmd (MSD_READ_ SIN GL E_BLOCK, ReadAddr , 0xFF) ; / / 发送读取块命令 / / 检测SD 卡是否有返回信息,若是则返回0x00
if ( !MSD_GetResponse (MSD_RESPONSE_NO_ERROR) ) { if ( !MSD_ GetResponse (MSD_ START_DA TA_ SIN GL E_ BLOCK_READ) ) { / / 等待数据令牌,标志数据传输开始
for (i = 0 ; i < NumByte ToRead ; i + + ) { / / 读取数据
* pBuffer = MSD_ReadByte() ; / / 缓存收到的数据
开始VS1003、中断、串行口、液晶、flash存储器、SD卡等初始化读SD卡的主引导记录解析文件系统从SD卡里读取MP3文件信息解析短文件名调用以GB2312编码的汉字驱动并显示Unicode到GB2132转换Y有长文件名N计算MP3数据流首簇地址读取一扇区的MP3数据流MP3数据流写入VS1003芯片N读完一簇N文件结束Y结束Y计算下一簇地址
图6 软件系统流程图
pBuffer + + ; / / 缓存指针后移 }
rvalue = MSD_RESPONSE_NO_ERROR ;/ / 修改rvalue 的值为成功 } }
MSD_CS_HIGH() ; / / 拉高片选信号,禁用SD 卡
MSD_WriteByte(DUMMY) ; / / 写无效字节,传输结束 return rvalue ; / / 返回 }
(2)fat16. c
该文件提供对FAT16 文件系统的支持,主要包含以下函数。 ReadMBR :读取MBR 数据结构。 ReadBPB :读取BPB 数据结构。 ReadFAT :读取文件分配表指定项。 ReadBlock :读取SD 卡的一个扇区。
FAT_Init :获取FAT16 文件系统的基本信息。 DirStartSec :获取根目录的开始扇区号。 DataStartSec :获取数据区的开始扇区号。 ClusConvLBA :获取一个簇的开始扇区号。 LBAConvClus :转换扇区号与簇号之间的关系。 Get FileName :获取指定文件的首扇区号。
ListDate Time :列出文件或子目录创建的时间日期。 SearchFoler :在指定范围内查找文件或子目录。 ListDir :列出指定范围内的文件或子目录及相关信息。 FAT_FileOpen :打开指定文件。 FAT_FileRead :读取文件数据。 (2)VS1003模块
VS1003 模块主要提供对解码芯片VS1003 的驱动,为应用层播放音频数据、控制音量声道等提供基本接口。该模块主要含文件vs1003. c 。其主要函数的功能如下。
vs1003. c 文件主要提供VS1003 芯片的驱动,包含以下几个主要函数。 VS1003_Config :配置STM32 与VS1003 连接的相关引脚,包括SPI2 、PA0 、PA1 、PA2 、PA3 。
SPIGetChar :通过SPI 从VS1003 读取1 个字节。
SPIPutChar :通过SPI 向VS1003 写入1 个字节。如果是MP3/ WMA 数据流,则VS1003 将开始解码并播放。
Mp3ReadRegister :读取VS1003 寄存器的值。 Mp3WriteRegister :写VS1003 寄存器。
Mp3Reset :VS1003 复位,包括软件复位和硬件复位。
Mp3SoftReset :VS1003 软件复位,设置时钟、采样率、重音、音量、立体声等参数,一般在2 首乐曲之间需要一次软件复位。
VsSine Test : 播放正弦声波, 用于测试VS1003 和STM32 的连接是否完好。
以下是VS1003音频解码芯片初始化的部分代码: void init_vs1003() {
vs1003_dir|=0X2C;
VS1003_xResetDIR |=BIT5;
printfs(“\\n-----hard_reset----\\ n”);
hard_reset; //硬件复位 delay_ms(10);
sotf_send_bit2(0XFF); hard_set;
sotf_send_bit2(0XFF); Wait_Vs1003_DREQ();
printfs(“\\n-----soft_reset_vs1003- ---\\n”);
soft_reset_vs1003();
printfs(“\\n ----vs1003initok---- \\n”); }
(3)图形人机交互模块(触摸屏支持库的安装)
网络MP3播放器搭载了一块触摸屏作为系统硬件的控制模块,有了触摸屏的支持,用户就可以通过点击图形人机交互界面中的窗体控件对播放器进行管理。在设计播放器的图形人机交互界面之前,还需要一层应用程序库封装系统对底层触摸屏驱动的操作,将触摸控制以一个统一的接口提供给上层GUI应用程序使用。
该设计使用了tslib应用程序库来封装图形用户界面对底层触摸屏的操作。
tslib是一个开源的触摸屏支持库,它作为触摸屏驱动的适配层,为不同的触
摸
屏提供了一个统一的接口。tslib提供诸如滤波、去抖、校准之类的功能。下图
7表示了tslib在本设计GUI系统中所处的层次结构。
GUI应用程序Tslib用户空间 内核触摸屏驱动程序触摸屏
图7 层次结构图
tslib触摸屏支持库的安装与测试:
首先从tslib官方网站中下载tslib一 1。4。tar。gz源代码包进行编译,tslib的编译过程这里不再赘述了,其源代码文档中有详细地说明。本设计将tslib安装
到宿主机 /usr/local/tslib目录中,安装完成以后,在该目录中生成了bin、etc、
include、lib四个目录,其中,bin目录中保存了一些触摸屏的校验程序,etc
目录中保存了tslib相关的配置文件,lib目录中保存了tslib触摸屏支持库的库 文件。
①将tslib安装路径中的bin、etc、lib三个目录拷贝到目标机/usr/local/tslib目录中。
②修改其etc目录中的配置文件ts。conf,讲触摸屏驱动模块参数的值设
置为“module-raw-h3600”(对应目标机触摸屏设备/dev/h3600-tsraw)。
③修改tslib的环境变量,将其库文件的路径加入到系统环境变量中。 ④执行tslib提供的触摸屏校验程序ts-calibrate,屏幕中出现了一个十字。点击十字中心,程序会分别在左上,左下,右上,右下和中心依次出现五个小十字。点击屏幕中的五点完成触摸屏校验,校验程序在/etc/pointercal文件里写入了校验结果,表明了本次tslib触摸屏支持库的安装成功了
正在阅读:
mp3播放器设计05-05
物理化学简明教程习题答案 - 图文10-30
数据库原理与应用大作业04-15
greenplum基本操作及管理命令11-27
行政复议法试题01-16
数据结构实验报告07-20
控辍保学领导小组及分工12-10
数字电子技术基础 第一章01-19
钢笔的自述作文600字07-14
最新建筑力学复习题及答案05-08
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 播放器
- 设计
- mp3
- 中国法制史分归版
- 陈晓明高二日记
- 硬支承平衡机项目可行性研究报告(目录) - 图文
- 浅议课时目标的分层教学
- 2012年全国硕士研究生入学统一考试中医综合考试大纲
- 计算机组成原理都给对方版答案(完整版)
- 天燃气制氢操作规程 - 图文
- 家具设计毕业论文
- 青年友谊圆舞曲教学设计
- 2014年天津大学建筑工程学院硕士研究生填报研究方向及指导教师志
- 2017-2022年中国建筑施工升降机产业现状深度调研报告(目录) -
- 管理学资料 - 图文
- 财税(2008)121解读
- 输气工题集
- 四川大学普通生物学教学大纲
- 绿地系统复习提纲 - 图文
- 弗兰克-赫兹实验
- 浅议会计电算化的内部控制制度
- 2014年四川省绵阳市南山中学自主招生数学模拟试卷
- 《毕业设计:化工管道伴热设计毕业论文》