LPC11U14實(shí)現(xiàn)SD卡U盤(pán)
要實(shí)現(xiàn)SD卡U盤(pán)功能只有實(shí)驗(yàn)LPC1343或者LPC11U14才行,因?yàn)樗鼈兌加蠻SB功能。下面先講講大概的思路。通過(guò)USB和PC進(jìn)行通信,并枚舉一個(gè)U盤(pán),具體的操作是通過(guò)SPI總線操作SD卡。
下面就先看NXP源代碼模擬的U盤(pán),和我們修改后實(shí)現(xiàn)的SD卡U盤(pán):
NXP模擬U盤(pán)
SD卡U盤(pán)
1.NXP原廠代碼免費(fèi)贈(zèng)送:USBMem.rar(294.52 KB)
2.本人修改的SD卡U盤(pán),收費(fèi)哦:SD卡U盤(pán).rar(1.45 MB)
下面看看U盤(pán)是讀寫(xiě)速度:
從U盤(pán)讀數(shù)據(jù)到PC的速度
從PC寫(xiě)數(shù)據(jù)到U盤(pán)速度
從上面可以看出,SD卡U盤(pán)的讀寫(xiě)速度都非常慢,所以本實(shí)驗(yàn)只有實(shí)驗(yàn)價(jià)值,不能真正作為U盤(pán)來(lái)使用,當(dāng)然如用來(lái)實(shí)現(xiàn)IAP等還是很不錯(cuò)的,至于提升速度,應(yīng)該還是有一定的空間,大不會(huì)很大。。。
下面我們?cè)敿?xì)說(shuō)明從模擬U盤(pán)到SD卡U盤(pán)都修改了些什么內(nèi)容,這里使用Beyond Compare軟件進(jìn)行對(duì)比。
左邊是模擬U盤(pán)代碼,右邊是修改后的代碼
1.添加兩個(gè)變量:
2. 修改Read函數(shù):
3. 修改Write函數(shù):
4.修改MSC_GetCBW函數(shù):
5.修改宏定義,獲取SD卡實(shí)際容量等信息
大體的修改就這些,還有部分細(xì)節(jié)這里就不再說(shuō)明,網(wǎng)友可以下載程序?qū)Ρ???纯词遣皇欠浅:?jiǎn)單??!下載到硬件中試試吧。。。。。。。。。。。。。。
對(duì)于U盤(pán),本人在剛開(kāi)始時(shí)以為是,通過(guò)文件系統(tǒng)來(lái)操作文件的讀寫(xiě)、格式等。所以一想到對(duì)中文長(zhǎng)文件名的支持,就有點(diǎn)畏懼,因?yàn)楣馐菍?duì)長(zhǎng)文件名的支持代碼都要170K,而LPC11U14是沒(méi)有這么大的空間的。通過(guò)學(xué)習(xí),感覺(jué)自己完全是誤會(huì)了,其實(shí)U盤(pán)的代碼變不復(fù)雜,當(dāng)然要產(chǎn)品化還是很難的。下面簡(jiǎn)單講講U盤(pán)的實(shí)現(xiàn)。
1.怎樣實(shí)現(xiàn)文件讀寫(xiě)?
U盤(pán)的命令很多,而我們使用的就幾個(gè),其中最重要的是Read(10/12)和Write(10/12)兩個(gè)命令,PC機(jī)就是通過(guò)這兩個(gè)命令來(lái)讀寫(xiě)U盤(pán)的,而這兩個(gè)命令中我們只需要知道該讀寫(xiě)哪一個(gè)扇區(qū),然后通過(guò)SD卡的扇區(qū)讀寫(xiě)函數(shù)就可以實(shí)現(xiàn)文件的讀寫(xiě)操作了。
2.那么PC怎么知道文件的存放地址,以及有那些文件的呢?
要知道文件的讀寫(xiě)就離不開(kāi)FAT文件系統(tǒng)了,所以存儲(chǔ)介質(zhì)里邊必須有FAT表,而FAT里邊就是存放文件,目錄等的信息(具體的FAT表這里就不介紹了,網(wǎng)友可以到網(wǎng)絡(luò)上去搜索)。所以在NXP的源代碼里邊有個(gè)數(shù)組DiskImage,這個(gè)數(shù)組就是模擬FAT表和啟動(dòng)扇區(qū)的,如:0xEB,0x3C,0x90,0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30,0x00,0x02,0x01,0x01,0x00,從前面幾個(gè)字節(jié)就可以看出是啟動(dòng)扇區(qū)的命令吧。。。。。
所以只有我們的介質(zhì)里邊有啟動(dòng)扇區(qū)和FAT表,那么我們只需要按照PC指令讀取相應(yīng)的扇區(qū),PC機(jī)獲取啟動(dòng)扇區(qū)和FAT表后就可以解碼出文件的存儲(chǔ)格式,文件大小等一系列信息了,跟讀取硬盤(pán)沒(méi)有多大的區(qū)別。。。。
評(píng)論