2.1.2USB設(shè)備協(xié)議層的實(shí)現(xiàn)該部分實(shí)現(xiàn)對(duì)優(yōu)盤扇區(qū)的直接讀寫,其中兩個(gè)很重要的函數(shù)為Bulkin和Bulkout。此處只列出Bulkin函數(shù)的實(shí)現(xiàn):/**********************************函數(shù)名稱:epBulkRcv函數(shù)功能:實(shí)現(xiàn)bulkonly協(xié)議中的Bulkin函數(shù)輸入?yún)?shù):pBuffer為數(shù)據(jù)的地址,len為數(shù)據(jù)的長度返回值:TRUE為成功,F(xiàn)ALSE為失敗**********************************/unsignedcharepBulkRcv(unsignedchar*pBuffer,unsignedintlen){usbstack.usb
2.1.2
USB設(shè)備協(xié)議層的實(shí)現(xiàn)
該部分實(shí)現(xiàn)對(duì)優(yōu)盤扇區(qū)的直接讀寫,其中兩個(gè)很重要的函數(shù)為Bulkin和Bulkout。此處只列出Bulkin函數(shù)的實(shí)現(xiàn):
/**********************************
函數(shù)名稱:epBulkRcv
函數(shù)功能:實(shí)現(xiàn)bulkonly協(xié)議中的Bulkin函數(shù)
輸入?yún)?shù):pBuffer為數(shù)據(jù)的地址,
len為數(shù)據(jù)的長度
返回值:TRUE為成功,F(xiàn)ALSE為失敗
**********************************/
unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int
len){
usbstack.usbaddr=0x1;
usbstack.endpoint=usbstack.epbulkin;
usbstack.pid=PID_IN;
//設(shè)置包長度為64
usbstack.wPayload=64;
usbstack.wLen=len;
usbstack.buffer=pBuffer;
if(usbstack.wLen){
if(!usbXfer())
return FALSE;
}
return TRUE;
}
2.1.3
FAT16/FAT32文件格式的實(shí)現(xiàn)
該部分程序是根據(jù)FAT16/FAT32文件系統(tǒng)的結(jié)構(gòu),實(shí)現(xiàn)對(duì)文件的讀、寫、創(chuàng)建、刪除等操作。優(yōu)盤上的數(shù)據(jù)按照其不同的特點(diǎn)和作用大致可分為5部分:
MBR區(qū)(主引導(dǎo)記錄區(qū))、DBR區(qū)(系統(tǒng)引導(dǎo)記錄區(qū))、FAT區(qū)(文件分配表區(qū))、FDT區(qū)(文件目錄表區(qū))和DATA區(qū)(數(shù)據(jù)區(qū))。
在實(shí)現(xiàn)對(duì)文件的讀/寫時(shí),首先根據(jù)MBR區(qū)和DBR區(qū)的大小,找到FAT表的位置,然后根據(jù)FAT表找出相應(yīng)文件的數(shù)據(jù)位置,即可對(duì)此文件進(jìn)行相應(yīng)的處理。其具體實(shí)現(xiàn)涉及FAT文件系統(tǒng)的結(jié)構(gòu),此處不再詳述。
2.2 VS
1011B的控制與音樂文件數(shù)據(jù)輸入
本方案
mp3播放器的實(shí)現(xiàn)原理就是控制器 從優(yōu)盤讀取MP3文件數(shù)據(jù),當(dāng)VS1011B的數(shù)據(jù)緩沖區(qū)需要數(shù)據(jù)時(shí),將數(shù)據(jù)送入VS1011B進(jìn)行解碼。
VS1011B采用串行接口,有兩種接口模式:
Native Modes(新模式)和Compatibility;
Mode(兼容模式)。當(dāng)?shù)刂窞?x0的MODE寄存器的SM_SDINEW位為1時(shí)為新模式;反之為兼容模式。上電時(shí)默認(rèn)為新模式。
在播放音樂之前,首先需要對(duì)VS1011B進(jìn)行初始化,然后輸入音樂文件即可播放歌曲。其控制步驟如下:[3]
① 拉低nRST1。
② 等待DREQ引腳信號(hào)變高
③ 寫寄存器MODE的參數(shù),包括正確設(shè)置SM_SDINEW和SM_SDISHARED位。
④ 若時(shí)鐘數(shù)率非24.576 MHz,應(yīng)設(shè)置SCI_CLOCKF。
⑤ 若使用倍頻時(shí)鐘,試圖通過改變SCI_CLOCKF直接操作,應(yīng)將適當(dāng)?shù)牟蓸铀俾蕦懭隨CI_AUDATA寄存器,等待至少11
000個(gè)時(shí)鐘后才可以操作高速的