2.1.2USB设备协议层的实现该部分实现对优盘扇区的直接读写,其中两个很重要的函数为Bulkin和Bulkout。此处只列出Bulkin函数的实现:/**********************************函数名称:epBulkRcv函数功能:实现bulkonly协议中的Bulkin函数输入参数:pBuffer为数据的地址,len为数据的长度返回值:TRUE为成功,FALSE为失败**********************************/unsignedcharepBulkRcv(unsignedchar*pBuffer,unsignedintlen){usbstack.usb
2.1.2
USB设备协议层的实现
该部分实现对优盘扇区的直接读写,其中两个很重要的函数为Bulkin和Bulkout。此处只列出Bulkin函数的实现:
/**********************************
函数名称:epBulkRcv
函数功能:实现bulkonly协议中的Bulkin函数
输入参数:pBuffer为数据的地址,
len为数据的长度
返回值:TRUE为成功,FALSE为失败
**********************************/
unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int
len){
usbstack.usbaddr=0x1;
usbstack.endpoint=usbstack.epbulkin;
usbstack.pid=PID_IN;
//设置包长度为64
usbstack.wPayload=64;
usbstack.wLen=len;
usbstack.buffer=pBuffer;
if(usbstack.wLen){
if(!usbXfer())
return FALSE;
}
return TRUE;
}
2.1.3
FAT16/FAT32文件格式的实现
该部分程序是根据FAT16/FAT32文件系统的结构,实现对文件的读、写、创建、删除等操作。优盘上的数据按照其不同的特点和作用大致可分为5部分:
MBR区(主引导记录区)、DBR区(系统引导记录区)、FAT区(文件分配表区)、FDT区(文件目录表区)和DATA区(数据区)。
在实现对文件的读/写时,首先根据MBR区和DBR区的大小,找到FAT表的位置,然后根据FAT表找出相应文件的数据位置,即可对此文件进行相应的处理。其具体实现涉及FAT文件系统的结构,此处不再详述。
2.2 VS
1011B的控制与音乐文件数据输入
本方案
mp3播放器的实现原理就是控制器 从优盘读取MP3文件数据,当VS1011B的数据缓冲区需要数据时,将数据送入VS1011B进行解码。
VS1011B采用串行接口,有两种接口模式:
Native Modes(新模式)和Compatibility;
Mode(兼容模式)。当地址为0x0的MODE寄存器的SM_SDINEW位为1时为新模式;反之为兼容模式。上电时默认为新模式。
在播放音乐之前,首先需要对VS1011B进行初始化,然后输入音乐文件即可播放歌曲。其控制步骤如下:[3]
① 拉低nRST1。
② 等待DREQ引脚信号变高
③ 写寄存器MODE的参数,包括正确设置SM_SDINEW和SM_SDISHARED位。
④ 若时钟数率非24.576 MHz,应设置SCI_CLOCKF。
⑤ 若使用倍频时钟,试图通过改变SCI_CLOCKF直接操作,应将适当的采样速率写入SCI_AUDATA寄存器,等待至少11
000个时钟后才可以操作高速的