經(jīng)過一段時(shí)間的辛勤努力終于將U盤CF卡等掌握了,將笨(比較笨)人在開發(fā)過程中的心得告知大建,希望大家多交流:個(gè)人信息保護(hù),已隱藏如何讓單片機(jī)識(shí)別U盤,并且象在WINDOWS下識(shí)別FAT32 FAT16 NTFS等格式的隨意讀寫困擾不少同行.其實(shí)單片機(jī)讀寫U盤主要的是找到接口芯片,象 NSL912,CH375等都是非常好用的芯片.但是找到接口芯片還不行.除非你用廠家提供的程序,那需要你來調(diào)整單片機(jī)適應(yīng)他們的設(shè)置,這個(gè)過程也是麻煩的,并且無法從底層的接口來掌握.剛才說,找到單片機(jī)讀寫U盤的接口芯片后,還需要了解硬盤的分區(qū)格式和數(shù)據(jù)接口,在此我向大家推薦一本書<<硬盤扇區(qū)讀寫技術(shù)>> 機(jī)械工業(yè)出版社宋群生主編的.這本書很詳細(xì)的向大家講解了硬盤的分區(qū)格式和數(shù)據(jù)格式包括,FAT FDT等,但是還是需要大家注意,就是在計(jì)算機(jī)上如何了解U盤的數(shù)據(jù)存放格式,網(wǎng)站www.jnyldz.com有資料可以參考.就是在讀寫扇區(qū)的時(shí)候,一定要注意硬盤接口的問題.當(dāng)我們往U盤里面寫數(shù)據(jù)的時(shí)候,需要找到文件的扇區(qū)地址,其實(shí)在硬盤里面,文件的存放格式是以簇的形式存放的.那么,受限根據(jù)FAT表里面的內(nèi)容找到首簇,根據(jù)根目錄下的FDT表里面的內(nèi)容找到文件的第一簇存放位置就可以往需要的位置存些數(shù)據(jù),注意硬盤是以扇區(qū)為讀寫單位的,所以,如果我們需要往硬盤里面寫少于512字節(jié)的時(shí)候,就需要將U盤里面的一個(gè)扇區(qū)(目標(biāo))的內(nèi)容讀出來.講需要存寫的數(shù)據(jù)寫到緩沖區(qū),這就需要你的單片機(jī)系統(tǒng)有512字節(jié)的RAM,這對(duì)于一個(gè)單片機(jī)來說是比較困難,那么我們可以擴(kuò)展一片6116,62256,等RAM,在此一片6116就可以了.對(duì)于讀扇區(qū)的話,那就和寫扇區(qū)相似了,一次必須讀夠512個(gè)字節(jié). 對(duì)于單片機(jī)讀寫U盤,關(guān)鍵的問題就是找到我們的目標(biāo)扇區(qū),找到目標(biāo)扇區(qū),轉(zhuǎn)換成單片機(jī)的地址,這樣我們讀寫U盤就像讀寫外部的RAM直接用一條指令:MOVX @DPTR,#DATA,或者 DATAPORT=DAT;就可以了UploadImages/jftjft20051011113043.rar
不錯(cuò)
好好學(xué)習(xí)
值得借鑒學(xué)習(xí)!
引用回復(fù):經(jīng)過一段時(shí)間的辛勤努力終于將U盤CF卡等掌握了,將笨(比較笨)人在開發(fā)過程中的心得告知大建,希望大家多交流:個(gè)人信息保護(hù),已隱藏如何讓單片機(jī)識(shí)別U盤,并且象在WINDOWS下識(shí)別FAT32 FAT16 NTFS等格式的隨意讀寫困擾不少同行.其實(shí)單片機(jī)讀寫U盤主要的是找到接口芯片,象 NSL912,CH375等都是非常好用的芯片.但是找到接口芯片還不行.除非你用廠家提供的程序,那需要你來調(diào)整單片機(jī)適應(yīng)他們的設(shè)置,這個(gè)過程也是麻煩的,并且無法從底層的接口來掌握.剛才說,找到單片機(jī)讀寫U盤的接口芯片后,還需要了解硬盤的分區(qū)格式和數(shù)據(jù)接口,在此我向大家推薦一本書<<硬盤扇區(qū)讀寫技術(shù)>> 機(jī)械工業(yè)出版社宋群生主編的.這本書很詳細(xì)的向大家講解了硬盤的分區(qū)格式和數(shù)據(jù)格式包括,FAT FDT等,但是還是需要大家注意,就是在計(jì)算機(jī)上如何了解U盤的數(shù)據(jù)存放格式,網(wǎng)站www.jnyldz.com有資料可以參考.就是在讀寫扇區(qū)的時(shí)候,一定要注意硬盤接口的問題.當(dāng)我們往U盤里面寫數(shù)據(jù)的時(shí)候,需要找到文件的扇區(qū)地址,其實(shí)在硬盤里面,文件的存放格式是以簇的形式存放的.那么,受限根據(jù)FAT表里面的內(nèi)容找到首簇,根據(jù)根目錄下的FDT表里面的內(nèi)容找到文件的第一簇存放位置就可以往需要的位置存些數(shù)據(jù),注意硬盤是以扇區(qū)為讀寫單位的,所以,如果我們需要往硬盤里面寫少于512字節(jié)的時(shí)候,就需要將U盤里面的一個(gè)扇區(qū)(目標(biāo))的內(nèi)容讀出來.講需要存寫的數(shù)據(jù)寫到緩沖區(qū),這就需要你的單片機(jī)系統(tǒng)有512字節(jié)的RAM,這對(duì)于一個(gè)單片機(jī)來說是比較困難,那么我們可以擴(kuò)展一片6116,62256,等RAM,在此一片6116就可以了.對(duì)于讀扇區(qū)的話,那就和寫扇區(qū)相似了,一次必須讀夠512個(gè)字節(jié). 對(duì)于單片機(jī)讀寫U盤,關(guān)鍵的問題就是找到我們的目標(biāo)扇區(qū),找到目標(biāo)扇區(qū),轉(zhuǎn)換成單片機(jī)的地址,這樣我們讀寫U盤就像讀寫外部的RAM直接用一條指令:MOVX @DPTR,#DATA,或者 DATAPORT=DAT;就可以了UploadImages/jftjft20051011113043.rar
再支持一下,我就是受此啟發(fā)用單片機(jī)完成存儲(chǔ)卡和U盤文件管理的。
請問:jft 說的"找到目標(biāo)扇區(qū),轉(zhuǎn)換成單片機(jī)的地址"是什么意思?
這句話是有問題的。 單片機(jī)對(duì)U盤的管理和存儲(chǔ)是以扇區(qū)為單位進(jìn)行的。 你只要寫出初始化、扇區(qū)讀、扇區(qū)寫3個(gè)子程序就可以 按文件系統(tǒng)要求操作了。
謝謝!
請教樓主,單片機(jī)寫U盤的話,不是要擦除一個(gè)BLOCK,也就是32KB,這個(gè)32K該怎么解決呢。你所提的是一個(gè)扇區(qū)只是512B。
這事由U盤內(nèi)部完成,用戶不用考慮. 不同的U盤,其選用的存儲(chǔ)介質(zhì)并不完全相同,如何管理是他內(nèi)部事物, 但U盤控制器本身與外部接口交互是按扇區(qū)處理的.