我的環(huán)境是這樣的,我使用的是ATMEGA128-16AU單片機(jī),與CH375B通信,電源是5V的 我用單片機(jī)的一個(gè)引腳做程序運(yùn)行顯示。調(diào)用程序是這樣的 while(1){ DelayMs(40); LightFlash(); DelayMs(40); LightFlash(); DelayMs(40); LightFlash(); DelayMs(40); LightFlash(); DelayMs(40); LightFlash(); CH375USB(); } lightFlash()是燈引腳取反 CH375USB是U盤檢測(cè)及寫數(shù)據(jù)程序。 現(xiàn)在的現(xiàn)象是,在未插入U(xiǎn)盤之前,程序執(zhí)行感覺是很快的(燈閃爍的比較快),當(dāng)插入U(xiǎn)盤后,程序執(zhí)行感覺就慢了(燈閃爍的慢了),不知道為什么。 說明下,CH375USB();程序是在本站的參考程序下修改完成的,并且以前在使用CH375V(5v)時(shí)是沒有這個(gè)問題的。而CH375B(寬電壓)就遇到了,不知是什么原因
另:mCmdParam.Modify.mFileTime這個(gè)時(shí)間修改怎么使用?就是文件的修改時(shí)間如何寫? 謝謝回復(fù)
不知道你的CH375USB()函數(shù)里面到底到底是什么樣的操作? mCmdParam.Modify.mFileTime的修改是這樣的,日期的計(jì)算方法是(年-1980)*512+月*32+日,時(shí)間的計(jì)算方法是小時(shí)*2048+分鐘*32+秒/2
謝謝您的回復(fù) 這是CH375USB()函數(shù)的主要內(nèi)容(除了變量以外的全部) CH375_PORT_INIT( ); mDelaymS( 100 ); /* 延時(shí)100毫秒 */
mDelaymS( 100 ); // printf( "Start\n" ); PCPutString("Start\n",6); i = CH375LibInit( ); /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ mStopIfError( i ); /* 其它電路初始化 */
// while ( 1 ) { // printf( "Wait Udisk\n" ); PCPutString("Wait Udisk\n", 11); /* while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( );*/ /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ while ( CH375DiskStatus < DISK_CONNECT ) { /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ i = CH375DiskConnect( ); // if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; /* 有設(shè)備連接則返回成功,CH375DiskConnect同時(shí)會(huì)更新全局變量CH375DiskStatus */ if ( i == ERR_SUCCESS ) break; /* 有設(shè)備連接則返回成功,CH375DiskConnect同時(shí)會(huì)更新全局變量CH375DiskStatus */ // Uart0Send(&i,1); mDelaymS( 100 ); second++; if(second > 20){ second = 0; return; } } // LED_OUT_ACT( ); /* LED亮 */ mDelaymS( 250 ); /* 延時(shí),可選操作,有的USB存儲(chǔ)器需要幾十毫秒的延時(shí) */
/* 檢查U盤是否準(zhǔn)備好,有些U盤不需要這一步,但是某些U盤必須要執(zhí)行這一步才能工作 */ for ( i = 0; i < 5; i ++ ) { /* 有的U盤總是返回未準(zhǔn)備好,不過可以被忽略 */ mDelaymS( 100 ); // printf( "Ready ?\n" ); PCPutString("Ready?\n",7); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤是否準(zhǔn)備好 */ } NewSize = 512; SecCount = 3; for ( count=0; count < NewSize; count ++ ) { /* 將文件中的小寫字符轉(zhuǎn)換為大寫 */ FILE_DATA_BUF[ count ] = temp[count]; } FILE_DATA_BUF[510] = 0x0d; FILE_DATA_BUF[511] = 0x0a; FILE_DATA_BUF[ 99 ] = 0x0d; FILE_DATA_BUF[ 100 ] = 0x0a; #ifdef EN_DISK_WRITE /* 子程序庫支持寫操作 */ /* 產(chǎn)生新文件 */ // printf( "Create\n" ); PCPutString("Create\n", 7); strcpy( (char *)mCmdParam.Create.mPathName, "\\NEWFILE.TXT" ); /* 新文件名,在根目錄下 */ i = CH375FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ mStopIfError( i ); // printf( "Write\n" ); PCPutString("Write\n",6); mCmdParam.Write.mSectorCount = SecCount; /* 寫入所有扇區(qū)的數(shù)據(jù) */ /* current_buffer = & FILE_DATA_BUF[0]; 如果文件讀寫的數(shù)據(jù)的復(fù)制方式為"外部子程序",那么需要設(shè)置存放數(shù)據(jù)的緩沖區(qū)的起始地址 */ for( count1 = 0; count1 < 10 ; count1++) { mCmdParam.Write.mSectorCount = 1; i = CH375FileWrite( ); /* 向文件寫入數(shù)據(jù) */ mCmdParam.Write.mSectorCount = 1; i = CH375FileWrite( ); } // mStopIfError( i ); // printf( "Modify\n" ); PCPutString("Modify\n",7); mCmdParam.Modify.mFileAttr = 0xff; /* 輸入?yún)?shù): 新的文件屬性,為0FFH則不修改 */ mCmdParam.Modify.mFileTime = 0x123725; /* 輸入?yún)?shù): 新的文件時(shí)間,為0FFFFH則不修改,使用新建文件產(chǎn)生的默認(rèn)時(shí)間 */ mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( Year, Month, Day ); /* 輸入?yún)?shù): 新的文件日期: 2004.05.18 */ mCmdParam.Modify.mFileSize = NewSize*10 * 2; /* 輸入?yún)?shù): 如果原文件較小,那么新的文件長度與原文件一樣長,否則被RAM所限,如果文件長度大于64KB,那么NewSize必須為UINT32 */ i = CH375FileModify( ); /* 修改當(dāng)前文件的信息,修改日期和長度 */ mStopIfError( i ); // printf( "Close\n" ); PCPutString("Close\n",6); mCmdParam.Close.mUpdateLen = 0; /* 不要自動(dòng)計(jì)算文件長度,如果自動(dòng)計(jì)算,那么該長度總是512的倍數(shù) */ i = CH375FileClose( ); mStopIfError( i ); #endif // printf( "Take out\n" ); PCPutString("Take out\n",9); /* while ( CH375DiskStatus != DISK_DISCONNECT ) xQueryInterrupt( );*/ /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤拔出 */ while ( CH375DiskStatus >= DISK_CONNECT ) { /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤拔出 */ if ( CH375DiskConnect( ) != ERR_SUCCESS ) break; mDelaymS( 100 ); }
CH375B對(duì)新插入的U盤的初始化過程加長了一些,30mS左右,主要是為了適應(yīng)個(gè)別慢熱型的U盤