藍(lán)旗嵌入式原廠技術(shù)ch375hf_第1頁(yè)
藍(lán)旗嵌入式原廠技術(shù)ch375hf_第2頁(yè)
藍(lán)旗嵌入式原廠技術(shù)ch375hf_第3頁(yè)
藍(lán)旗嵌入式原廠技術(shù)ch375hf_第4頁(yè)
藍(lán)旗嵌入式原廠技術(shù)ch375hf_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

版本:1、很多數(shù)碼產(chǎn)品以及單片機(jī)系統(tǒng)都需要器,當(dāng)前,U盤(pán)(含閃盤(pán)、USB閃存盤(pán)、USB移動(dòng)硬盤(pán)接采用U盤(pán)作為大容量的移動(dòng)器。CH375是USB總線的HOST主機(jī)及DEVICE設(shè)備雙用接口,單片機(jī)可以通過(guò)CH375讀寫(xiě)U盤(pán)中換,U盤(pán)中的數(shù)據(jù)應(yīng)該符合WINDOWS的文件系統(tǒng)格式。CH375提供了U盤(pán)文件級(jí)子程序庫(kù),單片機(jī)可以直接調(diào)用子程序讀寫(xiě)U盤(pán)中的文件數(shù)據(jù),硬件上只需要在原單片機(jī)系統(tǒng)中增加一個(gè)CH375,綜合成本較低。CH375的U盤(pán)文件級(jí)子程序庫(kù)支持常用的FAT12、FAT16FAT32100GBU一組“指針”的多個(gè)塊(也就是分配單元或簇,從而能夠根據(jù)需要隨時(shí)增大文件長(zhǎng)度以容納更多數(shù)據(jù)。是為了便于分類(lèi)管理,管理者可以人為指定將多個(gè)文件歸檔在一起,例如2004年的文件歸到一個(gè)中。2、子程序庫(kù)FAT12、FAT16FAT32單片機(jī)的資源和速度有限,通常在處理FAT16文件系統(tǒng)的U盤(pán)時(shí)效率最高,而在處理FAT32時(shí)效最低(約低5%到20),所以應(yīng)該優(yōu)先選用簡(jiǎn)易版子程序庫(kù)。3、當(dāng)前使用U盤(pán)文件級(jí)子程序庫(kù),單片機(jī)系統(tǒng)需要具備以下硬件資源:不少于4KB到8KB的程序空間,不少于600字節(jié)的隨機(jī)器RAM。對(duì)于MCS-51單片機(jī),600字節(jié)的RAM包括不少于75字節(jié)的內(nèi)部RAM和530字節(jié)的外部RAM,不同的子程序庫(kù)對(duì)內(nèi)部RAM的占用稍有不同。為了支持所有U盤(pán)包括扇區(qū)大于512字節(jié)的大容量U盤(pán),子程序庫(kù)可能需要2.2K甚至4.3K字節(jié)的隨機(jī)器RAM。目前的U盤(pán)文件級(jí)子程序庫(kù)只支持第一個(gè)邏輯盤(pán),支持8+3格式的大寫(xiě)字母的短文件名,支持中文U(具體適用環(huán)境請(qǐng)參考各.HMCS51CH375HF3.LIB,上可以該子程序庫(kù)。子 MCS51單片機(jī)針對(duì)CH375B優(yōu)化過(guò)的增強(qiáng)版子程序庫(kù),文件名是CH375HF4.LIB,上可以該子程序庫(kù)。子是FILELIB4,提供與庫(kù)文件CH375HF6.LIB配合的多個(gè)示例程序CH375HFT.C,這些示例稍作修改也適用于其它庫(kù)。根據(jù)CH375的INT#連接方式分為查詢(xún)方式和中斷方式,根據(jù)外部RAM的數(shù)據(jù)方式分為“單DPTR雙DPTR復(fù)制”和“單DPTR和P2+R0”以及“外部子程序”,根據(jù)文件數(shù)據(jù)塊讀寫(xiě)方式分為扇區(qū)模式和字節(jié)模式。另外,還提供匯編語(yǔ)言的示例程序CH375HFT.ASM。供。子是FILELIB6,CH375HF4MCS51單片機(jī)I/O強(qiáng)版子程序庫(kù),文件名是CH375HF5.LIB。子FILELIB5,提MCS51I/O引腳模擬并口連接CH375、或者單片機(jī)通過(guò)串口連接CH375等應(yīng)用。CH375HFA.LIB。子是FILELIBA。文件名是CH375HFC.LIB。子 機(jī)、或者單片機(jī)通過(guò)普通I/O引腳模擬并口連接CH375、或者單片機(jī)通過(guò)串口連接CH375等應(yīng)用。模式,后者為Huge模式。子 是FILELIB7和FILELIBG,提供示例程序。的IAR編譯環(huán)境,后者支持V3xx的IAR編譯環(huán)境。子 32位ARM單片機(jī)的增強(qiáng)版子程序庫(kù),文件名是CH375HF9.LIB和CH375HFH.LIB,前者支持ADS編譯環(huán)境,后者SDTARMFILELIB9和32位ARM單片機(jī)的增強(qiáng)版子程序庫(kù),文件名是CH375HFS.LIB和CH375HFI.LIB,均為ADS編 是FILELIBS和FILELIBI。 是FILELIBO小端數(shù)據(jù)格式。子是FILELIBU。AVR單片機(jī)的增強(qiáng)版子程序庫(kù),文件名是CH375HFB.A和libCH375HFD.A以及CH375HFJ.R90,分別支持ICC、WinAVR-GCC、IAR編譯環(huán)境。子是FILELIBB和FILELIBD以及實(shí)際的子程序庫(kù),可以參考CH375LIB中DOC下LIB_LIST.TXT文件中的說(shuō)明,有關(guān)單片機(jī)型號(hào)和編譯器版本等信息請(qǐng)查看其中的.H頭文件的說(shuō)明。通用I/O模擬并口,可以支持硬件串口等。4、一般 件應(yīng)該被事先定義CH375HF_NO_CODE常量,從而該頭文件產(chǎn)生重復(fù)的目標(biāo)代碼。例如:#defineCH375HF_NO_CODE1//分配資源或產(chǎn)生代#include用于RAM多、數(shù)據(jù)量大、頻繁讀寫(xiě)數(shù)據(jù)的單片機(jī)系統(tǒng)。據(jù)緩沖區(qū)(實(shí)際上是與磁盤(pán)數(shù)據(jù)緩沖區(qū)合用RAM不經(jīng)常讀寫(xiě)數(shù)據(jù)的單片機(jī)系統(tǒng)。如果頻繁地向U盤(pán)寫(xiě)入零碎的數(shù)據(jù),可能會(huì)縮短U盤(pán)中閃存的使用查看子程序庫(kù)的全局變量“磁盤(pán)及文件狀態(tài)CH375DiskStatus每次新建或者打開(kāi)一個(gè)文件后,默認(rèn)為扇區(qū)模式,支持以扇區(qū)為單位的文件操作子程序CH375FileRead和CH375FileWrite及CH375FileLocate當(dāng)執(zhí)行一次以字節(jié)為單位的操作命令后將自CH375ByteRead和CH375ByteWrite及CH375Byocate。對(duì)于已打開(kāi)的同一個(gè)文件,不能混用兩種模式CH375vSectorSizeCH375vSectorSizeFATFDT文件表中專(zhuān)門(mén)記錄了當(dāng)前文件中有效數(shù)據(jù)后,變?yōu)樽芳訑?shù)據(jù),那么文件長(zhǎng)度應(yīng)該發(fā)生變化(增大FDTFDT如果數(shù)據(jù)量大并且需要連續(xù)寫(xiě)入數(shù)據(jù),立即更新FDT會(huì)降低效率,并且頻繁修改FDT也會(huì)縮短U盤(pán)中閃存的使用(因?yàn)殚W存只能進(jìn)行有限次擦寫(xiě),所以在這種情況下,應(yīng)該在連續(xù)寫(xiě)入多組數(shù)據(jù)后再更新一次FDT中的文件長(zhǎng)度,或者一直等到關(guān)閉文件時(shí)再更新文件長(zhǎng)度,CH375FileClose“全局變量CH375vFileSize”更新FDT中的文件長(zhǎng)度。在全局變量CH375LibConfig中,可以設(shè)定在FDTCH375FileCloseCH375vFileSizeFDT據(jù)的長(zhǎng)度。在字節(jié)模式下修改文件長(zhǎng)度有3種方法:方法1:調(diào)用CH375ByteWrite,寫(xiě)入0字節(jié)數(shù)據(jù),強(qiáng)制更新文件長(zhǎng) CH375vSectorSize倍數(shù),那么可以指定自動(dòng)更新,如果有效數(shù)據(jù)的長(zhǎng)度不是CH375vSectorSize的倍數(shù),那么可以由CH375FileModify修改文件長(zhǎng)度。在扇區(qū)模式下修改文件長(zhǎng)度有3種方法:CH375vSectorSizeCH375vFileSize2CH375FileClose,關(guān)閉文件,指定自動(dòng)更新文件長(zhǎng)度,如果希望文件長(zhǎng)度不是CH375vSectorSize的倍數(shù),那么應(yīng)該事先人為修改CH375vFileSize雖然子程序庫(kù)最大支持1GB的文件,但是為了提高效率,建議單個(gè)文件的長(zhǎng)度不要超過(guò)100MB,通常在幾KB到幾MB范圍是比較正常的。5、操作 前需參考CMD_PARAM結(jié)構(gòu)準(zhǔn)備參數(shù),返回后需參考CMD_PARAM結(jié)構(gòu)獲取結(jié)果。例如,CH375FileReadX子程序的輸入?yún)?shù)和輸出結(jié)果在mCmdParam.ReadX中。 ⑶⑷CH375FileOpen,CH375FileClose,CH375FileOpen,⑵CH375FileLocate或CH375Byocate,移動(dòng)文件指針到指定位CH375FileClose,CH375FileOpen,⑷CH375FileOpen,⑵CH375FileLocate或CH375Byocate,移動(dòng)文件指針到指定位⑸CH375FileOpen,⑵CH375FileLocate或CH375Byocate,移動(dòng)文件指針到末尾⑸CH375FileCreate⑷CH375FileOpen,⑶CH375FileLocate或CH375Byocate,移動(dòng)文件指針到頭部 ⑹CH375FileOpen,⑶CH375FileLocate或CH375Byocate,移動(dòng)文件指針到頭部⑹⑵CH375FileLocate或CH375Byocate,移動(dòng)文件指針到末尾⑷⑺⑴之前,CH375FileCreate,新建文⑶⑷如果要等很長(zhǎng)時(shí)間才有下一組數(shù)據(jù),為了避免在此期間發(fā)生斷電、U盤(pán)拔出等,導(dǎo)致文件長(zhǎng)度不正確,可以用CH375ByteWrite寫(xiě)入空數(shù)據(jù),強(qiáng)制更新文件長(zhǎng)度⑹6、變量和子CH375IntStatus;/*CH375由CH375執(zhí)行的非即時(shí)操作,通常是CH375在執(zhí)行完成后,以中斷方式通知單片機(jī),INT#引腳輸出低電平,直到單片機(jī)發(fā)出GET-STATUS命令才恢復(fù)高電平。單片機(jī)也可以用查詢(xún)方式查詢(xún)CH375的INT#引腳,如果是低電平則說(shuō)明CH375操作完成,然后再用GET-STATUS命令獲取狀態(tài)。如果是中CH375DiskStatus;/*數(shù)值,其它程序不應(yīng)該修改但可以查詢(xún),以便了解當(dāng)前CH375或U盤(pán)的工作狀態(tài)。 /*CH375它單片機(jī),方式1、2、3相同,不需要區(qū)分。以下是MCS51單片機(jī)的數(shù)據(jù)方式:(方式0外部子程序只適用于文件讀寫(xiě)時(shí)的數(shù)據(jù)只用于CH375FileRead和CH375FileWrite兩個(gè)子程序是指由子程序xWriteToExtBuf和xReadFromExtBuf進(jìn)行數(shù)據(jù),這兩個(gè)子程序是在應(yīng)用程序中定義的,被CH375的子程序庫(kù)調(diào)用(方式1:“單DPTR”,最常規(guī)的數(shù)據(jù)方式,使用一個(gè)DPTR來(lái)回切換,每傳輸一個(gè)字節(jié)需方式3:“單DPTR和P2+R0用P2+R0指向CH375的I/O端口并且用DPTR指向外部RAM進(jìn)行數(shù)據(jù),每傳輸一個(gè)字節(jié)需要6.25個(gè)機(jī)器周期,速度最快,適用于所有標(biāo)準(zhǔn)的MCS51單片機(jī),但是某些單片機(jī)在啟用內(nèi)置的外部RAM時(shí)會(huì)關(guān)閉P2+R0的功能,所以可能不適用CH375FileReadXCH375FileWriteXCH375的程序庫(kù)都會(huì)從FILE_DATA_BUF的起始地址開(kāi)始讀寫(xiě)數(shù)據(jù)。CH375vDiskFat;/*FAT:1=FAT12,2=FAT16,3=FAT32*/CH375vSecPerClus;/*當(dāng)前邏輯盤(pán)的每簇扇區(qū)數(shù)*/ /*當(dāng)前文件或者 的起始簇號(hào)*/ /*當(dāng)前文件的長(zhǎng)度,必要時(shí)可以人為修改*/ /*當(dāng)前文件指針,當(dāng)前讀寫(xiě)位置的字節(jié)偏移*/ /*版本:0-CH375,1-CH375A/B*/ /*邏輯盤(pán)的數(shù)據(jù)區(qū)域的起始LBA*/ /*當(dāng)前FDT所在的LBA地址*/ /*當(dāng)前FDT在扇區(qū)內(nèi)的偏移地址*/ /*對(duì)于FAT16為根 占用扇區(qū)數(shù),對(duì)于FAT32為根 起始簇號(hào)*/ /*磁盤(pán)的扇區(qū)大小,通常是512,但是有可能是 甚至4096*/ CH375GetVer /*CH375Reset(); /*復(fù)位CH375,如果工作環(huán)境差易受干擾,可以在使用CH375前調(diào)用*/CH375Init(); /*初始化CH375,在開(kāi)機(jī)后或者復(fù)位CH375之后,應(yīng)該初始化*/CH375DiskConnect( /* if(i!=ERR_SUCCESS)/*已經(jīng)斷開(kāi)*/else/*已經(jīng)連接*/CH375DiskReady( /*數(shù)據(jù)讀寫(xiě),所以強(qiáng)烈建議在U盤(pán)連接后先執(zhí)行該命令,再進(jìn)行文件讀寫(xiě)。示例:i=CH375DiskReady();/*UU*/ifi!=ERR_SUCCESS/**/else/*CH375FileOpen( /*打開(kāi)文件或 ,或者枚舉文件RAMMAX_PATH_LEN-15級(jí),如果是為RAM較大的單片機(jī)定制子程序庫(kù),則可以沒(méi)有長(zhǎng)度限制。示例:strcpy(mCmdParam.Open.mPathName,"\\YEAR2004\\CH375HFT.C"CH375FileOpen(/*如果路徑名太長(zhǎng),那么可以分多次逐級(jí)打開(kāi),首先打開(kāi)子,直到最后再打開(kāi)文件,其中,首次打開(kāi)必須是從根開(kāi)始,所以路徑名首字符必須是斜杠,以后接著前級(jí)再打開(kāi)時(shí)的首字strcpy(mCmdParam.Open.mPathName,"/YEAR2004/MONTH05/DATE18");/* 名*/i=CH375FileOpen();/*因?yàn)槁窂矫L(zhǎng),所以分兩次打開(kāi),先打開(kāi)前3級(jí)子 if(i==ERR_SUCCESS){/*前3級(jí)子 strcpy(mCmdParam.Open.mPathName,"HOUR08/ADC.TXT");/*首字符不是斜杠*/i=CH375FileOpen();/*打開(kāi)第4級(jí)子 和文件*/}ifi!=ERR_SUCCESS/**/else/* ,那么文件長(zhǎng)度CH375vFileSize總是0xFFFFFFFF,否則為真正的文件長(zhǎng)度。CH375FileEnumer( /* 枚舉 枚舉 文件進(jìn)行讀寫(xiě),可以再調(diào)用CH375FileOpen打開(kāi)返回的文件名。在評(píng)估板資料FILELIB3子 的CH375HFT.C中有枚舉程序示例,可以顯示根 for(c=0;c<255;c++){/*255*/strcpy(mCmdParam.Enumer.mPathName,"\\C51\\CH375*"/*在C51 i=strlen(mCmdParam.Enumer.mPathName);/*計(jì)算文件名長(zhǎng)度,指向結(jié)束符*/mCmdParam.Enumer.mPathName[i]c;/*0254*/i=CH375FileEnumer();/*文件名中含有通配符*,枚舉/搜索文件而不打開(kāi)*/ifi==ERR_MISS_FILEbreak;/**/if(i!=ERR_SUCCESS)break;/*出錯(cuò)*/printf("foundname%d#:%s\n",(unsignedint)c,mCmdParam.Enumer.mPathName 名}for(intcount=0;count<20000;count++){/*最多搜索前20000個(gè)文件*/strcpy(mCmdParam.Enumer.mPathName,"\\*");/*在根 下搜索所有文件名*/i=strlen(mCmdParam.Enumer.mPathName);/*計(jì)算文件名長(zhǎng)度,指向結(jié)束符*/mCmdParam.Enumer.mPathName[i]0xFF;/*255*/CH375vFileSize=count;/*指定搜索的序號(hào),幾乎沒(méi)有上限*/i=CH375FileEnumer(/**ifi==ERR_MISS_FILEbreak;/**/if(i!=ERR_SUCCESS)break;/*出錯(cuò)*/printf("foundname%d#:%s\n",count,mCmdParam.Enumer.mPathName 名if(CH375vFileSize!=0xFFFFFFFF)printf("thisisafile\n");/*枚舉到文件*/elseprintf("thisisadirectory\n");/*枚舉到子 }CH375FileEumerDIR_Name判斷是否為所需文件名或者 名,并記錄相關(guān)信息后返回,CH375FileOpen會(huì)依次枚CH375FileErase(/*mCmdParam.Erase.mPathName中指定被刪除文件的路徑名和文件名,格式與CH375FileOpen相同,不支持通配符。CH375FileCreate();/* strcpy(mCmdParam.Create.mPathName,"/C51/NEWFILE.TXT");/*新文件名,在C51子 下新建文件NEWFILE.TXT,要求C51已經(jīng)事先存在*/CH375FileCreate();/*新建文件并打開(kāi),如果文件已經(jīng)存在則先刪除后再新建*/CH375FileClose( /*位計(jì)算的,所以文件長(zhǎng)度通常是CH375vSectorSize的倍數(shù),mCmdParam.Close.mUpdaen為1如果希望文件長(zhǎng)度不是CH375vSectorSize的倍數(shù),那么單片機(jī)可以在關(guān)閉文件前調(diào)用CH375FileModify修改文件為指定的長(zhǎng)度,并且在關(guān)閉文件時(shí)指定不要自動(dòng)更新文件長(zhǎng)度。對(duì)于以字節(jié)為單位的文件讀寫(xiě),關(guān)閉文件時(shí)能夠自動(dòng)更新為適當(dāng)?shù)奈募L(zhǎng)度,所以不需要調(diào)用CH375FileModify修改文件長(zhǎng)度。CH375FileQuery( /*mCmdParam.Modify.mFileSize中是文件的長(zhǎng)度,以字節(jié)為單位,長(zhǎng)度可以是0CH375FileModify( /*mCmdParam.Modify.mFileDate指定新的文件日期,為0FFFFH則不修改,返回原日期mCmdParam.Modify.mFileTime指定新的文件時(shí)間,為0FFFFH則不修改,返回原時(shí)間mCmdParam.Modify.mFileAttr指定新的文件屬性,為0FFH則不修改,返回原屬性件的長(zhǎng)度修改為1105,但是不修改文件屬性、時(shí)間和日期。示例:mCmdParam.Modify.mFileAttr=ATTR_READ_ONLY;/*指定新的文件屬性為只讀*/mCmdParam.Modify.mFileTime=0xffff;/*不修改原文件時(shí)間*/mCmdParam.Modify.mFileDateMAKE_FILE_DATE(2006,3,28);/*CH375HF?.H*//*2006.03.28mCmdParam.Modify.mFileSize1105;/*1105*/CH375FileModify();/*修改當(dāng)前文件的信息,修改屬性、日期和長(zhǎng)度*/CH375FileLocate(/*機(jī)希望跳過(guò)文件的前1024字節(jié)再數(shù)據(jù),那么可以在mCmdParam.Locate.mSectorOffset參數(shù)中輸入2,調(diào)用該子程序?qū)⑽募羔樢苿?dòng)到2個(gè)扇區(qū)后,也就是從1024字節(jié)開(kāi)始(適用于扇區(qū)大小為512的U盤(pán)。對(duì)于寫(xiě)操作,如果單片機(jī)打算在原文件的尾部繼續(xù)添加數(shù)據(jù),而不希望影響前面的原有數(shù)據(jù),那么可以指定一個(gè)很大的扇區(qū)偏移,例如在mCmdParam.Locate.mSectorOffset參數(shù)中輸入0FFFFFFFFH,將文件指針移動(dòng)原文件的末尾,以便追加數(shù)據(jù)。該子程序?qū)⑽募L(zhǎng)度的倍數(shù),那么文件尾部不足一個(gè)扇區(qū)的零碎數(shù)據(jù)部分將被忽略。該子程序返回時(shí), CH375FileRead();/*以扇區(qū)為單位從當(dāng)前文件數(shù)據(jù),建議用CH375FileReadX從當(dāng)前已打開(kāi)文件中數(shù)據(jù),每次后自動(dòng)移動(dòng)文件指針,第二次調(diào)用時(shí)將從第一次數(shù)據(jù)的后面繼續(xù)數(shù)據(jù)。在調(diào)用該子程序前,應(yīng)該在mCmdParam.Read.mSectorCount中指定需要的扇區(qū)數(shù),所以數(shù)據(jù)的長(zhǎng)度總是扇區(qū)大小CH375vSectorSize的倍數(shù)。該子程序會(huì)根據(jù)CH375vFileSize自動(dòng)檢查文件是否結(jié)束,如果文件已經(jīng)結(jié)束,那么返回時(shí)在臨時(shí)增大CH375vFileSize以讀出最后一個(gè)扇區(qū)(實(shí)際有效數(shù)據(jù)不足一個(gè)扇區(qū),然后再恢復(fù)原那么CH375FileRead子程序?qū)⒄{(diào)用應(yīng)用程序中定義的子程序xWriteToExtBuf從CH375讀出數(shù)據(jù)到外部的文件數(shù)據(jù)緩沖區(qū)中,否則CH375FileRead子程序自行向文件數(shù)據(jù)緩沖區(qū)保存數(shù)據(jù)。CH375FileReadX();/*以扇區(qū)為單位從當(dāng)前文件數(shù)據(jù)到指定緩沖區(qū)與CH375FileRead的唯一區(qū)別是可以在mCmdParam.ReadX.mDataBuffer中指定緩沖區(qū)起始地址,CH375FileWrite(/*CH375FileWriteX件結(jié)束簇,并且在需要時(shí)會(huì)自動(dòng)分配磁盤(pán)空間以便繼續(xù)寫(xiě)入。默認(rèn)情況下(由CH375LibConfig如果文件長(zhǎng)度不是CH375vSectorSize的倍數(shù),那么可以在關(guān)閉文件前調(diào)用CH375FileModify指定mCmdParam.Locate.mSectorOffset=0xffffffff;/*移動(dòng)文件指針到文件末尾*/CH375FileLocate();/*移動(dòng)文件指針,以便在原文件的末尾追加數(shù)據(jù)*/mCmdParam.Write.mSectorCount2;/*21024*/CH375FileWrite();/*以扇區(qū)為單位向文件寫(xiě)入數(shù)據(jù)*/如果在程序庫(kù)配置CH375ibConfig那么CH37FieWriexRadFromEBufCH35中,否則CH375ileWrieFE_DATAUF_LENCH375FileWiteCH37ileWrtCH375FileWriteX(/*CH375Byocate();/*以字節(jié)為單位移動(dòng)當(dāng)前文件指針,進(jìn)入字節(jié)模式機(jī)希望跳過(guò)文件的前18字節(jié) 數(shù)據(jù),那么可以在 ocate.mByteOffset參 輸入0FFFFFFFFH,將文件指針移動(dòng)原文件的末尾,以便追加數(shù)據(jù)。示例:mCmdParam.Byocate.mByteOffset=192;/*移動(dòng)文件指針到第193字節(jié)*/CH375Byocate();/*移動(dòng)文件指針,跳過(guò)文件頭部的192個(gè)字節(jié)*//*以字節(jié)為單位進(jìn)行文件讀寫(xiě)操作,讀寫(xiě)操作從第193字節(jié)的位置開(kāi)始*/mCmdParam.Byocate.mByteOffset=0xffffffff;/*移動(dòng)文件指針到文件末尾*/CH375Byocate();/*移動(dòng)文件指針,以便在原文件的末尾追加數(shù)據(jù)*/CH375ByteRead( /*以字節(jié)為單位從當(dāng)前文件數(shù)據(jù)塊,進(jìn)入字節(jié)模式 數(shù)據(jù),每次后自動(dòng)移動(dòng)文件指針,第二次調(diào)用子程序時(shí)將從第一次 的字節(jié)數(shù),所以判斷mCmdParam.ByteRead.mByteCount如果變小就說(shuō)明文件已經(jīng)結(jié)束。示例:mCmdParam.ByteRead.mByteCount=9;/*準(zhǔn)備讀出9個(gè)字節(jié),如果返回小于9則文件結(jié)束*/i=CH375ByteRead();/*以字節(jié)為單位從文件讀出數(shù)據(jù)塊*/ifi!=ERR_SUCCESS/**/else/*ifmCmdParam.ByteRead.mByteCount9/*在mCmdParam.ByteRead.mByteBuffer中為讀出的數(shù)據(jù)塊*/CH375ByteRead(*CH375ByteWrite( /*字節(jié)數(shù),字節(jié)數(shù)過(guò)MAX_BYTE_IO和sizeof(mCmdParam.ByteWrite.mByteBuffer),準(zhǔn)備寫(xiě)并且在需要時(shí)會(huì)自動(dòng)分配磁盤(pán)空間以便繼續(xù)寫(xiě)入。默認(rèn)情況下(CH375LibConfig,該子入字節(jié)數(shù)mCmdParam.ByteWrite.mByteCount0),那么該子程序?qū)⒏挛募L(zhǎng)度。示例:mCmdParam.ByteWrite.mByteCount=28;/*28個(gè)字節(jié)的數(shù)據(jù)*//*將準(zhǔn)備寫(xiě)入的數(shù)據(jù)塊到mCmdParam.ByteWrite.mByteBuffer中*/i=CH375ByteWrite();/*以字節(jié)為單位向文件寫(xiě)入數(shù)據(jù)塊*/ifi!=ERR_SUCCESS/**/else/*/*將準(zhǔn)備寫(xiě)入的數(shù)據(jù)塊到mCmdParam.ByteWrite.mByteBuffer中*/CH375ByteWrite();/*以字節(jié)為單位向文件寫(xiě)入數(shù)據(jù)塊*/CH375DirtyBuffer(/*CH375的子程序庫(kù)中,文件操作子程序CH375File????和磁盤(pán)查詢(xún)子程序CH375DiskQuery都可能會(huì)用到磁盤(pán)數(shù)據(jù)緩沖區(qū)pDISK_BASE_BUF,并且有可能在pDISK_BASE_BUF中保存了磁盤(pán)信息,所以必須保證pDISK_BASE_BUF不被用于,如果RAM資源有限,要將pDISK_BASE_BUF臨時(shí)用于其它用途,那么在臨時(shí)用完后必須調(diào)用CH375DirtyBuffer清除磁盤(pán)緩沖區(qū)。CH375DiskSize( /* CH375DiskQuery( /*統(tǒng),1FAT12,2FAT16,3FAT32CH375BulkOnlyCmd( mCmdParam.BOC.mCBW.mCBW_DataLen=0;/*該命令沒(méi)有數(shù)據(jù)傳輸*/mCmdParam.BOC.mCBW.mCBW_Flag=0x00;mCmdParam.BOC.mCBW.mCBW_CB_Len=6;/*命令塊長(zhǎng)度*/mCmdParam.BOC.mCBW.mCBW_CB_Buf[0]=0x1E;/*防止或者允許移除的SCSI命令碼*/mCmdParam.BOC.mCBW.mCBW_CB_Buf[4]=0x01;/*防止移除*/mCmdParam.BOC.mCBW.mCBW_CB_Buf[2]=mCmdParam.BOC.mCBW.mCBW_CB_Buf[1]=0;mCmdParam.BOC.mCBW.mCBW_CB_Buf[5]=mCmdParam.BOC.mCBW.mCBW_CB_Buf[3]=0;CH375BulkOnlyCmd();/*執(zhí)行BulkOnly協(xié)議令*/CH375SaveVariable( /*CH375sDiskReady( /*CH375SxQueryInterrupt( 單片機(jī)應(yīng)該通過(guò)GET-STATUS命令獲取中斷狀態(tài),并參與當(dāng)前磁盤(pán)狀態(tài)信息。止頭文件中的該子程序,然后在主程序中自行定義一個(gè)特殊的xQueryInterrupt子程序。CH375Interrupt( /*CH375單片機(jī)進(jìn)入中斷服務(wù)程序,通過(guò)GET-STATUS命令獲取中斷狀態(tài),當(dāng)前磁盤(pán)狀態(tài)信息。xWriteToExtBuf(UINT8mLength /*從 “外部子程序”方式。當(dāng)單片機(jī)調(diào)用CH375FileRead子程序從文件數(shù)據(jù)時(shí),CH375FileRead數(shù)mLength為0,那么說(shuō)明是操作錯(cuò)誤將要重試,應(yīng)該恢復(fù)緩沖區(qū)起址。CH375LibConfig3或者20,那CH375FileRead子程序?qū)⒉捎孟鄳?yīng)的數(shù)據(jù)FILE_DATA_BUFxReadFromExtBuf(UINT8mLength)/*從外部緩沖區(qū)文件數(shù)據(jù)到CH375CH375LibConfig320,那CH375子程序庫(kù)的CH375FileWrite子程序工作將多次調(diào)用該子程序,由該子程序直接從外部緩沖區(qū)分多次文件數(shù)據(jù)到CH375。如果輸入?yún)?shù)mLength為0,那么說(shuō)明是操作錯(cuò)誤將要重試,應(yīng)該恢復(fù)緩沖區(qū)起址。CH375LibConfig3或者20,那么CH375FileWrite子程序?qū)⒉捎孟鄳?yīng)的數(shù)據(jù)復(fù)FILE_DATA_BUFxDelay100uS /*100uSxDelayAfterWrite( /*xFileNameEnumer( /*硬件I/O接口子程序用于單片機(jī)與CH375之間交換數(shù)據(jù)。除了部分MCS51總線I/O子程序庫(kù)內(nèi)置了I/O接口子程序之外,其它的子程序庫(kù)都需要由應(yīng)用程序?yàn)槠涮峁┯布蘒/O接口子程序,應(yīng)用程I/O接口方式。xWriteCH375Cmd(UINT8mCmd/*CH375至少1.5uS后返回xWriteCH375Data(UINT8mData/*CH375xReadCH375Data( / DISK_BASE_BUF_LEN,DISK_BASE_BUF,應(yīng)用程序可以將pDISK_BASE_BUF7、相關(guān)部分,main主程序通常無(wú)需修改,重新編譯和就可以使用。主機(jī)方式下,CH375的INT#引腳采用查詢(xún)方式處理,數(shù)據(jù)方式為“單DPTR”,所以速度較慢,適用于所有MCS51單片機(jī),需要1K以上的RAM空間。插入U(xiǎn)盤(pán)后,該程序?qū)盤(pán)中的/C51/CH375HFT.C文件中的前600個(gè)字符顯示出來(lái),如果找不到文件,那么該程序?qū)@示當(dāng)前 有文件名。由于RAM較少,所以不能支持所有U盤(pán)?;バ裕蛔非髠鬏斔俣?。計(jì)算機(jī)端可以通過(guò)CH372/CH375的調(diào)試工具中的MCS51工具程序CH37XDBG.EXEMCS51MCS51RAM、內(nèi)部RAM以及絕大多數(shù)SFR,當(dāng)然也能夠進(jìn)行數(shù)據(jù)通訊。USB,USB該程序?qū)盤(pán)中的/C51/CH375HFT.C文件中的小寫(xiě)字母轉(zhuǎn)成大寫(xiě)字母后,寫(xiě)到新建的文件NEWFILE.TXT中。如果找CH375HFT.C,那么該程序C51下所有CH375開(kāi)頭的文件名,并新建NEWFILE.TXT文件并寫(xiě)入提示信息。如果找不到C51子,那么該程序?qū)@示根NEWFILE.TXT32KRAM。C語(yǔ)言示例程序,CH375的INT#引腳采用中斷方式處理,數(shù)據(jù)方式為“單DPTR和P2+R0復(fù)制”,所以速度最快,適用于標(biāo)準(zhǔn)MCS51單片機(jī),不能使用內(nèi)置的外部RAM,至少需要2.3K以上的RAM空間才能支持所有U盤(pán)。C語(yǔ)言示例程序,CH375的INT#引腳采用查詢(xún)方式處理,數(shù)據(jù)方式為“雙DPTR

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論