這幾天調(diào)試ch376,發(fā)現(xiàn)每次“寫命令”和“寫數(shù)據(jù)”都需要延時(shí)30毫秒才能正常創(chuàng)建文件并寫入信息到文件,我延時(shí)5us無(wú)法創(chuàng)建文件,mStopIfError( s )也不報(bào)錯(cuò)。 我看手冊(cè)上寫的“寫命令”和“寫數(shù)據(jù)”延時(shí)超過0.6us或者1.5us就可以了啊。 請(qǐng)問這是咋回事???
把你的時(shí)序程序貼上來(lái)看看
#include #include
#include "HAL.H" #include "DEBUG.H" #include "FILE_SYS.H"
UINT8 buf[64];
Udisk( ) { UINT8 i, s; P_FAT_DIR_INFO pDir; UINT8 SrcName[64]; UINT8 TarName[64]; mDelaymS( 100 ); /* 延時(shí)100毫秒 */
printf( "Start\n" );
s = mInitCH376Host( ); /* 初始化CH376 */ mStopIfError( s ); /* 其它電路初始化 */
while ( 1 ) { printf( "Wait Udisk/SD\n" ); while ( CH376DiskConnect( ) != USB_INT_SUCCESS ) { /* 檢查U盤是否連接,等待U盤插入,對(duì)于SD卡,可以由單片機(jī)直接查詢SD卡座的插拔狀態(tài)引腳 */ mDelaymS( 100 ); } mDelaymS( 200 ); /* 延時(shí),可選操作,有的USB存儲(chǔ)器需要幾十毫秒的延時(shí) */
/* 對(duì)于檢測(cè)到USB設(shè)備的,最多等待100*50mS,主要針對(duì)有些MP3太慢,對(duì)于檢測(cè)到USB設(shè)備并且連接DISK_MOUNTED的,最多等待5*50mS,主要針對(duì)DiskReady不過的 */ for ( i = 0; i < 100; i ++ ) { /* 最長(zhǎng)等待時(shí)間,100*50mS */ mDelaymS( 50 ); printf( "Ready ?\n" ); s = CH376DiskMount( ); /* 初始化磁盤并測(cè)試磁盤是否就緒 */ if ( s == USB_INT_SUCCESS ) break; /* 準(zhǔn)備好 */ else if ( s == ERR_DISK_DISCON ) break; /* 檢測(cè)到斷開,重新檢測(cè)并計(jì)時(shí) */ if ( CH376GetDiskStatus( ) >= DEF_DISK_MOUNTED && i >= 5 ) break; /* 有的U盤總是返回未準(zhǔn)備好,不過可以忽略,只要其建立連接MOUNTED且嘗試5*50mS */ } if ( s == ERR_DISK_DISCON ) { /* 檢測(cè)到斷開,重新檢測(cè)并計(jì)時(shí) */ printf( "Device gone\n" ); continue; } if ( CH376GetDiskStatus( ) < DEF_DISK_MOUNTED ) { /* 未知USB設(shè)備,例如USB鍵盤、打印機(jī)等 */ printf( "Unknown device\n" ); goto UnknownUsbDevice; } i = CH376ReadBlock( buf ); /* 如果需要,可以讀取數(shù)據(jù)塊CH376_CMD_DATA.DiskMountInq,返回長(zhǎng)度 */ if ( i == sizeof( INQUIRY_DATA ) ) { /* U盤的廠商和產(chǎn)品信息 */ buf[ i ] = 0; printf( "UdiskInfo: %s\n", ((P_INQUIRY_DATA)buf) -> VendorIdStr ); }
strcpy( TarName, "\\NEWFILE.TXT" ); /* 目標(biāo)文件名 */ printf( "Create\n" ); s = CH376FileCreatePath( TarName ); /* 新建多級(jí)目錄下的文件,支持多級(jí)目錄路徑,輸入緩沖區(qū)必須在RAM中 */
mStopIfError( s ); printf( "Write\n" ); strcpy( buf, "這是個(gè)測(cè)試文件,看看能不能把數(shù)據(jù)寫進(jìn)u盤\xd\n" ); s = CH376ByteWrite( buf, strlen(buf), NULL ); /* 以字節(jié)為單位向當(dāng)前位置寫入數(shù)據(jù)塊 */
mStopIfError( s ); printf( "Close\n" ); s = CH376FileClose( TRUE ); /* 關(guān)閉文件,對(duì)于字節(jié)讀寫建議自動(dòng)更新文件長(zhǎng)度 */ mStopIfError( s ); printf( "U disk operation is complete!\n" );
UnknownUsbDevice: printf( "Please remove U disk!\n" ); while ( CH376DiskConnect( ) == USB_INT_SUCCESS ) { /* 檢查U盤是否連接,等待U盤拔出 */ mDelaymS( 100 ); } mDelaymS( 200 ); } }
我發(fā)現(xiàn)主要問題就是出現(xiàn)在s = CH376FileCreatePath( TarName )上,要是延時(shí)小于30ms根本就不能創(chuàng)建文件,而且s返回值是正確的,并無(wú)報(bào)錯(cuò)信息。 這是打印信息: Start Wait Udisk/SD Ready ? Create Close U disk operation is complete!
但是u盤里就是啥也沒有!
但是要是“寫命令”和“寫數(shù)據(jù)”延時(shí)30ms,u盤里就會(huì)有NEWFILE.TXT了。但是這樣的速度無(wú)法滿足項(xiàng)目要求??!
請(qǐng)幫幫忙分析一下,謝謝了。
我的硬件平臺(tái)是DSP5000系列。時(shí)鐘跑到108M。
請(qǐng)沁恒的工程師幫忙分析一下吧,先謝謝了。
既然你測(cè)試到這一步了,則問題基本確定,時(shí)序過快導(dǎo)致的,按照CH376DS1時(shí)序說明去做。30MS是不會(huì)的,說明你的延時(shí)不準(zhǔn)。