基于单片机的音乐播放器设计.doc_第1页
基于单片机的音乐播放器设计.doc_第2页
基于单片机的音乐播放器设计.doc_第3页
基于单片机的音乐播放器设计.doc_第4页
基于单片机的音乐播放器设计.doc_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

扬州大学本科生毕业设计 本科生毕业设计 毕业设计题目 基于单片机的音乐播放器设计 学 生 姓 名 所 在 学 院 能源与动力工程学院 专业及班级 指 导 教 师 完 成 日 期 20 年6月2日 摘要本论文首先针对基于SD卡的MP3的播放器整体设计加以研究和介绍,并讨论系统软硬件的选择,及具体开发调试环境;然后,深入介绍了系统设计方案及其实现,并着重研究了SD卡、FAT格式、解码芯片及其软件驱动的设计;最后,详细介绍了性能优化等方面的工作及其开发前景。本设计在Atmel公司生产的atmega8L单片机上实现并取得了较好的效果。关键词:MP3播放器,AVR单片机, SD卡,音频解码,FAT分析ABSTRACTIn this paper, first of all for the SD card-based MP3 player to study the overall design and presentation, and discuss the system hardware and software choices, and specific developing and debugging environment; and then insight into the system design and its implementation, focusing on the SD card, FAT format, decoder chip and software-driven design; Finally, the detailed performance optimization aspects of the work and its development prospects. This design produced by the Atmels microcontroller ATmega8l to achieve and has achieved good results.KEY WORDS:MP3 Player, AVR Micro Chip Unit, SD Card, Audio Decorde, FAT ansysly目录摘要IABSTRACTII第一章 绪论11.1 基于单片机的MP3概述11.1.1 基于单片机的MP3系统组成11.1.2 基于单片机的MP3播放器特点21.2 课题研究的背景及意义21.2.1 课题研究的背景21.2.2 课题研究的意义41.3 论文研究的内容和目标41.3.1 论文研究的内容41.3.2 论文研究的目标5第二章 硬件设计62.1 AVR单片机简介62.2 AVR单片机性能接口分析72.3 基于SD卡的MP3接口设计72.3.1 ATmega8l引脚介绍72.3.2 ATmega8l接口介绍与设计9第三章 软件设计163.1 软件设计流程163.2 键盘程序设计173.3 SD卡驱动程序设计173.4 FAT驱动程序设计193.5 VS1003B驱动程序设计223.6 MP3软件运行设计24第四章 总结274.1 基于单片机的MP3播放器测试结果274.2 前景与展望27参考文献28致谢30附录3191第一章 绪论1.1 基于单片机的MP3概述1.1.1 基于单片机的MP3系统组成基于单片机的MP3播放器主要由主控制器、SD卡、解码芯片、键盘等四个部分组成。其基本框架如下图所示。 图1-1 基本框架图1.控制模块控制模块是整个系统的核心。主要完成对系统中各种芯片的输入、输出控制,也是实现数据交换、软硬件接口的中心模块。2.解码模块这是系统中又一重要模块。其主要功能是实现对数据进行处理并输出模拟信号驱动耳机发声。3.输入模块此模块可大致分为键盘部分和SD卡部分。键盘部分主要用来控制对MP3的操作。SD卡部分主要是对SD卡的读取。4.输出模块此部分主要包括音频输出。音频输出主要会用到一些模拟电路,对电路进行去噪等。1.1.2 基于单片机的MP3播放器特点在半导体行业中,消费类电子是近年来发展最迅猛的一个领域。2006年消费类电子在中国Mcu市场的需求所占份额超过了百分之四十1。现在mp3技术已基本成熟,一般mp3都采用专用DSP芯片和集成的数据程序存储器。集成数据存储器优点是成本低廉,但是,这样却无法方便的进行容量的扩展。因此,本次论文在于设计出能够用SD或CF卡作为音乐存储介质的存储器,从而,使mp3的容量能够方便地得到扩展。随着现在存储器微型化快速发展,无法扩展容量的mp3已经很难满足人们的需求。虽然现在一些mp3容量已经达到2G、4G甚至8G。但是,由于其容量无法扩展,为用户以后的使用造成了极大不便。当用户想要扩展容量时,不得不再换一个新的mp3。这样就造成了用户成本上的增加,会使用户觉得得不偿失。而SD卡mp3的出现则可以解决用户的这一烦恼。这也是本次设计的优势所在。另外,mp3为了达到音质效果的完美,往往采用高档DSP器件作为专门的解码播放芯片,这样虽然在效果上取得较大的突破,但是,由于mp3格式本身的限制,因此,即使尽可能提高系统性能和效果也会有一定限制,不可能无限制地提高,而且这些提高对于成本来说是得不偿失的。所以,这类mp3价格是一般mp3的好几倍。因此,本次论文并不采用这种DSP器件作为mp3载体,而是采用一般的单片机控制和mp3格式解码芯片实现。由于社会上的大多数人群都属于低端消费者,也并不是专业的音乐欣赏者,他们对音乐的要求并不高。因此,此次设计的播放SD卡数据的mp3能够适合于大多数人群。1.2 课题研究的背景及意义1.2.1 课题研究的背景便携式音乐播放器的历史从1979 年Sony 的Walkman TPS-12 随身听的问世开始。这台磁带机音乐系统开启了个人娱乐市场的大门,在此之前,人们只能呆在家里用笨重的立体声录音机欣赏音乐2。至今,便携式音乐播放器产品已经经历了磁带机、CD 机、MD 播放器、MP3播放器四个阶段3。1980 年,索尼和飞利浦共同制定了数字音频光盘格式的标准,光盘直径为12 厘米,采样频率44.1K,比特率1411.2Kbps,16 位音频数据,CD 的音轨可以说几乎是无损的。一张光盘可以容纳75 分钟的音乐。1982 年索尼推出的D-50 是真正意义上的CD 随身听,拉开了CD 随身听的序幕。1990 年左右发展达到了鼎盛时期。时至如今,不管音乐播放器的未来怎么样发展,CD 这承载完美音质的载体永远不会落伍,即使因为体积上有着无法回避的缺点3。 1989 年,德国人Brandenburg 的博士论文,为MP3 这一数字音频压缩技术提供了理论基础。1995 年诞生的MP3 标准具有较高的压缩比以及较小的音质损失,是音乐史上划时代的革命性技术。这种数字音乐压缩技术的诞生和流行,推动了MP3 随身听的开发和应用。在MP3 标准诞生不久的20 世纪90 年代后期,便携式MP3 音乐播放器正式登场2。从1995年上半年开始直到整个九十年代后期,MP3开始在因特网上蓬勃发展。MP3的流行主要得益于如Nullsoft于1997年发布的Winamp和Napster于1999年发布的Napster这样的公司和软件包的成功,并且它们相互促进发展。这些程序使得普通用户很容易地播放、制作、共享和收集MP3文件4。1998年Saehan公司推出了世界上第一台的MP3播放器MPMan F10。MPMan,取意于MP3与WALKMAN的结合。MPMan F10的体积为70x90x16.5mm,约有四个1.44M软盘堆叠起来这么大,体重为65克,可谓非常轻巧5。在世韩的MPman F10为人们带来了惊喜之后,美国的帝盟(Diamond)公司挑头,于1998年底推出了Rio PMP300,这是第一个让全世界都印象深刻的MP3。Rio PMP300最大的优点就是可在互联网上下载MP3而不用花一分钱5。MP3文化的标志Apple iPod。诞生于2001年10月,作为一款MP3,它在很多方面并不出色:价格高、音质一般、使用时间短以及缺乏对Windows的支持等等,但它却是第一个把互联网音乐与MP3随身听捆绑销售的产品。许多人都愿意付少量钱到Apple官方站下载单歌,或使用包月制的无限时Download,iPod真正让唱片公司获得利润,所以得到了消费者和唱片商的双重支持5。直到2004年,MP3行业不平凡的一年。随着随身听的发展,人们已经越来越被迷你小巧的MP3所征服,原本人们对于MP3音质上的顾虑,已经被现有MP3高品质所打消。在这一年中,无论是从本身的品质,还是市场销售的情况来看,MP3已经完全占有了市场,成为随身听行业的霸主6。当MP3在容量、外观、音质上的发展无法再吸引更多眼球的时候,开始转向多功能方向发展。正如在手机身上所发生的一切,人们对于MP3的要求,不再是单一的欣赏音乐,而是能像手机一样身兼多职5。而目前消费类电子产品的发展呈现出数字化和多功能集成化的明显趋势7。在MP3的研究上,由于市场趋近饱和,大多数公司都将精力集中在外观造型上,对于其功能及性价比的探索趋势相对较弱。1.2.2 课题研究的意义本次论文主要是为了开发出一套低成本、可扩展容量的MP3。现在一般个人随身携带使用MP3存在容量固定,性价比较低的情况。此次论文便是根据这些情况而设计。此次设计的突出优势是:1、突破了存储容量限制。本系统提供了SD卡接口,可以方便地访问外部的移动存储介质,这样就不会有特定的容量限制。当前,个人多媒体娱乐市场的需求快速增长,各种多媒体的应用也日趋丰富,对存储容量的要求必然越来越高,因此本系统采用的方案可以说是应势而生。2、低成本。由于MP3 编码算法的CPU 的性能要求非常,因此目前大部分的MP3实时编码都是采用专用的DSP 芯片来实现,这些芯片大部分价格较高8。本系统采用通用单片机处理,对MP3算法做了硬件方式的实时编码满足音质要求。设计中又将汉字存储芯片移除,大大降低了系统的成本。1.3 论文研究的内容和目标1.3.1 论文研究的内容1分析FAT32磁盘文件格式。由于此次论文要求对SD卡数据进行读写,而现在大多数SD卡的数据格式几乎都是FAT16或FAT32格式。其内部数据存储方式及引导区大小等情况显得尤其重要。如果忽略此环节,势必在读取数据时造成错误,对结果造成重大影响。2分析mp3文件格式。在进行MP3播放时,MP3解码器并不能够完成数据的分析任务,它只能根据控制部分给出的控制方式及速率接受并运算数据,并将其转换为相应的模拟信号。故进行MP3格式的分析可以帮助我们编写相应分析程序,并为控制MP3解码芯片作出必要的准备。3分析出mp3解码方法。在使用MP3解码芯片解码时,必然会用到解码相关知识。而且,在将数据送到MP3解码芯片前,对数据做必要的处理也可以提高MP3解码芯片处理效率,增加设计的可实现性。如果对MP3解码不够了解,就可能导致设计的失败。4了解mp3解码芯片的相关使用。对于不同的MP3解码芯片,其操作、控制字及外围电路也各不相同,找出性价比高且外围电路简单的芯片就显得比较重要。这不但可以降低成本,也会大大提高系统的可行性并降低系统成本。5对Mini SD卡的初始化及文件读写。SD属于存储设备,但是,它却与一般存储设备不同。其与集成芯片相似,需要对其初始化才能正常工作。而对其进行读写操作也与其它存储器不同,每次读写均需写入相应的命令控制字,否则,对SD卡的操作均为无效操作。1.3.2 论文研究的目标1能够完成对SD卡或CF卡的初始化及SD卡中mp3数据进行读取。2通过mp3解码芯片播放出原音频文件。3通过控制部分,能够进行上一曲、下一曲的切换等。第二章 硬件设计本章着重介绍基于SD卡的MP3播放器设计的硬件设计。其设计流程如图2-1所示。图2-1 硬件框图2.1 AVR单片机简介一般MP3文件大小都在3-8MB之间,而每个文件的播放时间为5分钟左右,按这样计算,单片机的处理能力必须在200kb/s以上,再加上SD卡的读取时间、解码时间和单片机自身需要的控制指令时间,因此,单片机的处理能力必须在600kb/s以上,即每微秒执行1.6条指令。而51系列单片机大部分指令为双周期指令,其工作频率在12MHZ时,每条指令需要2m,所以,本论文采用AVR系列的ATmega8l单片机,其具有更高的工作性能。下面我们作以简单介绍。ATmega8l单片机属于AVR单片机中配置较高的产品。它在AVR内核基础上,增加了更多的功能,并完善了接口性能,在省电、稳定性、抗干扰以及灵活性方面也考虑得更加周全和完善,所以,ATmega8l单片机的系统结构相对于其他AVR单片机结构来说复杂一些。ATmega8l单片机是基于AVR RISC结构的8位低功耗CMOS微处理器。其内核具有丰富的指令集和32个通用工作寄存器。所有的寄存器都直接与算术逻辑单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码的效率,并且具有比普通的复杂指令集微处理器高10倍的数据吞吐率9。ATmega8l单片机的内部资源有先进的RISC指令集、非易失性程序和数据存储器、JTAG接口、特殊功能接口。其中,RISC指令集有32个8位通用工作寄存器,支持全静态工作,工作于16MHz时性能高达16MIPS,内部含有RC振荡电路,并且还有只需两个时钟周期的硬件乘法器。单片机内部还含有32KB系统内可编程Flash,其可擦写周期达到10,000次,独立的锁定位,可对芯片进行软件加密以及1KB的EEPROM和2KB的片内SRAM。最值得一提的是,ATmega8l单片机内部含有8通道的10位ADC电路,4路PWM通道,可编程串口和支持主机/从机工作模式的SPI接口。其中,SPI接口通信速度可达到2MB/s,由于本次设计的SD卡及解码芯片均含有SPI接口,因此,这种接口给设计带来了很大方便。而且,其内部含有RC振荡电路,无须提供外部时钟仍然能够正常工作。2.2 AVR单片机性能接口分析因为ATmega8l单片机在工作在16MHz时能达到16MIPS(即16百万条指令每秒)的速度,即,它每执行一条指令的时间为0.0625s,这种速度是51系列单片机的12倍。从上面的分析我们知道,MP3所需单片机性能要求约为每微秒执行1.6条指令。故,ATmega8l单片机符合设计MP3的系统要求,能够通过它实现MP3的设计。另外,SD卡含有集成的SPI接口。使用专门的SPI接口比使用位操作模拟接口时序的方法操作更简单,效率也更加高。其工作速度与振动器频率的关系如表2-1所示。从上表我们可以知道:当ATmega8l工作于16MHz时,其最大传输速率可以达到16MHz/2=8MHz。这个速度完全可以满足MP3的播放要求。2.3 基于SD卡的MP3接口设计2.3.1 ATmega8l引脚介绍在进行单片机的接口设计以前,我们首先来了解并分析一下ATmega32单片机的引脚。其具体结构如图2-2所示。图2-2 ATmega8l引脚图引脚说明:VCC:数字电路的电源。GND:地。端口B(PB7.PB0)XTAL1/XTAL2/TOSC1/TOSC2:端口B 为8 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口B 处于高阻状态。通过时钟选择熔丝位的设置, PB6 可作为反向振荡放大器或时钟操作电路的输入端。通过时钟选择熔丝位的设置PB7 可作为反向振荡放大器的输出端。若将片内标定RC 振荡器作为芯片时钟源,且ASSR 寄存器的AS2 位设置,PB7.6 作为异步 T/C2 的TOSC2.1 输入端。端口C(PC5.PC0):端口C 为7 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口C 处于高阻状态。PC6/RESET 若RSTDISBL 熔丝位编程, PC6 作为I/O 引脚使用。注意PC6 的气特性与端口C 的其他引脚不同若RSTDISBL 熔丝位未编程,PC6 作为复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。门限时间见P 35Table 15 。持续时间小于门限时间的脉冲不能保证可靠复位。端口D(PD7.PD0):端口D 为8 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口D 处于高阻状态。RESET:复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。持续时间小于门限时间的脉冲不能保证可靠复位。AVCC: AVCC 是A/D转换器、端口C (3.0) 及ADC (7.6) 的电源。不使用ADC时,该引脚应直接与VCC 连接。使用ADC 时应通过一个低通滤波器与VCC 连接。注意,端口C (5.4) 为数字电源, VCC。AREF :A/D 的模拟基准输入引脚。2.3.2 ATmega8l接口介绍与设计首先,介绍一下时钟和复位电路的设计。1.时钟电路的设计。ATmega32单片机时钟电路可以采用三种设计方式。方式一,采用内部RC振荡电路。采用此种设计时要保持XTAL1和XTAL2为空,这样可以减少MP3体积大小,但是,这种方式下,不能对CK-OPT进行编程,且频率受温度影响较大。方式二,采用外部RC振荡电路。这种电路可以减少晶体振荡器的使用,但是,会要增加一个电阻和电容。而且,这两种器件一般情况下精度有限且抗干扰能力不足,延时不够精确。因此,这种方式只适用于对时间不敏感场合,在本次设计中不能使用。方式三,采用石英晶体振荡器。石英晶体频率较稳定,抗干扰能力较强。只是,启动时频率稳定性较差。但是,可以通过软件延时的方法消除这个问题。综上,本次设计中可以采用方式三。而在实际大批量生产时可以采用方式一。具体电路如图2-3所示。图2-3 时钟电路2. 复位电路的设计。ATmega8l单片机与51单片机不同,它使用的是低电平复位,其连接方法比较固定,本次设计中我们采用一般接法。如图2-4所示。图2-4 复位电路刚上电时,由于电容C5的作用,REST引脚会保持一段时间的低电平,使电路复位,然后,缓慢变高,使电路进入正常工作状态。当按键按下时,REST与地接通变低电平,电路发生复位。3,按键电路。按键电路如图2-5所示。图2-5 按键电路4,电源电路。由于SD卡的供电及接口标准电压均为3.3V。因此使用AMS1117进行降压,电源电路如图2-6所示。图2-6 电源电路最后,介绍一下SPI接口及其电路设计。这是本次设计的最重要的接口,它工作性能的好坏直接影响到本次设计的成败。SPI系统的发送方向只有一个缓冲器,而在接受方向有两个缓冲器。即是说,在发送时一定要等到移位过程全部结束后,才能对SPI数据寄存器执行写操作。而在接收数据时,需要在下一个字符移位过程全部结束前,通过访问SPI数据寄存器读取当前接受到的字符;否则第一个字节将会丢失。其数据传递过程如图2-7所示。图2-7 SPI主从机的连接10从图中可以看出:SPI接口内部数据全由寄存器控制,在进行数据移出的同时也在进行数据的移入。其中,还有一个SPI接口使能端口SS,通过这个端口,我们可以控制SPI的使用。同时,我们可以通过设计模拟其工作特性的硬件引脚,从而达到节约端口、操作方便的目的。在本次设计中,我们采用SD卡作为数据存储介质。因此,我们现在来分析一下其接口及数据传输模式。SD卡有9个引脚,它们分别是:VCC、GND、DAT0-DAT3、CLK、CMD。其中,它们在不同的模式下有不同的定义。其具体定义如表2-2所示。表2-2 SD卡引脚定义针脚名称类型1描述1CS/DAT3I/O/PP卡监测/数据位32CMD/MOSIPP命令/回复3VssS地4VccS供电电压5CLKI时钟6Vss2S地7DAT0/MISOI/O/PP数据位08DAT1/IRQI/O/PP数据位19DAT2I/O/PP数据位21:S:电源供电,I:输入O:输出 I/O:双向 PP:I/O使用推挽驱动SD卡的总线概念SD卡数据传输分为SPI模式和SD模式。在SD模式下速度较快,但是,由于使用引脚过多,而且,在SPI模式下速度已经足够,因此,本次设计中采用SPI模式。在SPI模式下,SD卡只需要接MISO、MOSI、CLK、CS、CLK、Vss、Vcc这7个引脚就可以了。而ATmega32单片机也提供了相应的接口。但是,由于AVR单片机的接口标准电压为5V,SD卡的供电及接口标准电压均为3.3V。因此在ISP借口处接入5V工作电压。如图2-7所示。图2-7 SD卡接口电路解码作为MP3必不可少的部分,它的设计也关系着整个设计的成败。下面这种介绍一下这部分的设计步骤。第一步,我们必须选择一款解码芯片。这款芯片应该尽可能包含解码、放大电路。其次,要求价格实惠、外围电路简单等。在本次设计中,采用了VS1003B。这是一款专用音频解码芯片。芯片内部包含MP3、wma等硬件解码,还包含放大电路。其体积较小,外围电路也比较简单。第二步,管脚分析。其引脚如图2-8所示。它的模拟、数字及I/O口电源是分开的,其也含有SPI接口,支持2.5V电源供电,接口电源采用3.3V,可以进行串行通信,硬件复位等。图2-8 VS1003B引脚图12根据数据手册中提供的信息,要成功运用VS1003B这款芯片,还必须注意:当不使用RX引脚时应接到IOVDD上。TEST为测试保留,也应该连接到IOVDD上。GPIO0需要使用100K欧下拉电阻。其它引脚可以根据其定义进行连接。未使用功能可不进行连接。第三步,接口设计。根据第二步中管脚分析结果。我们仍然需要对芯片输入引脚进行电平转换。这里我们仍然采用电阻分压的方式。主要输入引脚为数据选择、命令选择、复位、时钟、查询忙、数据输入。具体电路如图2-9所示。图2-9 vs1003电平转换电路另外,还有第二步中介绍的时钟、电源以及特殊引脚的连接。由于使用的是成熟的音频解码芯片,硬件连接方式比较固定,且其数据手册给出了示例,不需要太多自行设计部分,只要根据时序设计好软件,便可以实现各种功能。图2-10 vs1003b连接电路自此,基于SD卡的MP3播放器硬件部分设计全部完成。在设计中充分考虑了以后的升级扩展等问题。但是,在电平转换时使用了较多的电阻实现,对系统模型最终大小有一定影响。在实际生产中可以用贴片电阻代替,这样就可以大大减小电路板的体积。第三章 软件设计3.1 软件设计流程前一章介绍了硬件电路的设计,本章就要根据相应的硬件,进行软件设计。软件设计可以分为自底向上或自顶向下的设计方法,这里我们采用后者。首先,我们分别对键盘、SD卡、FAT、vs1003b进行驱动程序设计,然后,对这些驱动程序加以排列、组合,做到最优启动顺序,最后进行高层人机接口程序的设计。为了能够明确我们具体所需的驱动程序设计,下面我们先将设计的总体程序流程图确定下来。如图3-1所示。否是是开始初始化各驱动程序是否有歌曲否结束播放一帧数据扫描键盘一次获取歌曲信息读入一帧数据歌曲是否结束下一曲图3-1 程序流程图在完成程序流程图之后,我们需要分别对各个部分进行程序设计,下面就分别介绍各种驱动程序的编写方法。3.2 键盘程序设计键盘部分:由于键盘在设计中使用的是2*3的矩阵键盘,所以在编写程序时相对较为麻烦。必须先将其中的2个设置为输出低电平,另外3个引脚设置为输入。当检测到3输入引脚有低电平输入时,为了防止是干扰,使用软件延时10ms再次检测,若仍然为低电平,则说明有键按下,读出键值;然后,再将另外3个引脚设置为输出低电平,原来的2个引脚设置为输入,使用同样的办法可以读出按键值。这样得到的两组按键值可以组合成唯一的一个按键值。在扫描按键时,不用进行过多的处理,处理越多,耗时越多,对输出的声音影响也就越大,所以,在扫描程序中,只需要将按键值返回即可,不需要进行太多处理。对于键盘接口的设置,可以利用一初始化程序,将接口进行一种定义,这样,在扫描过程中程序可以节约更多的时间进行数据的读写。3.3 SD卡驱动程序设计SD卡使用的是SPI模式,这种总线接口在AVR单片机中可以直接使用其寄存器加以控制。因此,在编写SD卡驱动程序之前,必须先将单片机的SPI总线初始化。其具体代码如图3-2所示图3-2 SPI总线初始化代码段在初始化SPI总线时,一般总线设置为低速模式,因为大多数器件在其初始化过程中,都不能有太高的速度,否则,很容易造成部分指令不能被接收,导致初始化失败。在MP3播放过程中,用单片机作为控制中心,所以,在设置时还应该将单片机设为主机,其它模块作为从机。在单片机SPI总线初始化完成后,就要对SD卡进行初始化。初始化SD卡,必须先对SD卡进行激活,其激活步骤如图3-3所示。在SD卡被激活后,就可以进行初始化操作。初始化时,我们必须进行一下设置:1.设置一次读写SD卡数据块的长度;2.开启或关闭校验位,这里我们选择关闭校验位,因为在SD卡使用过程中会有数据起始标志位等,而且SD卡在低速模式下,本身读写出错的可能性不大。另外,SD卡的数据、指令长度为32位,而SPI总线为8位,在使用过程中还需要编写一些接口函数以便编写SD卡控制函数,操作SD卡。在开始激活时序时,至少需要先发送108个初始时钟,才能够进行后面的步骤。在我们平常使用的mini卡中,还包含很多MMC卡。这两种卡的使用指令基本相同,唯一的差别是激活时的最后几条指令。因此,我们可以在本次设计中加入几条关键性指令,判断并激活两种微型存储卡。在不知道使用的是什么类型的存储卡时,可以用一般办法判断存储卡的类型。即,在写入55H返回01H且写入41H返回00H,则说明是SD卡;否则,写入01H返回00H,则为MMC卡。图3-3 SD卡激活步骤15在初始化SD卡完成后,需要对本次设计中需要使用的一些特殊功能进行设计,如是否需要校验位,一次读写的数据长度为多少等。当SD卡激活并完成初始化后,就可以对SD卡数据进行读写了,其读取数据会在歌曲播放过程中经常使用,因此,我们可以编写一个读函数。只要需要读取数据时,只需要调用此函数就可以获得所需数据。3.4 FAT驱动程序设计当读取到SD卡中的数据后,我们还不能直接使用这些数据,这些数据是根据微软制定的FAT/NTFS格式排列存放的。其中,在磁盘的开始区域存放的是磁盘系统的相关信息。当我们读取到这些信息时,还需要进行一些相应的计算,找出其中的MP3或其它音乐格式文件的数据入口地址、结束地址等,这样,单片机才能够获得相应的数据,并对数据进行分析送给解码芯片解码。现在市场上大多数SD/MMC卡都采用的是FAT32格式,因此,下面我们就开始以FAT32格式为例进行分析。在本次设计中,为了能够方便地看到SD卡内部数据,我们采用WinHex软件对SD看内部数据进行分析。每张磁盘都有自己固定的存储结构。磁盘的第一个区域是系统区,从0面,0磁道,1扇区开始。系统区一般用来存放系统存储和维护的信息,系统区由三部分组成:1.引导记录(包含磁盘大小、格式、存储方式等信息);2.文件分配表FAT(为文件分配磁盘空间);3.目录(包括文件名、磁盘地址和文件状态)16。其具体结构如图3-4所示。引导记录FAT目录系统文件用户文件系统区数据区图3-4 系统区和数据区组织图本次设计中,需要对引导记录进行详细分析,计算出数据位置,找到音乐文件。而在引导区最重要的部分为前512字节。在前512字节中,前96字节记录了系统的详细信息,这些信息可以帮助我们算出系统区和数据区各组成部分的位置。其内部前96个字节如图3-5所示。图3-5 SD卡前96字节截图在图3-5中,每个字节含有为:前3字节为跳转指令结构;4-11字节为依赖的系统文件名;第12、13字节为字节数/扇区;14字节为扇区数/簇;15、16字节为保留扇区数;17字节为FAT数目;18、19字节为启动入口;19-21字节为小卷标扇区数;第22字节为多媒体类型描述(一般为F8);23、24字节为扇区数/小卷标FAT;25、26字节为扇区数/磁道;27字节为头字节数;29-32字节为隐藏扇区数;第33-36字节为磁盘总扇区数;37-40为扇区数/FAT;41字节为扩展标志位;42-44字节为磁盘版本号;45-48字节为启动目录的第一簇;49-50启动信息扇区位置;51、52字节为启动数据备份扇区位置;另外,83-87字节为文件系统格式;其余信息在本次设计中暂未用到。知道以上信息及其含有,我们就可以计算出磁盘数据的位置等信息。为了能够方便地使用这些信息,在设计中可用如图3-6所示的结构体进行赋值,使程序能够高效的运行。在知道以上信息后,可以采用下面计算公式进行计算,算出数据所在位置。FAT表起始地址=(隐藏扇区数+保留扇区数)*字节数/扇区目录区起始地址=FAT表起始地址+FAT数目*扇区数/FAT*字节数/扇区+启动目录首簇*扇区数/簇*字节数/扇区第一个数据扇区地址=目录区起始地址+目录簇数*扇区数/簇*字节数/扇区目录区的大小是不固定,其大小会根据文件的多少而进行调整,只有在一个文件目录后不存在其它文件,才说明已经不含有其它文件。因此,在读取到的数据名为00H时,就说明文件已经结束,可以不再往后面读取文件。图3-6 启动信息结构体在获取到启动信息以及数据区等位置关系以后,就可以读取自己需要的数据了。在使用过程中,我们可以编写一些专门用于计算文件下一簇/扇区的程序,这样就可以通过调用函数的方法方便地找到自己需要的数据,判断文件是否结束等情况。3.5 VS1003B驱动程序设计设计MP3最重要环节之一是音频解码,解码质量直接关系到播放效果。本次设计中使用的是解码芯片VS1003B,那么,编写VS1003B的驱动程序就是解码中关键环节。VS1003B有一个硬件复位引脚,在进行硬件复位后,还需要进行初始化设置,和音乐信息相关的设置,这样才能让其正常工作。因此,下面对MP3文件格式做简略介绍,以方便对VS1003B进行设置。MP3文件是由帧构成,帧是MP3文件最小组成单位。MP3文件大体分为三部分:TAG_V2(ID3V2),Frame,TAG_V1(ID3V1)17。每个MP3数据帧又分为帧头和数据部分构成。帧头长度为4BYTE(32位),帧后面可能有两个字节的CRC校验。帧头数据结构如图3-7所示。图3-7 MP3帧头结构A表示帧同步,所有位置位;B表示MPEG音频版本;C表示音乐层描述;D为保护位;E为位速率索引;F表示采样频率索引;G为填充位;I为声道模式;其余信息与本次设计关系不大,暂未使用,这里不做介绍。以上介绍中最重要的为E和F部分。E部分具体含义如表3-2所示。表3-2 位速率索引表BitsV1,L11V1,L2V1,L3V2,L1V2,L2V2,L30000FreeFreeFreeFreeFreeFree000132323232328(8)0010644840644816(16)0011965648965624(24)010012864561286432(32)010116080641608064(40)011019296801929680(48)01112241129622411256(56)100025612811225612864(64)1001288160128288160128(80)1010320192160320192160(96)1011352224192352224112(112)1100384256224384256128(128)1101416320256416320256(144)1110448384320448384320(160)1111BadBadBadBadBadBad1:V1 - MPEG1; V2 MPEG2/MPEG2.5;L1 - Layer I; L2 - Layer II; L3 - Layer III2:Free 可以利用的位率;Bad 不允许的值在帧头B、C部分可以查到MP3版本及层数,根据B、C的值在上表中可以查出音乐播放速率。F区决定音乐采样率,而采样率值则通过表3-3可以查出。表3-3 采样率索引表(单位:Hz)BitsMPEG1MPEG2MPEG2.50044100220501102501480002400012000103200016000800011ReservedReservedReserved无论帧长度是多少,每帧的播放时间都是26ms;每帧的大小可以通过以下方法计算得出:帧大小=(MPEGversion=MPEG1?144:72)*比特率)/采样率)+填充位。当计算出帧大小波特率和采样率后,我们就可以对MP3文件进行解码。在对MP3格式做简要介绍后,下面就对VS1003B解码芯片做一些重要说明。其硬件连接方式在第二章已经做了说明,此次设计中使用的是SPI接口,另外还连接了复位端、数据请求端、数据端及命令端。VS10003B接口指令为8位,0X2为写;0X3为读。一般我们只需要写,只有在验证写入是否成功时,才读VS1003B内部寄存器。在每次读写数据后,数据请求端会变低表示忙。只有当数据请求端变高后才能进行数据/指令读写。其具体时序如图3-8所示。图3-8 VS1003B写数据时序图18根据时序图可以看出:要操作VS1003B,需要一条8为指令,再跟上8位地址,和写入该地址的16位数据。然后,DREQ会变低,直到内部完成数据的操作。VS1003B初始化时,需要对模式寄存器、时钟频率及倍频寄存器、音量寄存器进行设置。另外,还需要对音频寄存器进行设置,其取值由具体MP3文件帧头数据计算得到,计算过程在MP3分析时已经说明,这里不再解释。在进行初始化设置以后,就可以进行数据送入解码芯片进行解码。由于软件复位不会改变这些寄存器的值,我们在进行歌曲切换时可以进行软件复位,这样,在进行歌曲切换时可以不用进行其它复杂操作,直接进行软件复位就可以了。另外,DREQ引脚在VS1003B的FIFO在能够接受数据的时候输出高电平。此时,VS1003B可获取至少32Byte的SDI数据或一个SCI命令。遵循这个标准,当DREQ变低时,发送器必须停止发送新的数据19。根据这个信息,我们在对VS1003B芯片大量写入音乐数据时,可以一次性写入32字节,这样就可以大大提高数据输入的效率,让音乐播放更为流畅。3.6 MP3软件运行设计在完成了各种驱动程序设计后,就需要对音乐播放流程、界面和操作进行设计。如果在播放过程中,没有好的界面及人机接口程序,就会不利于使用者操作,而且,在使用过程中,客户由于不知道怎样操作,胡乱按键就容易造成其它未知错误。因此,下面我们就怎样进行整体设计做简要说明。首先,程序需要对系统进行初始化。初始化各个驱动的顺序必须有严格规定,应该从键盘开始,到显示器,再到SPI接口初始化,到SD卡和FAT格式初始化,最后是VS1003B的初始化。采用以上顺序,主要是为了能够在任何一个接口或器件初始化失败时,在显示器中能够给出相应的动作,指示哪一部分出错,用户应该怎样继续往下操作。正因为如此,在键盘和显示器初始化过程中,绝对不能有死循环,而其它程序中循环部分必须保留一定次数,超过这个次数就跳出循环并报错,交给系统处理错误,并发出警告。在初始化各驱动程序完成后,需要进入主程序,播放SD卡中的音乐。这部分程序可以在死循环中完成。一旦开始播放音乐,就不需要停下,除非暂停键(可设一标志位加以判断)被按下。其程序段如图3-9所示。图3-9 主程序段代码在MP3播放过程中,可以先搜索全部音乐,将其放入一全局变量中,然后,利用这个全局变量判断是否所有音乐已经播放完成。播放过程主要为搜索音乐,找到音乐数据位置,读取数据,送入VS1003B解码,判断文件是否结束,没有则再查找下一簇数据并读取数据,否则,送入结束数据代码,跳到下一曲。其中,在进行完每一块数据的解码之后,需要进行一次键盘扫描,根据键盘的值,对VS1003B或单片机的相应寄存器进行操作,达到控制MP3播放的目的。第四章 总结4.1 基于单片机的MP3播放器测试结果首先,在一张容量为1G的SD卡中存储了几首MP3、WMA格式的歌曲文件,然后,插入自制的电路板中,上电播放。音乐播放成功,无任何异常产生。然后,进行按键测试。音量加减键能够正常工作,但是,在按下按键时,歌曲出现播放声音出现断续情况。根据程序分析,由于每26ms需要一帧数据,而按下按键会导致程序中断数百毫秒,故出现歌曲播放声音不连续的情况。进行歌曲切换、暂停/播放按键测试时,一切正常,无任何异常。到此,基于SD卡的播放器测试完成。所有电路及预期功能基本完成,无异常产生。4.2 前景与展望MP3播放器在现在市场上已经变得非常常见,从这个角度看,MP3的发展潜力已经不是很乐观。但是,微型存储卡技术却在飞速发展,而且,将存储卡与MP3相结合的技术却并不乐观,因为在这方面字库处理的方法还需要得到提升,当SD/MMC卡更换后,怎样才能让汉字字库保持不变很难办到,即使这样处理了,却不得不在MP3内部再加一块存储器存储字库,这样,产品在成本上增加了,这也是基于SD卡的MP3不能快速发展的原因。因此,这种基于SD卡的MP3播放器在现实中,仍然具有一定潜力。而且,它在被用作MP3的同时还可以用作存储器。对于用户来说,这无疑是一种新意、一种优势,值得去购买、体验。由于它本身的小巧,还可以嵌入车载系统、家庭娱乐系统等设备中,如果能在这些方面加以应用,这种基于SD卡的MP3播放器还有很大潜力可供挖掘。综上所述,这种使用微型存储卡作为存储介质的MP3播放器仍具有良好的发展势头,拥有一定潜力可供挖掘。参考文献1 CECA .Chain Electronic Components AssociationOL http:/ic-ceca.Org. cn . 20072 沈磊 . 基于ColdFire 和uCLinux 的便携式多媒体播放器软件系统的设计与实现 D . 上海:上海交通大学 , 2005 : 1-23 有风无雨 历史不会忘记索尼Walkman 数十年回忆 OL . http:/www. / doc/0/104/104282.shtml , 2005.84 workstar百度百科 MP3 OL . http:/baike. /view/1310.htm #8 , 2009 .6.105 麦建邦 百度百科 MP3播放器 OL . /view/ 136 14.htm l , 2009.2.226 文梦梦 . 回首昨日展望明天 浅谈MP3播放器发展趋势J . PCPOP-电脑时尚 , 2005.2 : 197 谭文杰 . 基于USB主机的多媒体播放器的设计与实现 D .

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论