CH376T写数据丢失

我现在使用CH376T,每次向SD写数据大于512字节时都会丢失一组数据,除第一次外可以说每512字节丢失一次。请问是怎么回事?

你在写入512个字节的地方检查一下请求写入的字节数是否等于实际写入的字节数。


新问题 :打开文件后,连续写数据就会每512字节丢失一组数据,如果每次打开文件只写一组数据,然后关闭文件,再打开再写入再关闭,不丢失。


按照下面的流程操作 是不会有问题的 UINT8 CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ) /* 以字节为单位向当前位置写入数据块 */ { 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 ); /* 向内部指定缓冲区写入请求的数据块,返回长度 */ xWriteCH376Cmd( CMD0H_BYTE_WR_GO ); xEndCH376Cmd( ); buf += s; if ( RealCount ) *RealCount += s; } else return( s ); /* 错误 */ } }


就是调用的例程,每隔512字节丢失一组数据


我用检查文件长度的方法,不可靠,文件长度有时读不出来。


这应该是程序上的问题,把程序贴出来看看。


while(1) { s = CH376FileOpen( "/HENGXI26.TXT" ); // 打开文件,该文件在根目录下 delay_ms(1000); LCD_mdata_r(250,400,s); if ( s == USB_INT_SUCCESS ) { /* 文件存在并且已经被打开,移动文件指针到尾部以便添加数据 */ s = CH376ByteLocate( 0xFFFFFFFF ); /* 移到文件的尾部 */ } else if ( s == ERR_MISS_FILE ) { // 没有找到文件,必须新建文件 s = CH376FileCreate( "/HENGXI26.TXT" ); // 新建文件并打开,如果文件已经存在则先删除后再新建 } 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 ); /* 以字节为单位向文件写入数据 */ delay_ms(1000); s = CH376FileClose( TRUE ); delay_ms(1000); LCD_mdata_r(550,400,s); xEndCH376Cmd(); if(index0>100)break; // 关闭文件,自动计算文件长度,以字节为单位写文件,建议让程序库关闭文件以便自动更新文件长度 }


PUINT16 RealCount 这个参数一直未使用,你们文件里也未对其进行说明,猜测它应该是实际写字节数量,我准备试一试。


只有登录才能回复,可以选择微信账号登录