如題~~~申請寫入5K(準確的5K)字節(jié),由于是用writebyte功能,所以按照:255個byte--255個byte--2個byte 這樣的過程完成寫入,最后WriteByteGo返回0x14表示整個過程完成的。
但是當我讀回數(shù)據(jù)時,卻發(fā)現(xiàn)只有前面的2.5K(準確的2.5K),后面都沒了- -。。。
不明白什么原因……
再請論壇大神們出手搭救~~~先謝謝各位~~~
如題~~~申請寫入5K(準確的5K)字節(jié),由于是用writebyte功能,所以按照:255個byte--255個byte--2個byte 這樣的過程完成寫入,最后WriteByteGo返回0x14表示整個過程完成的。
但是當我讀回數(shù)據(jù)時,卻發(fā)現(xiàn)只有前面的2.5K(準確的2.5K),后面都沒了- -。。。
不明白什么原因……
再請論壇大神們出手搭救~~~先謝謝各位~~~
可能是寫入不正常導致的,正常的操作時先發(fā)送CMD2H_BYTE_WRITE,然后發(fā)送請求寫入的字節(jié)數(shù),然后等待中斷狀態(tài)返回,如果返回USB_INT_DISK_WRITE,然后發(fā)送CMD01_WR_REQ_DATA,獲取實際請求輸入的字節(jié)數(shù),然后才能寫入數(shù)據(jù),這樣問題就來了,你是請求寫入255個字節(jié),但是實際可能當時緩沖區(qū)不允許你寫入255個字節(jié),所以問題可能出在這。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
可能是寫入不正常導致的,正常的操作時先發(fā)送CMD2H_BYTE_WRITE,然后發(fā)送請求寫入的字節(jié)數(shù),然后等待中斷狀態(tài)返回,如果返回USB_INT_DISK_WRITE,然后發(fā)送CMD01_WR_REQ_DATA,獲取實際請求輸入的字節(jié)數(shù),然后才能寫入數(shù)據(jù),這樣問題就來了,你是請求寫入255個字節(jié),但是實際可能當時緩沖區(qū)不允許你寫入255個字節(jié),所以問題可能出在這。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
謝謝回復~~~
寫入過程應該是正常的,我每次都按著他要求的字節(jié)數(shù)進行寫入。
我發(fā)現(xiàn)我寫2.5K或以下都是正確的,多一個字節(jié)都不行~~~
按字節(jié)寫入時,字數(shù)要求有512字節(jié)要求,例如:
寫入512字節(jié):
0xFF--0xFF--0x02
寫入1024字節(jié):
0xFF--0xFF--0x02--0xFF--0xFF--0x02
寫入1124字節(jié):
0xFF--0xFF--0x02--0xFF--0xFF--0x02--0x64
理論上不會出現(xiàn)你說的那種情況,你可以試一下寫入2.5K數(shù)據(jù)后,關閉文件同時更新文件長度,然后重新打開文件,移動文件指針到末尾,然后在寫入2.5K數(shù)據(jù),然后關閉文件更新長度,看看能不能寫進去。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
理論上不會出現(xiàn)你說的那種情況,你可以試一下寫入2.5K數(shù)據(jù)后,關閉文件同時更新文件長度,然后重新打開文件,移動文件指針到末尾,然后在寫入2.5K數(shù)據(jù),然后關閉文件更新長度,看看能不能寫進去。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
嗯,好的~謝謝!
為什么單次最多寫入255字節(jié)呀
您好字節(jié)寫可以寫入多字節(jié)。UINT8CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ) ,長度為uint16。您如果寫入超過255就無法寫入的話,看一下存放數(shù)據(jù)的緩沖區(qū)大小是否大于255,其次調用字節(jié)寫函數(shù)的實參長度是否正確。最后您可以確認一下字節(jié)寫函數(shù)的參數(shù)定義是否為uint16類型。這邊貼出部分代碼提供參考。
//此處為while(1)里面的部分代碼。
s = CreateFileAndTime( "/123.TXT", 1, MAKE_FILE_DATE( 2020, 6, 8 ), MAKE_FILE_TIME( 15, 39, 20 ), MAKE_FILE_DATE( 2020, 6, 8 ), MAKE_FILE_TIME( 15, 39, 20 ) );
printf("1\r\n");
mStopIfError( s );
printf("1\r\n");
s=CH376FileOpen("/123.TXT");
mStopIfError( s );
//s=DataToChar( 45678,? buf1 );
//
//s=sizeof(buf_long1);
s = CH376ByteWrite( buf_long1, 512, p );
s = CH376FileClose( TRUE );
Delay_Ms( 20 );
以下為驅動代碼。
UINT8CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount )? /* ??×??????????ò?±?°?????????????é */
{
UINT8s;
xWriteCH376Cmd( CMD2H_BYTE_WRITE );
xWriteCH376Data( (UINT8)ReqCount );
xWriteCH376Data( (UINT8)(ReqCount>>8) );
xEndCH376Cmd( );
if ( RealCount ) *RealCount = 0;
while ( 1 ) {
s = Wait376Interrupt( );
if ( s == USB_INT_DISK_WRITE ) {
s = CH376WriteReqBlock( buf );? /* ?ò???????¨?????????????ó???????é,·????¤?? */
xWriteCH376Cmd( CMD0H_BYTE_WR_GO );
xEndCH376Cmd( );
buf += s;
if ( RealCount ) *RealCount += s;
}
/*else if ( s == USB_INT_SUCCESS ) return( s );*/? /* ?á?? */
else return( s );? /* ?í?ó */
}
}