如题 用51单片机(W79E227)的异步串口方式(串口1)
如果 i值28,29,30,31的时候 能读出来28个字符,且不报错顺利通过 如果i值不为这几个数,则要么等待时间特别长(8s左右),要么返回FA超时 一般情况下,小于27的数等待时间特别长,但能读出来,大于32的数,返回FA超时,屏蔽掉报错程序mStopIfError( s );后,同样只可以读出来28个字节的数据
打开文件成功后 s = CH376ByteRead(buf, i, &RealCount ); mStopIfError( s );
另外写的时候 buf里面装的数超过30个的时候就会返回FA超时
新建文件成功后 strcpy( buf, "a1" ); s =CH376ByteWrite( buf, strlen( buf ), NULL ); mStopIfError( s ); 我用的异步串口的方式,改中断等待时间没用,该波特率也没用
可能是什么地方出了错?或者是说这个函数本来就是这样 CH376ByteWrite
CH376ByteRead 都是网站上下载的程序 UINT8 CH376ByteRead( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ) /* 以字节为单位从当前位置读取数据块 */ { UINT8 s; xWriteCH376Cmd( CMD2H_BYTE_READ ); xWriteCH376Data( (UINT8)ReqCount ); xWriteCH376Data( (UINT8)(ReqCount>>8) ); // xEndCH376Cmd( ); if ( RealCount ) *RealCount = 0; while ( 1 ) { s = Wait376Interrupt( ); if ( s == USB_INT_DISK_READ ) { // s = CH376ReadBlock( buf ); /* 从当前主机端点的接收缓冲区读取数据块,返回长度 */ if ( *(PUINT8)&buf ) s = CH376ReadBlockX( buf ); /* 外部RAM */ else s = CH376ReadBlockI( buf ); /* 内部RAM */ xWriteCH376Cmd( CMD0H_BYTE_RD_GO ); // xEndCH376Cmd( ); buf += s; if ( RealCount ) *RealCount += s; } /* else if ( s == USB_INT_SUCCESS ) return( s );*/ /* 结束 */ else return( s ); /* 错误 */ } }
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 ); /* 向内部指定缓冲区写入请求的数据块,返回长度 */ if ( *(PUINT8)&buf ) s = CH376WriteReqBlockX( buf ); /* 外部RAM */ else s = CH376WriteReqBlockI( buf ); /* 内部RAM */ xWriteCH376Cmd( CMD0H_BYTE_WR_GO ); // xEndCH376Cmd( ); buf += s; if ( RealCount ) *RealCount += s; } /* else if ( s == USB_INT_SUCCESS ) return( s );*/ /* 结束 */ else return( s ); /* 错误 */ } }
另外一个问题:命令里面有一个“继续枚举文件”,也就是枚举下一个文件,那要是想枚举上一个文件该怎么办