1.引言
MP3是生活中常见的电子产品。受手机、paid的冲击,当前人们对MP3功能的要求更加差异化和苛刻。传统MP3功能单一,芯片处理能力较差,大多无法播放高音质音乐文件。基于这一问题本文提出一种基于51增强型单片机的低成本多功能大容量MP3解决方案,在可播放高音质MP3歌曲的基础上加入图片播放和电子书播放,以应对MP3功能的差异化需求。详细设计如下。
2.硬件设计
本多功能MP3由数据存储、音频解码、液晶显示、中心控制、电源、键盘等功能模块构成。
2.1 数据存储模块
选用Kingston SDHC卡作为存储介质。SDHC卡是一种高容量SD存储卡,容量在2GB~32G,符合SD2.0规范,可采用FAT32文件系统管理。单片机通过通信读写SDHC卡命令和状态寄存器完成相关操作工作。SD卡内部有7个寄存器。其中OCR,CID,CSD和SCR寄存器保存卡的配置信息:RCA寄存器保存SD模式下通信过程SDHC卡当前暂时地址;卡状态(Card Status)和SD状态(SD Status)寄存器保存卡当前状态,如:是否写成功,通信的CRC校验是否正确等,这两个寄存器的内容与通信模式有关。
须注意SD卡的工作电压为3.3V,不能与5V单片机直接相连,可在SD模块集成5-3.3V转换电路,方便单片机与SDHC卡的耦合。
2.2 音频解码模块
MP3文件其实是一种经过MP3(即动态影像专家压缩标准音频层面)编码算法压缩的数据,不能直接送给功放,必须先通过解码还原出原始音频数据再进行播放。本文所选解码芯片为VLSI公司的VS1003,它支持MP3/WAV/WMA/MIDI音频解码和ADPCM编码。VS1003的工作是通过对功能、状态寄存器的读写完成的。其中控制信息通过SCI写入功能寄存器,音频数据通过SDI写入VS1003数据缓冲区。写音频数据时,拉低XDCS,SDI有效;写命令数据时,拉低XCS,SCI有效。须注意,VS1003在DREQ管脚为高电平时才可以接收数据。当工作在解码状态时它通过一个串行接口接收比特流,比特流被解码后通过数字音量控制器被送到18位DAC,得到的音频模拟信号经过功放被送到耳机接口,接上耳机即可听到音乐声。
2.3 单片机控制模块
本文采用宏晶公司STC15F2K60S2单片机作为控制器,其2K字节片内RAM可满足系统运行RAM要求;该单片机采用增强型8051内核,速度快,可满足MP3播放数据交换要求;内置SPI串行通信接口,易于与SD模块、VS1003模块耦合操作。该单片机的工作电压5.5V~3.8V的宽电压,推荐5V,须做好与SD卡管脚3.3V工作电压的耦合,以防SD卡损坏或工作失常。
2.4 TFT液晶显示模块
TFT液晶即彩色晶体管液晶显示器,它的像素点由集成在其后的薄膜晶体管来驱动,通过一定电路控制每一像素三基色光强的配比即可显示各种彩色。8位单片机系统下的TFT液晶的显示需要TFT液晶控制器来驱动,单片机可通过与TFT液晶控制器的交互间接控制TFT液晶的显示。
本文显示模块采用的是一款3.5寸320*480分辨率的16位真彩色TFT液晶屏。模块采用8位并口方式与单片机连接,可通过8位的标准Intel8080总线进行指令和数据的传输,便于操作。
TFT液晶的显示是将图形中每个像素点的位置和颜色信息在屏上对应显示,16位真彩色屏每一个像素点的位置信息(即坐标)和颜色信息按照一定格式存储在两个字节中。单片机操作时在对应模式下将图案所有像素点的信息送给控制器,在显示器上通过像素点的点阵组合便可完成显示。
3.软件设计
本多功能MP3具备三大功能:歌曲播放、图片播放、电子书播放。目标数据的获取是实现每个功能的首要问题。由于歌曲、图片、电子书文件大,在SDHC卡以簇链形式存储,需由文件系统进行数据管理,故嵌入FAT32文件系统(znFAT)解决上述问题。在此基础上完成每个子功能与之相关的数据处理及系统整体运行框架即可实现全部功能。
3.1 数据获取
数据获取需保证SDHC卡的正确驱动和FAT32文件系统的正常运行。
3.2 SDHC卡的驱动
(1)初始化操作
①延时至少74clock,等待SD卡内部操作完成。
②拉低CS选中SD卡。
③发送CMD0,若返回0x01,进入Idle状态。
④发送CMD8命令,若返回0x01,初步判断为2.0卡,循环发送CMD55+ACMD41,直至返回0x00,确定SD2.0卡初始化成功。
⑤拉高CS。
(2)读数据操作
①发送CMD17(读取单个扇区)或CMD18(连续读取多个扇区)读命令,返回0x00表示操作成功。
②接收数据:格式为开始令牌(0xfe)+512B正式数据+2B CRC校验码。
(3)写数据操作
①发送CMD24(写单个扇区)或CMD25(连续写多个扇区)写命令,返回0x00表示操作成功。 ②发送数据:格式为开始令牌(0xfe)+512B正式数据+2B CRC校验码。
(4)擦除操作
①发送CMD32擦除开始地址。
②发送CMD33和擦除结束地址。
③发送CMD38,擦除指定的多扇区内容。
SDHC驱动常用函数如下:
函数定义 功能与参数描述
SD_Init() SD卡初始化
SD_Write_Sector(addr,buffer) 将buffer中的数据写入到addr扇区中
SD_Read_Sector(addr,buffer) 读取addr扇区中数据到buffer中
SD_Write_nSector(nsec,addr,buffer) 将buffer中的数据写入到addr开始的nsec个扇区中
SD_Read_nSector(nsec,addr,buffer) 读取addr开始的nsec个扇区数据到buffer中
SD_Erase_nSector(addr_sta,addr_end) 擦除addr_sta开始addr_end结束的多个扇区
SD_GetTotalSec() 获取SD卡的物理总扇区数
4.FAT32文件系统
本文文件系统选择免费开源系统znFAT。znFAT的整体结构分为应用层层、实现层、物理驱动层,用户只需编写物理驱动层扇区读写等函数。可供用户操作的功能包括打开文件、读取数据、创建文件等;
本文中涉及最多的是数据的读取,读取数据可通过“打开文件函数UINT8 znFAT_Open_File(struct FileInfo *pfi,INT8 *filepath,UINT32 n,UINT8 is_file)”和“读取数据函数UINT32 znFAT_Read_File(struct FileInfoStruct *pfi,UINT32 offset,UINT32 len,UINT8 *pbuf)”来完成。
4.1 歌曲播放
歌曲播放是STC15F单片机通过文件系统读取SDHC卡中的MP3文件,将MP3数据送给VS1003模块解码得到模拟音频信号流的过程。同时通过MP3文件文件目录项信息解析出文件名(歌曲名);用文件已读取字节数量除以文件总大小得到播放进度;在VS1003打入频谱补丁的前提下从地址0x6 0x7 0xa三个寄存器中读出频谱相关信息;并逐一显示。播放过程中,按键可以切换歌曲,调节音量。歌曲的切换是通过改变系统内部为不同歌曲分配的不同序列号而完成的。由于一方面单片机RAM有限,无法单次读取太多MP3数据且一次读取过多会因耗时过多而引起播放的卡顿;另一方面,两次数据读取中间有按键检测,若一次读取数据过多会降低按键的灵敏性。要实现边播放边检侧按键需找到一个单次读取数据量的平衡点,建议选择300B。
播放过程需解决VS1003驱动问题和相关数据处理。VS1003驱动方法如下:
单片机对VS1003驱动是通过SPI通信方式对VS1003的命令状态寄存器进行读取和刷写而完成的。使用时须首先对VS1003硬件复位,将XRESET拉低并延时;其次向模式寄存器(地址0x0)写入0X0804;再次设置时钟寄存器(地址0x3)和采样率寄存器(地址0x5);最后设置音量且发送4个无效数据启动数据传输,4个无效数据的传输不能忽略。其中VS1003采用大端模式;音量寄存器的设置值为0~255,对应音量的最大和最小,编程时需注意。
数据处理伪代码如下:
void Mp3play()
{
//相关变量定义
//文件系统及相关物理设备初始化
//刷写播放背景
while(!znFAT_Open_File(&FileInfo,”\\歌曲\\*.mp3”,Sang_Num,1))//打开歌曲目录下序号为1的歌曲文件
{
while( len = znFAT_Read_File(&FileInfo,FileInfo.FileCurOffset,400,mp3_buf))//读出部分MP3数据
{
//MP3数据发送给VS1003
VS_XDCS = 0;
for( i=0; i《len; i++)
{
VS_Send_Dat(mp3_buf[i]);
}
VS_XDCS = 1;
//播放进度显示
//频谱显示
}
//歌曲名显示
//按键检测及处理
}
}
4.2 图片播放
图片播放类似于歌曲播放,不同在于读出的图片文件数据发送给TFT显示屏模块进行显示。由于所选显示屏分辨率为320*480,单次数据读取大小建议为320,则两次读数据写屏过程便可写满显示屏的一行,重复书写320行即可完成图片显示。
4.3 电子书播放
电子书播放的首要问题是汉字显示。汉字的显示就是以字模信息为底本在显示屏上画图,以某汉字字模信息为底本画出的图即是该汉字。本文选择的字模库是UCDOS操作系统下的汉字字模库HZK16.dat。
txt文件存储信息实质为汉字在字模库中的区码和位码。首先从SDHC卡分多次读出txt文件数据,其中每个汉字信息由两个字节储存,每个英文字母及英文标点由一个字节储存。字节内容为字符在字模库中的位置,汉字字模位置可由公式“字模在HZK16中的偏移量=[(区码-1)*94+(位码-1)]*32”算出;接着用“UINT8 znFAT_seek(struct FileInfo *pfi,UINT32 offset)函数(znfat功能层函数)”读出16*16汉字的32字节字模信息并将对应汉字刷写在显示屏上。重复以上汉字的显示过程便可实现电子书的播放。建议每次读取的txt文件大小为200B,需特别注意的是,须检测每次读取最后一个字节是不是英文字母或英文标点,是则读,若不是或是下个汉字的区码,则不读,以免造成汉字显示紊乱。同时,在每次txt文件读取的间隙进行按键处理,包括上下页、上下篇、返回等。
5.实物调试及结果
经过制板和元件焊接,完成实物制作。将SDHC卡格式化为FAT32格式,装入歌曲、图片、电子书文件。将内存卡装入卡座进行测试。各方面功能正常,可正常播放320kbs音乐文件、300K 320*480的二进制图片文件、txt电子书文件。MP3文件的播放可以暂停,切换上下去,快进;图片的播放可切换上下张;txt的播放可上下翻页,可切换篇,查看进度。但图片刷写和电子书刷写稍稍显慢,这是受单片机处理速度所限,但也在可承受范围。
6.结语
虽然当前电子产品日益丰富,但由于MP3的便携性和专业性,相信MP3不会走出人们的视角,并会将以功能个性化作为主打,在不远的将来,MP3的功能及设计有望实现个人定制。本文即是针对当前MP3功能差异化需求现象做出的一次尝试,设计了一款多功能MP3,旨在满足当下人们对电子产品功能的差异化需求。该设计功能强大,成本低,宜于批量化生产。
评论
查看更多