嵌入式MP3播放器的设计
嵌入式 MP3

嵌入式MP3播放器的设计MP3 播放器是利用数字信号处理器DSP(Digital Sign Processing)来完成处理传输和解码MP3 文件的任务的。
本设计基于LPC2103 及VS1003B 实现MP3 播放器的整体设计,并以SD卡做为MP3 播放器的存储设备。
其中LPC2103 实现对SD卡的读写、FAT32 文件系统的实现、txt 文件的显示、控制LCD 的显示及相关汉字库的实现;而VS1003B 则实现将LPC2103从SD卡中读取出来的MP3 格式音乐进行解码,从而完成MP3 播放器的整体设计和实现。
本次设计以分立芯片来实现MP3 播放器各个功能,相较于一般设计中以集成MP3 控制芯片来实现,这种设计更有利于对MP3 播放器的分析和学习。
一、 MP3 播放器工作原理MP3 播放器是利用数字信号处理器DSP(Digital Sign Processing)来完成处理传输和解码MP3 文件的任务的。
DSP 掌管随身听的数据传输,设备接口控制,文件解码回放等活动。
DSP 能够在非常短的时间里完成多种处理任务,而且此过程所消耗的能量极少(这也是它适合于便携式播放器的一个显著特点)。
首先将MP3歌曲文件从内存中取出并读取存储器上的信号→到解码芯片对信号进行解码→通过数模转换器将解出来的数字信号转换成模拟信号→再把转换后的模拟音频放大→低通滤波后到耳机输出口,输出后就是我们听到的音乐。
二、MP3 需求分析、规格分析MP3播放器其实就是一个功能特定的小型电脑。
在MP3播放器小小的机身里,拥有MP3播放器存储器(存储卡)、MP3播放器显示器(LCD显示屏)、MP3播放器中央处理器[MCU(微控制器)或MP3播放器解码DSP(数字信号处理器)等。
微处理器是播放器的“大脑”,用来接受用户选择的播放控制,并将当前播放的歌曲信息显示在液晶显示屏上,然后向数据信号处理芯片发出指令,使其准确地处理音频信号。
项目(4)-简易MP3播放器设计

简易MP3播放器设计一、项目简介MP3播放器从90年代末开始出现,发展到今天已经是一种相当成熟的电子娱乐消费品了。
目前市面上存在着许多的MP3播放器,样式繁多,功能各异。
但它们都脱离不了一个核心,音频解码。
该项目用利用51单片机作为主控,VS1003作为音频解码芯片,再加上SD卡作为MP3的存储媒质,实现一个简易的MP3播放器。
同时可扩展TFT液晶模块制作出一个良好的人机交互界面。
二、项目要求1、支持播放格式为 .mp3的音频文件。
2、支持上一首、下一首、暂停、继续、音量调节、重音低调节。
3、支持单曲循环、全部循环模式。
4、控制方式任意。
5、扩展要求1:利用TFT制作一个人机交互界面。
能够显示音量、音效、音乐列表、播放时间进度等信息。
6、扩展要求2:支持WMA、MIDI、WAV格式的音频文件。
三、项目方案解码方案:音频解码可分为软解码和硬解码。
软解码需要大量的运算,消耗很多的时间与空间资源,因此对处理器的存储容量(ROM和SRAM)以及速度要求都比较高。
目前一般的单片机及ARM7处理器都很难做到对音频软解码。
另外,软解码之后的数据还要送到DAC,经DAC转换后才能输出模拟信号,如果DAC的驱动能力较弱的话还可能需要一个功率放大电路。
而硬解码一般是由专门的解码芯片实现,其优点是速度快、集成度高(内含DAC、功放等电路)、处理器容易控制、解码效果好。
因此在解码上选择与开发板配套的VS1003专用音频解码芯片比较合适。
解码方案确定后,该项目大体的实现思路就是,首先要分开各外设模块实现驱动,如VS1003驱动、SD卡驱动等。
用51单片机作主控,对VS1003、SD卡、串行口、TFT液晶等外设部件进行初始化。
接着根据用户控制来选择功能。
在音乐播放方面,要根据FAT32文件系统原理与MP3文件存储格式来读取MP3文件数据,再把有用音频数据发送到VS1003进行解码后输出。
人机交互界面的设计比较灵活,可根据个人喜好来完成设计。
嵌入式实例MP3 Player设计

RAM的连接
系统中所使用的 RAM 芯片 与处理器的连接方式。 以前的PC-133 的计算机内 存芯片,型号为 HY57V641620。
ROM连接
ARM处理器最小系统 中的ROM芯片与处理 器的连接方式。 这里配置容量为2MB 的NOR FLASH芯片, 型号为AM29LV160。
系统供电电源
嵌入式设计实例
MP3 Player设计
重庆邮电大学移通学院
MP3 Player要求:
高清播放音乐、USB接口、可存储歌曲、可以 使用耳机、具有播放控制键。
MP3 Player
要实现MP3 Player主要有以下两种方法: 1、MCU + USB接口芯片 + 硬件解码芯片+ 海量存储 芯 片 + 音 频 DAC + 耳 机 放 大 器 ; ( 实 现 参 考 UPMP3DIY2.00学习板) 2 、 MCU + USB 接口芯片 + 软件解码算法 + 海量存 储芯片 + 音频 DAC + 耳机放大器;(实现参考 UP-ARM MP3DIY1.00学习板) 前 者 的 MCU 可 以 为 MCS-51 系 列 单 片 机 , ( 如 AT89C51SND1) 后者为ARM7体系结构的微控制器。(如S3C44B0X)
时钟电路
系统时钟输入由6MHz的外部晶阵提供,由内 部PLL电路倍频至66MHz,供给CPU运行。
复位电路
系统复位信号由IMP811T芯片提供,并且设计 了RESET按钮,可以在系统运行过程中随时复 位操作,便于系统调试。
初始配置和JTAG调试接口
嵌入式系统4-嵌入式系统设计-MP3播放器设计

嵌入式系统设计MP3播放器设计目录z硬件平台选择z开发工具选择z系统原理z系统框架z系统关键问题硬件平台选择z目前可以选择的硬件平台何其多!z如何选择合适的硬件平台–MIPS–ARMz ARM7、ARM9、ARM10。
–Xscale–Powerpc–等等硬件平台选择方式z性能–硬件平台测试z建立原型系统,测试效率是否能满足要求–参考其他同类产品z价格软件平台选择z WinCEz Linux–嵌入式Linuxz商业版本z开源版本–普通Linuxz Vxworksz无操作系统z等等什么情况下可以不需要操作系统支持?回答z任务简单(逻辑简单)z单任务(无需进程调度,多任务支持)开发工具选择z支持ARM的开发工具:–ARM公司的ADS、SDT、Realview –台湾的Hitools–美国的Metaware–开源的GCC for ARMBootloader选择z ARMbootz U-Bootz Redbootz Blobz Liloz Grubz自己开发的Bootloader设计方法z状态机z中断z状态机+中断嵌入式程序的状态机写法z状态机方法在没有操作系统的嵌入式系统中是常用的方法。
z u-boot采用了状态机的方法。
switch(keyboard_state){case wait_down:if(any_key_down){start_to_wait;keyboard_state = delay_for_real_judge;}break;case delay_for_real_judge:if(end_of_delay)keyboard_state=real_judge;break;case real_judge:if(any_key_down){which_key;keyboard_state=keyboard_handle;}elsekeyboard_state=wait_down;break;case keyboard_handle:keyboard_handle;keyboard_state=wait_down;break;} switch(uart_state){case uart_transfer:if(there_is_data_to_send) {send a character;uart_state=wait_for_transfer_end;}break;case wait_for_transfer_end:if(transfer_end)uart_state=uart_transfer;break;}状态机+中断键盘中断读取中断输出中断解码数据读取用户按键播放停止发送接收读取输出输出发送输出设计方法选择z采用哪种设计方法?–状态机–中断–状态机+中断z选择因素–实时性要求–系统复杂度z设计复杂度z实现复杂度–系统可扩展性–等等关键技术之中断管理z中断处理–中断注册–中断管理–现场保护–中断实现–现场恢复–中断重入(中断屏蔽)中断管理z Int interrupt_disable()–功能:关闭中断–返回值:CPU当前的中断屏蔽状态z Int Interrupt_enable(int status);–功能:恢复中断–返回值:恢复以前的CPU中断屏蔽状态z Int Interrupt_enable( int status );/* 以前的CPU中断屏蔽状态*/中断管理isr_register()/* 注册中断处理函数返回值:0,成功,-1:失败*/Int isr_register(int interrupt_num, /* 中断向量号*/int arg,/* 向回调函数传递的参数*/void (* func)(int arg)/* 中断处理回调函数*/);Int isr_unregister(int interrupt_num); //注销中断处理函数Start.s /*Interrupt handling*/@@ IRQ stack frame.@#define S_FRAME_SIZE72 #define S_OLD_R068#define S_PSR64#define S_PC60#define S_LR56#define S_SP52Start.s/*exception handlers */#ifdef CONFIG_USE_IRQ.align5irq:get_irq_stackirq_save_user_regsbl do_irqirq_restore_user_regsfiq:get_fiq_stack/* someone ought to write a more effiction fiq_save_user_regs*/ irq_save_user_regsbl do_fiqirq_restore_user_regsInterrupt.c/* enable IRQ interrupts */void enable_interrupts(void){unsigned long temp;__asm__ __volatile__("mrs%0, cpsr\n""bic%0, %0, #0x80\n""msr cpsr_c, %0": "=r" (temp):: "memory");}Interrupt.cint disable_interrupts(void){unsigned long old,temp;__asm__ __volatile__("mrs%0, cpsr\n""orr%1, %0, #0xc0\n""msr cpsr_c, %1": "=r" (old), "=r" (temp):: "memory");return (old & 0x80) == 0;}Interrupt.cvoid do_irq(struct pt_regs*pt_regs) {printf("interrupt request\n"); show_regs(pt_regs);bad_mode();}中断管理z第一阶段主要是保存中断向量号,供第二阶段使用;z第二阶段完成现场的保存与恢复;z第三阶段完成与应用相关的处理。
基于BU9435的嵌入式MP3播放模块设计

基于BU9435的嵌入式MP3播放模块设计。
2 BU9435 简介BU9435 内部不仅集成系统控制器和MP3 音频解码器,而且还内置USB 存储/SD 卡主机功能,能够自动查找U 盘和SD 卡内的MP3 文件,并通过解码器播放出与CD 媲美的高音质音乐。
以前有带USB 主机接口的MP3 解码方案需要外接程序存储器或采用CPU、USB 控制器和MP3 解码器,现在仅需BU9435 便可实现。
BU9435 的主要特性:USB 全速HOST 接口,SD 存储卡接口;带有可显示文件/文件夹编号、播放时间、艺术家名、标题等ID3Tag 分析功能的MP3 解码器;内置有安装命令软件的系统控制器;FATl6/FAT32 文件系统;独立工作/从属工作模式转换功能;I2C 总线接口;4×3矩阵键盘扫描控制功能;7 通道LED 控制功能;抽样率自动转换功能;多种均衡模式。
图1 给出BU9435 的内部组成框图。
BU9435 的主要引脚功能:引脚1(RESETX):复位端,低电平有效;引脚2(SEL_SLAVE):工作模式选择,高电平选择独立工作模式,低电平为从属模式;引脚3(SEL_MP3):文件格式选择,高电平仅支持MP3 格式的文件,低电平支持MPl、MP2 和MP3 格式的文件;引脚4(SEL_DOUT):音频输出选择,高电平为模拟音频输出,低电平为数字音频输出;引脚5(SEL_VOL):音量控制选择,高电平使能音量控制功能,低电平禁止音量控制;引脚6(SEL_APLAY):自动播放选择端,高电平禁止自动播放,低电平选择自动播放;引脚10~13:工作在独立模式时,10~13 引脚为矩阵键盘行输入端KEY_ROWn;工作在从属模式时,10 引脚为曲目切换输出端,当MP3 曲目切换时输出低电平,11 引脚为BU9435 忙标志输出.12~13 引脚为I2C 总线的SCL 和SDA:引脚14~16:工作在独立模式时,14~16 引脚为矩阵键盘列输。
嵌入式音乐播放器的设计与实现

嵌入式音乐播放器的设计与实现随着科学技术的不断发展,生活中出现了越来越多的便捷化设备,而嵌入式音乐播放器正是其中之一。
嵌入式音乐播放器的设计与实现是一项非常复杂的工作,需要具备一定的编程和硬件开发能力,同时还需要对音乐播放器的市场和应用场景有充分的了解。
下面将详细介绍嵌入式音乐播放器的设计和实现过程。
一、需求分析在设计嵌入式音乐播放器之前,需要先进行需求分析,明确其设计目标和功能要求。
嵌入式音乐播放器的主要目的是实现音乐播放功能,同时还需要满足以下条件:1.体积小,携带方便2.播放效果好,音质清晰3.具备大容量存储功能,可以存储大批量音乐文件4.操作简便,易于上手二、硬件设计嵌入式音乐播放器的硬件设计是整个设计过程中最为关键的一环。
硬件设计需要根据需求分析确定芯片、存储器、屏幕、输入输出接口等硬件配置,并进行电路板设计和测试。
1.芯片选择由于体积小、功耗少是嵌入式设备的特点,因此嵌入式音乐播放器需要选择一款功耗低、性能卓越的处理器芯片。
例如可选用Cortex-M系列中的STM32F407VG微控制器。
2.存储器嵌入式音乐播放器需要搭配存储容量大的闪存芯片,一般选择SD卡或EMMC闪存。
同时,为了提高数据读取速度,还需要使用高速存储器接口。
3.屏幕屏幕是嵌入式音乐播放器的一个重要组成部分,选择一款品质好的TFT液晶屏幕可以提供更好的视觉效果。
4.输入输出接口嵌入式音乐播放器需要搭载各种输入输出接口,以方便用户连接。
例如可以设计一个USB接口,支持数据传输和充电两种功能。
三、软件设计嵌入式音乐播放器的软件设计可以分为几个部分,主要包括驱动程序、底层软件、中层软件和应用程序。
1.驱动程序驱动程序负责管理嵌入式音乐播放器的各项硬件设备。
由于嵌入式设备资源有限,因此需要对外部设备和硬件资源进行有效的调配。
例如需要管理存储设备、USB接口、屏幕等。
2.底层软件底层软件是嵌入式音乐播放器的核心部分,主要包括操作系统、I/O处理机制、数据传输机制等。
基于嵌入式文件系统的MP3播放器的设计和实现的开题报告

基于嵌入式文件系统的MP3播放器的设计和实现的开题报告一、选题背景和意义随着科技的不断发展,MP3播放器已成为人们日常生活不可缺少的一部分,便携式MP3播放器靠着小巧便携、存储空间大、支持多种音频格式等优点,深受人们的喜爱。
嵌入式应用领域中,MP3播放器也得到越来越广泛的应用。
随着嵌入式硬件和软件技术的逐渐成熟,嵌入式MP3播放器设计的难度逐步降低,而且市场上也已存在不少成熟的MP3播放器开发板,对于初学者而言,可以上手实践调试。
MP3播放器需要支持多种音频格式,如MP3、WMA、WAV等等,为保证存储空间的充分利用,需要对音频文件进行压缩存储。
此外,嵌入式的设备资源有限,考虑到存储空间和计算资源限制,我们可以选择一款高效且小巧的嵌入式文件系统来实现对音频文件的存储和管理,避免存储空间的浪费和RAM占用过多,最大限度地提高嵌入式设备的运行效率。
因此本项目的设计实现将基于嵌入式文件系统进行。
二、技术路线和实现方法本项目的开发技术包括:C语言开发、Qt图形化界面设计、嵌入式系统和嵌入式文件系统的相关知识等。
其具体实现方法如下:1. 硬件平台硬件平台采用STM32系列单片机,包括开发板、OLED显示屏、音频模块等。
2. 软件开发(1) 嵌入式文件系统的选取。
可行的文件系统方案有很多,例如YAFFS2、JFFS2等等。
在考虑ROM及RAM占用、速度、可靠性等方面后,我们选择采用FatFs文件系统,它是一款可移植、底层操作系统无关、开放源代码的文件系统。
它不仅支持SD卡的读写操作,同时也支持U盘、Nand Flash等存储介质的文件系统。
(2) 音频解码的实现。
音频解码方案可以采用FFmpeg或libmad等库,将编码后的音频文件解码成PCM数据,然后将数据送入DAC芯片,驱动音频输出。
(3) 界面设计。
使用Qt图形化界面设计开发界面,界面需包含音乐列表、音乐控制按钮、进度条、音量调节等模块。
3. 实现步骤(1) 硬件相关的开发,包括基本硬件的搭建、扩展模块的接口、底层驱动程序的编写、音频板的接口、音频ADC的读取和DAC音频的输出等。
嵌入式MP3播放器

嵌入式MP3播放器一、系统要求●JXARM9-2410A教学实验箱●PC机(Pentium(R) Dual-Core CPU E6700 @3.20GHz 1.60GHz、2GB RAM)●RedHat Linux OS with arm-linux-gxx二、设计要求能够使开发板通过音频输出口输出当今比较流行的音频格式解码后的信号(MP3,WMA,ACC等)。
在播放控制方面能够实现最基本的流程控制(播放、暂停、快进、快退)并能够实现播放列表功能。
三、系统软硬件平台本次课程设计使用的硬件平台是创维特公司生产的JXARM9-2410嵌入式开发板,核心部分为一块载有Sansumg s3c2410的ARM处理器的核心板(最小系统),该最小系统还包含有32MB的FLASH和64MB的RAM。
只有核心板还不能完成设计任务,因为设计题目中需要使用声音设备,所以还必须具备音频处理模块。
在调试过程中需要在PC机上运行DNW超级终端与开发系统通信,所以还用到了一个串口,并且,内核文件以及移植的程序需要通过TFTP下载到开发系统上,因此还需要一个以太网口模块。
开发系统外设板逻辑电路图如下(来自创维特网站):图1 外设板逻辑电路图四、嵌入式Linux的编译与下载下图所示为本课设所采用的实验环境以及开发流程。
在主机的RedHat Linux 操作系统下安装Linux 发行包以及交叉编译器arm-linux-gcc。
然后对Linux 进行配置(make menuconfig)并选择适合本课设系统的相关配置,配置完成后进行编译生成Linux 映像文件zImage。
然后通过u-boot 的tftp 命令将该文件下载到目标板并执行。
图 2 Linux内核开发流程有关于Linux系统的安装和交叉编译器的安装过程不是本课设关心的主要问题,在此就不详细介绍了。
下面将详细介绍Linux内核的编译过程以及将内核下载至开发板上并启动的过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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所示。
VS1003STM32图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 卡MSD_SendCmd (MSD_READ_ SIN GL E_BLOCK,ReadAddr ,0xFF) ; / / 发送读取块命令/ / 检测SD 卡是否有返回信息,若是则返回0x00if ( !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() ; / / 缓存收到的数据图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 :读取文件数据。