【CH376S】使用WriteByte功能时,申请写入5K字节,为何最后只有2.5K正常写入?

如题~~~申请写入5K(准确的5K)字节,由于是用writebyte功能,所以按照:255个byte--255个byte--2个byte 这样的过程完成写入,最后WriteByteGo返回0x14表示整个过程完成的。

但是当我读回数据时,却发现只有前面的2.5K(准确的2.5K),后面都没了- -。。。

不明白什么原因……

再请论坛大神们出手搭救~~~先谢谢各位~~~

可能是写入不正常导致的,正常的操作时先发送CMD2H_BYTE_WRITE,然后发送请求写入的字节数,然后等待中断状态返回,如果返回USB_INT_DISK_WRITE,然后发送CMD01_WR_REQ_DATA,获取实际请求输入的字节数,然后才能写入数据,这样问题就来了,你是请求写入255个字节,但是实际可能当时缓冲区不允许你写入255个字节,所以问题可能出在这。


                                         

可能是写入不正常导致的,正常的操作时先发送CMD2H_BYTE_WRITE,然后发送请求写入的字节数,然后等待中断状态返回,如果返回USB_INT_DISK_WRITE,然后发送CMD01_WR_REQ_DATA,获取实际请求输入的字节数,然后才能写入数据,这样问题就来了,你是请求写入255个字节,但是实际可能当时缓冲区不允许你写入255个字节,所以问题可能出在这。

                                 

谢谢回复~~~

写入过程应该是正常的,我每次都按着他要求的字节数进行写入。

我发现我写2.5K或以下都是正确的,多一个字节都不行~~~

按字节写入时,字数要求有512字节要求,例如:

写入512字节:

0xFF--0xFF--0x02

写入1024字节:

0xFF--0xFF--0x02--0xFF--0xFF--0x02

写入1124字节:

0xFF--0xFF--0x02--0xFF--0xFF--0x02--0x64



理论上不会出现你说的那种情况,你可以试一下写入2.5K数据后,关闭文件同时更新文件长度,然后重新打开文件,移动文件指针到末尾,然后在写入2.5K数据,然后关闭文件更新长度,看看能不能写进去。


                                         

理论上不会出现你说的那种情况,你可以试一下写入2.5K数据后,关闭文件同时更新文件长度,然后重新打开文件,移动文件指针到末尾,然后在写入2.5K数据,然后关闭文件更新长度,看看能不能写进去。

                                 

嗯,好的~谢谢!


为什么单次最多写入255字节呀


您好字节写可以写入多字节。UINT8CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ) ,长度为uint16。您如果写入超过255就无法写入的话,看一下存放数据的缓冲区大小是否大于255,其次调用字节写函数的实参长度是否正确。最后您可以确认一下字节写函数的参数定义是否为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 );  /* ?í?ó */

}

}



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