基于AVR单片机的U盘MP3设计与实现

发布者:平静宁静最新更新时间:2020-02-16 来源: eefocus关键字:AVR  单片机  U盘MP3 手机看文章 扫描二维码
随时随地手机看文章

  随着电子技术的发展,MP3播放器向着大容量,小型化发展。但播放器与存储器一体化的设计使得MP3难以扩充容量以容纳更多的歌曲。将播放器与存储器分离是MP3目前发展的另一方向。本文介绍了一种利用AVR控制以HOST USB方式读取U盘的音乐文件并将其解码的播放的解决方案。本方案同时具备读取音乐标签,U盘电子书,贪吃蛇游戏等功能,具有商业价值。


  1 系统功能简介
  本设计主要完成对存储在U盘中的音乐及文本等信息的读取操作,能够完成U盘内MP3音乐数据的播放及标签信息的显示,实现播放器与存储器分离,并在此基础上完成电子书,贪吃蛇游戏等功能。


  2 系统芯片选择
  本设计MCU选择ATMEL公司的ATmega64作为主控芯片。ATmega64是高性能、低功耗的8位AVR微处理器,具有先进的RISC结构。64K字节系统内可编程Flash,2K字节EEPROM,4K字节片内SRAM,64个引脚,53个可编程I/O口,具有可工作于主机/从机模式的SPI串行接口音频解码芯片选择芬兰VLSI公司生产的VS1003。VS1003是一款具有MP3/WMA/MIDI音频解码及ADPCM编码功能的芯片,它包含一个高性能,低功耗的DSP内核VS_DSP,工作数据存储器,为用户应用提供5KB的指令RAM和0.5KB的数据RAM。一个串行的控制和数据接口,4个通用I/O口,一个UART,一个高质量可变采样率的ADC和立体声DAC,一个耳机放大器和地线缓冲器。


  USB通信芯片选择CH375,CH375是一个USB总线的通用接口芯片,支持USB-host主机方式和USB-DEVICE/SLAVE设备方式。在本地端,CH375具有8位数据总线和读、写、片选控制线以及终端输出,可以方便地挂接到单片机等控制其的系统总线上。内置控制传输的协议处理器,简化常用的控制传输。支持低功耗模式。


  3 系统硬件电路设计
  3.1 MP3解码芯片与ATmega64的硬件连接
  VS1003使用同步串行总线SPI通信,ATmega64内部集成有SPI总线控制器,故将SCLK,MOSO,MOSI直接与MCU的SPI控制引脚相连接即可。另外将XCS,XRES,DREQ,XDCS分别于PB4~PB7相连接,即可完成对解码芯片的控制。


  3.2 CH375与ATmega64的硬件连接
  本设计中,CH375工作在HOST模式下,八位双向数据总线D0~D7分别于MCU的PD0~PD7相连接,实现数据与命令的并行传输。A0,RD,WR,INT,CS分别于PC3~PC7相连接。这种连接可以很方便的将CH375挂接到各种MCU系统总线上。


  3.3 彩屏与ATmega64的硬件连接
  彩屏与MCU实现并口数据命令传输,将其16位数据命令口与MCU的PA0~PA7以及PE0~PE7相连接,另外将彩屏的片选CS,数据命令选通RS,写选通WR,读选通RD,及复位RST分别于MCU的PG0~PG4相连接。


  系统启动后,在ATmega64的控制下,首先将数据从U盘中取出,如果是音频数据,则直接送入VS1003进行解码,VS1003将接收到的数据解码后转换为模拟音频后,通过功率放大器输出。若收到的是文本数据,则进行字符格式转换,并在液晶屏上显示出来。


  4 系统软件设计
  系统软件的设计主要分为VS1003的驱动程序,CH375的驱动程序,彩屏的驱动程序以及整体的整合。(分别为:vs1003.cch375.c TFT_ili9320.c mp3_play.c )


  4.1 FAT文件系统管理
  一个FAT文件系统包括四个不同的部分。保留扇区,FAT区,根目录区,数据区。其中保留区中的第一个分区必须是BPB,也称作“引导扇区”,因为它含有对文件系统进行识别的关键信息,计算机将以此信息识别存储器文件格式,因此十分重要。


  FAT区包含有两份文件分配表,这是出于系统冗余考虑,尽管它很少使用,即使是磁盘修复工具也很少使用它。它是分区信息的映射表,指示簇是如何存储的。根目录区是在根目录中存储文件和目录信息的目录表。在FAT32下它可以存在分区中的任何位置,但是在早期的版本中它永远紧随FAT区域之后。数据区是实际的文件和目录数据存储的区域,它占据了分区的绝大部分。


  4.2 U盘的读取
  由于CH375内置控制传输的协议处理器,因此读取U盘可以通过控制CH375的寄存器来进行U盘的读取。CH375以C语言子程序库提供了USB存储设备的文件级接口,这些应用层接口API包含了常用的文件级操作,可以移植并嵌入到常用的单片机程序中。CH375的U盘文件级子程序库具有以下特性:支持常用文件系统,支持多级子目录,可以支持小写字母或者长文件名,支持文件打开、新建、删除、读写以及搜索等。CH375的文件级子程序库需要大约600Byte的随机存储器RAM作为缓冲区。文件级子程序库的所有API在调用后都有操作状态返回,但不一定有应答数据。主要子程序如下:
  (1)初始化CH375芯片: CH375Init; ( 2 )打开文件:CH375Fileopen;(3)枚举或者搜索文件:CH375FileEnumer;(4)关闭文件: CH375FileClose; (5)以扇区为单位从文件读数据:CH375FileReadX; ( 6 )以扇区为单位向文件写数据:CH375FilewriteX。


  4.3 VS1003的读写控制
  VS1003的寄存器用下列顺序读出,如图二。首先将XCS片选拉低以选择芯片,再通过SI线发送8位的读操作码(0x03)和8位的地址。在地址被VS1003芯片读入后,SI上的数据将被忽略。相应地址的16位数据将从SO线移出。当数据全被移出后XCS需拉高。

  VS1003的寄存器须按以下的顺序写入,如图三。首先将XCS片选拉低,再通过SI线发送8位的读操作码(0x02)和8位的地址。随即发送16位的数据字。当最后一位被移入且最后的时钟已发送,必须将XCS拉高以完成写操作。


  4.4 MP3的播放
  当执行音乐播放程序时,ATmega64芯片首先从U盘中预取标签信息,经过分析,由Unicode到GBK编码的转换,再取字模,最终在LCD上显示;之后开始取音乐文件的数据,送到VS1003芯片,VS1003开始解码并在音频接口发出音频信号。当按下暂停键时,暂停取数据,上一曲、下一曲时跳出取数据循环。

 

 


  4.5 其他软件设计
  1.音乐标签的软件设计。本系统可以读取的音乐的标签有ID3V1、ID3V2,当要区分这两个标签时可以用程序读取音乐文件的开头和结尾,利用其标志符“ID3”、“TAG”来区分其具有哪一个标签。但是标签中的文字编码也包括UNICODE、GBK,具体的区分也要查找相关的标志符。

  2.文档阅读的软件设计。GBK的编码中会带有ASC码,而GBK码占两个字节,ASC码占一个字节,如果在取文件过程中恰好取到GBK码的每二个字节,那么以后的内容在LCD上的显示将全部为乱码,特别是在向上翻页的时候(文档内容在LCD上的显示还要判断回车以及其它字符,这样就会造成每一页具体读了多少字节,显示了多少字节都不一样)。最终解决办法是用一个数组记录每一次翻页共显示了多少字节(不是读取了多少字节)。
  3.在TFT上显示字符和汉字。对于TFT液晶,没有具体的字模存储在控制芯片中,只能是整体系统的存储。而且汉字的Unicode和GBK编码并不相同。笔者把具体的字库存储在了要读取的优盘根目录下(对应的字模文件是ST16.BIN KT16.BIN)。对于Unicode到GBK的转换,笔者把转换文件也存储在了优盘的根目录下面(对应文件是UNITOGBK.SYS)。


  5 结束语
  经测试,本设计能够读取并播放U盘中MP3文件,音质清晰悦耳,无延时和跳帧现象。能够读取U盘中txt文档以实现电子书功能。内置的贪吃蛇游戏也可以顺利实现。由于本设计采用播放器与存储器分离的方式,因此存储空间不受限制,自由度较大,这比一般MP3播放器更具有优势。

关键字:AVR  单片机  U盘MP3 引用地址:基于AVR单片机的U盘MP3设计与实现

上一篇:AVR 单片机小学期 12864液晶 双人贪吃蛇游戏
下一篇:AVR单片机学习基础篇

推荐阅读最新更新时间:2024-11-07 12:33

AVR单片机的DS1302操作程序
file://---by 变成浪子 //mega16 7.3728M Hz 石英晶体 i CC avr6.31a //相关定义: #define uint unsigned int #define uchar unsigned char #define DS1302_RST 0 //pc0 #define DS1302_SDA 1 //pc1 #define DS1302_SCLK 6 //pc6 //ds1302相关 //DS1302_RST=1 #define Set_DS1302_RST() PORTC|=1 DS1302_RST //DS1302_RST=0 #define Clr_DS1302_RST() PORTC&=
[嵌入式]
MSP430 F5529 单片机 OLED 十字路口 交通灯 动画
为了便于开发,我做了一块扩展板子: https://blog.csdn.net/x1131230123/article/details/108772807 扩展板有一些常用器件,这样开发MSP430 F5529程序的时候,就不用杜邦线连接了。当然也可以选择杜邦线连接器件,效果都一样。 Traffic light simulator. Draw a traffic intersection on the OLED display. Have cars, pedestrians, and bicycles randomly move across the display. When the cars approach the in
[单片机]
MSP430 F5529 <font color='red'>单片机</font> OLED 十字路口 交通灯 动画
温室智能控制器硬件单片机设计方案
  近年来,温室环境控制在国内外得到了相应的研究和应用。国内现有的智能温室系统硬件大部分从国外引进,国外的系统是经过多年的发展和完善,在技术上是比较成熟与先进的。但在我国的应用中出现了一些问题,如体积大、能耗大、温室降温较差、在我国使用不适应。从经济效益上看,因其设备投资大,运行费用高,普遍亏损。“林木种苗工厂化生产环境控制设备与自动化控制集成应用研究示范”是我们自主开发的智能温室监控系统,该系统对于实现农业精细化、自动化生产,提高农业生产的效率与农产品的质量有一定的促进作用。   系统硬件相关技术指标要求如下:   ( 1) 对现场空气温度湿度,土壤基质温度湿度,光照强度进行实时的数据采集、数据信号处理、数据分析。数据采集时
[单片机]
单片机疑似烧坏
做语音识别(LD3320的芯片)的时候,单片机烧程序的时候特别困难,坏了3个单片机的开发板,换了几条USB转串口线,重装了几次驱动,依然烧不进去,重启电脑可以解决问题,重装驱动也OK,不过要看人品,有时候重装一次可以烧得进去,很多时候确要弄很久。这样效率超级低,怎么进行开发工作啊? 后来搞了我一天,试一试加一个复位电路看能否解决问题。 果然,是复位电路的问题,加了之后烧程序完全没有压力的。 其实,单片机出问题,莫急,先从三个方面检查一下: 1、电源 看单片机VCC和GND管脚有没有虚焊,或者找一下有一些管脚通电后会输出稳定电压的,验证一下电源有没有接上。 2、晶振 我用的单片机是贴片式的,因此管脚特别小,晶振不排除有虚焊现
[单片机]
<font color='red'>单片机</font>疑似烧坏
单片机数据采集常用算法
u8 TPAD_Init() { u16 buf ; u16 temp; u8 j,i; for(i=0;i 10;i++)//10次采样 { buf =TPAD_Get_Val(); delay_ms(10); } for(i=0;i 9;i++)//升序排列 { for(j=i+1;j 10;j++) { if(buf buf )// { temp=buf ; buf =buf ; buf =temp; } } } temp=0; for(i=2;i 8;i++)temp+=buf ;// ¼ 8 &
[单片机]
如何开始学单片机
不管出于什么原因学习单片机,成为单片机高手几乎可以说是每一个认真学单片机高手的愿望。 单片机高手的秘诀 1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异。 2.别小家子气,买本书几十块都舍不得,你还学个P。为了省钱看电子书,浪费的时间绝对 超过书的价值。当然如果查资料,只能看PDF。 3.学习新的开发软件时,一定要看帮助手册。买的书不够全面。刚接触一个软件,什么都不 懂,就盲目的问东问西,让人看起来很幼稚。 4.不要蜻蜓点水,得过且过,细微之处往往体现实力。 5.把时髦的技术挂在嘴边,还不如把过时的技术记在心里。 6.看得懂的书,请仔细看;
[单片机]
基于51单片机的半导体激光器电源控制系统的设计
半导体激光器(LD)体积小,重量轻,转换效率高,省电,并且可以直接调制。基于他的多种优点,现已在科研、工业、军事、医疗等领域得到了日益广泛的应用,同时其驱动电源的问题也更加受到人们的重视。使用单片机对激光器驱动电源的程序化控制,不仅能够有效地实现上述功能,而且可提高整机的自动化程度。同时为激光器驱动电源性能的提高和扩展提供了有利条件。  1总体结构框图 本系统原理如图1所示,主要实现电流源驱动及保护、光功率反馈控制、恒温控制、错误报警及键盘显示等功能,整个系统由单片机控制。本系统中选用了C8051F单片机。C8051F单片机是完全集成的混合信号系统级芯片(SOC),他在一个芯片内集成了构成一个单片机数据采集或控制系统
[单片机]
基于51<font color='red'>单片机</font>的半导体激光器电源控制系统的设计
STM32单片机的八种IO口模式讲解
八种IO口模式 STM32有八种IO口模式,分别是:模拟输入、浮空输入、上拉输入、下拉输入、开漏输出、推挽输出、复用开漏输出和复用推挽输出。 1、模拟输入 GPIO_Mode_AIN模拟输入,即关闭施密特触发器,将电压信号传送到片上外设模块(不接上下拉电阻)。 2、浮空输入 GPIO_Mode_IN_FLOATING浮空输入。浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。 3、上下拉输入 GPIO_Mode_IPD下拉输入,GPIO_Mode_IPU上拉输入。一般来讲,上拉电阻为1K-10K,电阻越小,驱动能力越强。 电阻的作用:防止输入端悬空,减少外部电流
[单片机]
STM32<font color='red'>单片机</font>的八种IO口模式讲解
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved