基于ATmega64的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相连接。
3.4 系统连接框图如图1
系统启动后,在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播放器更具有优势。

在无人驾驶车里玩游戏:VR+无人驾驶是怎么样的体验
谷歌模仿苹果到底是跟风还是战略
全球芯片代工订单迎来爆发式增长
三选一的信号开关设计方案
中美贸易博弈 美国败局已定!
基于ATmega64的U盘MP3设计方案
iphone也玩套路?红色iphone7中国特供版即将发布!变相圈钱?
Acrel-5000WEB能耗管理系统在分布式光伏发电管理系统中的应用
如何辨别雷电3接口
Groove Jones将作为Early Access开发者与Magic Leap合作
如何使用51单片机制作一个心形流水灯
宽带噪声的测试方法
LED点光源常见的故障现象及分析解决方法
交流固态继电器的保护措施
华为将于12月21日正式举行智慧屏新品发布会
MAX16805, MAX16806 EEPROM可编程、高
用于睡眠质量和呼吸暂停临床评估的家庭无线睡眠监测贴片
智能硬件产品是这样,别傻傻分不清!
LED显示屏+AI如何为文化、艺术及教育赋能
富士通电子携最新产品亮相,发力汽车电子