問個(gè)問題,按用戶手冊上說,我讀完緩沖區(qū)的數(shù)據(jù),CH375應(yīng)該會自動釋放緩沖區(qū),可實(shí)際使用,發(fā)完64字節(jié)數(shù)據(jù),再發(fā)下一次64字節(jié)數(shù)據(jù),必須先發(fā)CMD_UNLOCK_USB指令,請問是否連續(xù)發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)與數(shù)據(jù)之間都必須發(fā)送CMD_UNLOCK_USB指令?
每成功發(fā)送一包數(shù)據(jù)即產(chǎn)生上傳成功中斷后都必須解鎖,確切的說是包與包之間
向各位請教個(gè)問題,我今天參照CH375EVT里的EXAM0寫了個(gè)讀U盤扇區(qū)的程序,個(gè)人感覺可以讀寫了,讀到的0x1FE、0x1ff地址的結(jié)束碼為0x55AA。 可讀扇區(qū)時(shí)最后已經(jīng)不讀數(shù)據(jù)了,還必須發(fā)一個(gè)CMD_DISK_RD_GO指令,是為了讓CH375返回USB_INT_SUCCESS狀態(tài),以接受其他操作嗎? 另外,在exam0里,對U盤的扇區(qū)0數(shù)據(jù)覆蓋到扇區(qū)1,再將扇區(qū)0清空;然后復(fù)制扇區(qū)1的內(nèi)容到扇區(qū)0;按我之前看海量存儲的理解,扇區(qū)1應(yīng)該是FAT表的位置吧,這樣不影響U盤的使用嗎?
(1)CH375單次最大可讀寫64B數(shù)據(jù),扇區(qū)大小為512的話,那么需要8次才可以讀完,CMD_DISK_RD_GO相當(dāng)于是通知CH375執(zhí)行IN事務(wù)讀取數(shù)據(jù),具體含義用戶也無需知道,照著流程做就可以了。 (2)扇區(qū)1一般是保留扇區(qū),不是FAT表,這個(gè)例程僅是告訴用戶怎么讀寫扇區(qū)
呵呵,讀512字節(jié)數(shù)據(jù),應(yīng)該是64Byte+7次CMD_DISK_RD_GO,可是要收到USB_INT_SUCCESS,讀完了512字節(jié)數(shù)據(jù)就必須再發(fā)送一次CMD_DISK_RD_GO,是這樣吧?
可以這么理解,如果讀512字節(jié)的數(shù)據(jù),會產(chǎn)生9次中斷,最后一次中斷狀態(tài)為整個(gè)讀操作的狀態(tài),USB_INT_SUCCESS 表示成功
請教一下,我是直接將CH375HF4.lib添加到工程文件中,將頭文件包含在c文件中,可編譯有很多錯(cuò)誤信息,請問有人能給點(diǎn)修正的建議嗎?
用我們的工程試試:UploadImages/2009831281564.rar
非常感謝!
因?yàn)槲募还潭ǎ凑瘴易约旱睦斫庑薷牧?,可是無效,麻煩指點(diǎn)一下。
while ( 1 ) { while ( CH375DiskStatus < DISK_CONNECT ) { /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; /* 有設(shè)備連接則返回成功,CH375DiskConnect同時(shí)會更新全局變量CH375DiskStatus */ mDelay100mS( ); } mDelay100mS( ); /* 延時(shí),可選操作,有的USB存儲器需要幾十毫秒的延時(shí) */ mDelay100mS( );
/* 檢查U盤是否準(zhǔn)備好,但是某些U盤必須要執(zhí)行這一步才能工作 */ for ( i = 0; i < 5; i ++ ) { /* 有的U盤總是返回未準(zhǔn)備好,不過可以被忽略 */ mDelay100mS( ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤是否準(zhǔn)備好 */ } #if DISK_BASE_BUF_LEN if ( DISK_BASE_BUF_LEN < CH375vSectorSize ) { /* 檢查磁盤數(shù)據(jù)緩沖區(qū)是否足夠大,CH375vSectorSize是U盤的實(shí)際扇區(qū)大小 */ while ( CH375DiskConnect( ) == ERR_SUCCESS ) mDelay100mS( ); continue; } #endif //文件名20090803.txt mCmdParam.Open.mPathName[0] = 0x5c; /* '\' */ mCmdParam.Open.mPathName[1] = 0x5c; /* '\' */ mCmdParam.Open.mPathName[2] = 0x32; /* '2' */ mCmdParam.Open.mPathName[3] = 0x30; /* '0' */ mCmdParam.Open.mPathName[4] = 0x30; /* '0' */ mCmdParam.Open.mPathName[5] = 0x39; /* '9' */ mCmdParam.Open.mPathName[6] = 0x30; /* '0' */ mCmdParam.Open.mPathName[7] = 0x38; /* '8' */ mCmdParam.Open.mPathName[8] = 0x30; /* '0' */ mCmdParam.Open.mPathName[9] = 0x33; /* '3' */ mCmdParam.Open.mPathName[10] = 0x2c; /* '.' */ mCmdParam.Open.mPathName[11] = 0x74; /* 't' */ mCmdParam.Open.mPathName[12] = 0x78; /* 'x' */ mCmdParam.Open.mPathName[13] = 0x74; /* 't' */
i = CH375FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */
FILE_DATA_BUF[0] = 0x59; /* 將剛才已寫入U(xiǎn)盤的零頭數(shù)據(jù)復(fù)制到緩沖區(qū)的頭部 */ FILE_DATA_BUF[1] = 0x4c; FILE_DATA_BUF[2] = 0x5a; FILE_DATA_BUF[3] = 0x20; FILE_DATA_BUF[4] = 0x69; FILE_DATA_BUF[5] = 0x73; FILE_DATA_BUF[6] = 0x20; FILE_DATA_BUF[7] = 0x61; FILE_DATA_BUF[8] = 0x20; FILE_DATA_BUF[9] = 0x70; FILE_DATA_BUF[10] = 0x69; FILE_DATA_BUF[11] = 0x67;
NewSize = 12; /* 新文件的長度 */ SecCount = 1; /* (NewSize+CH375vSectorSize-1)/CH375vSectorSize, 計(jì)算文件的扇區(qū)數(shù),因?yàn)樽x寫是以扇區(qū)為單位的 */
mCmdParam.Write.mSectorCount = SecCount; /* 寫入所有扇區(qū)的數(shù)據(jù) */ i = CH375FileWrite( ); /* 向文件寫入數(shù)據(jù) */
mCmdParam.Modify.mFileAttr = ATTR_ARCHIVE; /* 輸入?yún)?shù): 新的文件屬性,為0FFH則不修改 */ mCmdParam.Modify.mFileTime = MAKE_FILE_TIME(17,0,0); /* 輸入?yún)?shù): 新的文件時(shí)間,為0FFFFH則不修改,使用新建文件產(chǎn)生的默認(rèn)時(shí)間 */ mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( 2009, 8, 3 ); /* 輸入?yún)?shù): 新的文件日期: 2004.05.18 */ mCmdParam.Modify.mFileSize = NewSize; /* 輸入?yún)?shù): 如果原文件較小,那么新的文件長度與原文件一樣長,否則被RAM所限,如果文件長度大于64KB,那么NewSize必須為UINT32 */ i = CH375FileModify( ); /* 修改當(dāng)前文件的信息,修改日期和長度 */
mCmdParam.Close.mUpdateLen = 0; /* 不要自動計(jì)算文件長度,如果自動計(jì)算,那么該長度總是CH375vSectorSize的倍數(shù) */ i = CH375FileClose( ); }
一個(gè)“0x5c”就可以了,同時(shí)文件后綴"txt"需要大寫。
謝謝,修改之后生成了1個(gè)文件了,不過文件名為“20090803.,TX”,很奇怪,有個(gè)小數(shù)點(diǎn),是不是我有參數(shù)傳遞不對?
mCmdParam.Open.mPathName[0] = 0x5c; mCmdParam.Open.mPathName[1] = 0x32; mCmdParam.Open.mPathName[2] = 0x30; mCmdParam.Open.mPathName[3] = 0x30; mCmdParam.Open.mPathName[4] = 0x39; mCmdParam.Open.mPathName[5] = 0x30; mCmdParam.Open.mPathName[6] = 0x38; mCmdParam.Open.mPathName[7] = 0x30; mCmdParam.Open.mPathName[8] = 0x33; mCmdParam.Open.mPathName[9] = 0x2c; mCmdParam.Open.mPathName[10] = 0x54; mCmdParam.Open.mPathName[11] = 0x58; mCmdParam.Open.mPathName[12] = 0x54;
有個(gè)逗號,不好意思,寫錯(cuò)了。
哪位指教一下,20090803.,TX”,很奇怪,生成的txt文件后綴名有個(gè)逗號,是不是我有參數(shù)傳遞不對?
mCmdParam.Open.mPathName[0] = 0x5c; mCmdParam.Open.mPathName[1] = 0x32; mCmdParam.Open.mPathName[2] = 0x30; mCmdParam.Open.mPathName[3] = 0x30; mCmdParam.Open.mPathName[4] = 0x39; mCmdParam.Open.mPathName[5] = 0x30; mCmdParam.Open.mPathName[6] = 0x38; mCmdParam.Open.mPathName[7] = 0x30; mCmdParam.Open.mPathName[8] = 0x33; mCmdParam.Open.mPathName[9] = 0x2c; mCmdParam.Open.mPathName[10] = 0x54; mCmdParam.Open.mPathName[11] = 0x58; mCmdParam.Open.mPathName[12] = 0x54;
"."的16進(jìn)制數(shù)據(jù)是0X2E吧。你自己修改下在做。