我現(xiàn)在使用CH376T,每次向SD寫數(shù)據(jù)大于512字節(jié)時(shí)都會(huì)丟失一組數(shù)據(jù),除第一次外可以說每512字節(jié)丟失一次。請問是怎么回事?
你在寫入512個(gè)字節(jié)的地方檢查一下請求寫入的字節(jié)數(shù)是否等于實(shí)際寫入的字節(jié)數(shù)。
新問題 :打開文件后,連續(xù)寫數(shù)據(jù)就會(huì)每512字節(jié)丟失一組數(shù)據(jù),如果每次打開文件只寫一組數(shù)據(jù),然后關(guān)閉文件,再打開再寫入再關(guān)閉,不丟失。
按照下面的流程操作 是不會(huì)有問題的 UINT8 CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ) /* 以字節(jié)為單位向當(dāng)前位置寫入數(shù)據(jù)塊 */ { UINT8 s; 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 ); /* 向內(nèi)部指定緩沖區(qū)寫入請求的數(shù)據(jù)塊,返回長度 */ xWriteCH376Cmd( CMD0H_BYTE_WR_GO ); xEndCH376Cmd( ); buf += s; if ( RealCount ) *RealCount += s; } else return( s ); /* 錯(cuò)誤 */ } }
就是調(diào)用的例程,每隔512字節(jié)丟失一組數(shù)據(jù)
我用檢查文件長度的方法,不可靠,文件長度有時(shí)讀不出來。
這應(yīng)該是程序上的問題,把程序貼出來看看。
while(1) { s = CH376FileOpen( "/HENGXI26.TXT" ); // 打開文件,該文件在根目錄下 delay_ms(1000); LCD_mdata_r(250,400,s); if ( s == USB_INT_SUCCESS ) { /* 文件存在并且已經(jīng)被打開,移動(dòng)文件指針到尾部以便添加數(shù)據(jù) */ s = CH376ByteLocate( 0xFFFFFFFF ); /* 移到文件的尾部 */ } else if ( s == ERR_MISS_FILE ) { // 沒有找到文件,必須新建文件 s = CH376FileCreate( "/HENGXI26.TXT" ); // 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 } delay_ms(1000); LCD_mdata_r(350,400,s); hengxing[0]=0x30+index0/100;hengxing[1]=0x30+index0/10%10;hengxing[2]=0x30+index0%10; hengxing[3]=0x30;hengxing[4]=0x30; hengxing[5]=0x30;hengxing[6]=0x30;hengxing[7]=0x30;hengxing[8]=0x30;hengxing[9]=' '; hengxing[10]=0xBA;hengxing[11]=0xE3;hengxing[12]=0xD0;hengxing[13]=0xCB;hengxing[14]=0xB5; hengxing[15]=0xE7;hengxing[16]=0xD7;hengxing[17]=0xD3; hengxing[19]=0x30;hengxing[20]=0x30;hengxing[21]=0x30;hengxing[22]=0x30; s = CH376ByteWrite( hengxing, 32, NULL ); /* 以字節(jié)為單位向文件寫入數(shù)據(jù) */ delay_ms(1000); s = CH376FileClose( TRUE ); delay_ms(1000); LCD_mdata_r(550,400,s); xEndCH376Cmd(); if(index0>100)break; // 關(guān)閉文件,自動(dòng)計(jì)算文件長度,以字節(jié)為單位寫文件,建議讓程序庫關(guān)閉文件以便自動(dòng)更新文件長度 }
PUINT16 RealCount 這個(gè)參數(shù)一直未使用,你們文件里也未對其進(jìn)行說明,猜測它應(yīng)該是實(shí)際寫字節(jié)數(shù)量,我準(zhǔn)備試一試。