如題 在初始化配置成功和 U盤檢測成功的情況下,打開文件時返回 02 這是什么情況
U盤檢測成功之后 有沒有對U盤進(jìn)行初始化操作,也就是發(fā)送CMD0H_DISK_MOUNT命令
發(fā)送了 發(fā)送完這個命令都返回成功了 也就是函數(shù)s = CH376DiskMount( );結(jié)果是成功的 USB_INT_SUCCESS
0x02表示磁盤沒有被初始化,也就是 CH376DiskMount()可能沒有通過,返回的USB_INT_SUCCESS也可能是上次的結(jié)果,如果CH376DiskMount()成功了 那么你可以嘗試讀一下磁盤的信息。 i = CH376ReadBlock( buf ); /* 如果需要,可以讀取數(shù)據(jù)CH376_CMD_DATA.DiskMountInq,返回長度 */ if ( i == sizeof( INQUIRY_DATA ) ) { /* U盤的廠商和產(chǎn)品信息 */ buf[ i ] = 0; printf( "UdiskInfo: %s\n", ((P_INQUIRY_DATA)buf) -> VendorIdStr ); } }
我就是用官方的程序,你說的這個也加上了,但是沒有成功讀出
我可以確定是 CH376DiskMount() 通過并返回成功了,因為我專門在執(zhí)行CH376DiskMount() 前吧s清零了,但是還是打不開文件? 奇怪的是 我用 57600 波特率的時候立即返回 02 用9600和 19200波特率的時候過了好一會返回 FA 頭文件 和PDF上給的 錯誤代碼里面并沒有FA
在去掉以下這段程序之后不管波特率設(shè)置的多少 打開文件 都會返回 03h
那么這種問題改如何解決,我已經(jīng)格式化U盤為FAT格式或者FAT32格式試過了
i = CH376ReadBlock( buf ); /* 如果需要,可以讀取數(shù)據(jù)CH376_CMD_DATA.DiskMountInq,返回長度 */ if ( i == sizeof( INQUIRY_DATA ) ) { /* U盤的廠商和產(chǎn)品信息 */ buf[ i ] = 0; printf( "UdiskInfo: %s\n", ((P_INQUIRY_DATA)buf) -> VendorIdStr ); } }
在同時去掉上面和以下程序后可以正常打開根目錄的文件 ,但是讀不出來里面的數(shù)據(jù)(前200個字符只顯示兩個0d 0a 0d 0a) 但是 此時可以在根目錄下 成功建立新的文件
打開多級目錄里面的數(shù)據(jù)時候會返回 43h if ( CH376GetDiskStatus( ) < DEF_DISK_MOUNTED ) { /* 未知USB設(shè)備,例如USB鍵盤、打印機等 */ printf( "Unknown device\n" ); goto UnknownUsbDevice; } 經(jīng)過我的實驗,在波特率設(shè)置不對的時候會返回FA 在頭文件里看到 磁盤初始化不成功的 代碼是02h 打開文件的代碼是 43h 磁盤已經(jīng)初始化成功,但是尚未分析文件系統(tǒng)或者文件系統(tǒng)不支持 的代碼是 03d
但是沒找到 fah的
這些情況都是怎么回事 ?現(xiàn)在搞得我一塌糊涂,希望能指點迷津
還有一句 我的ch376 是ch376T
我用的是 單片機用異步串口的方式來和 ch376 通訊
還有一句 我的ch376 是ch376T
希望早點有人回復(fù)啊 謝謝
0xFA 不是CH376返回給你的,是程序中返回,程序中只有兩個地方可以返回0xFA,一個是串口接收數(shù)據(jù)超時,還有一個是等待中斷超時, 你這種好像是查詢中斷的函數(shù)有問題,參考下面的程序修改一下
/* 查詢CH376中斷(INT#低電平) */ UINT8 Query376Interrupt( void ) { #ifdef CH376_INT_WIRE if(RI==1) //串口接收標(biāo)志,串口接收到數(shù)據(jù) RI=0; //清串口標(biāo)志 return( CH376_INT_WIRE ? FALSE : TRUE ); /* 如果連接了CH376的中斷引腳則直接查詢中斷引腳 */ #else if ( RI ) ////串口接收標(biāo)志,串口接收到數(shù)據(jù) { RI = 0; //清串口標(biāo)志 return( TRUE ); } else return( FALSE ); #endif }
嗯修改后前面的問題解決了 i = CH376ReadBlock( buf ); 這個函數(shù)返回的i是 14h ( 應(yīng)該是1D) strcpy( buf, "\\C51\\CH376HFT.C" ); s = CH376FileOpenPath( buf ); 這個函數(shù)返回的s是1D (應(yīng)該是 14)
這又是為什么啊 ------------------
按這樣修改后可以打開 但是打開后 s = CH376ByteRead( buf, i, &RealCount ); 這個函數(shù)沒有掃描到中斷,返回的是FA 如果屏蔽掉檢測錯誤的程序,buf里面的數(shù)據(jù)會打印到電腦上,而且是被打開文件里讀出來的 (但是檢查U盤連接和磁盤初始化甚至打開文件 的時候都是可以正常等待到中斷的) 此時buf里面顯示的數(shù)據(jù)是打開文件里面讀出來的,但是個數(shù)不對 比如你要 200個,他只能讀出來28個 你要12個,他讀出來40個 你要14個,他讀出來42個 你要15個,他讀出來43個
這是怎么回事啊
1.前面的問題有沒有解決? 2. CH376ByteRead()函數(shù)是自己寫的? 還是使用網(wǎng)站上提供的程序。 3. 有沒有測試過字節(jié)寫方式。
前面的問題都解決了,現(xiàn)在就是11樓的問題(讀的方式是復(fù)制 host.c里面的)
CH376ByteRead() 和 CH376ByteWrite() 函數(shù)都是網(wǎng)站上提供的
新建一個文件可以寫進(jìn)去,已有的文件追加也可以成功,不過最后一行寫的是“今天的ADC數(shù)據(jù)到此結(jié)束”存到U盤上變成了“今天的ADC示蕕醬私崾?”
那說明你寫數(shù)據(jù)的時候?qū)戝e了,你先監(jiān)視一下你寫進(jìn)去的數(shù)據(jù)長度和數(shù)據(jù)緩沖區(qū)的內(nèi)容是否正確。
建議你不要使用strcpy這個函數(shù)來復(fù)制數(shù)據(jù),在KEIL下使用這個函數(shù)是會出現(xiàn)錯誤的,你可以直接往你的緩沖區(qū)里面寫數(shù)據(jù),然后看下寫的數(shù)據(jù)是否正確。