[求助]CH376读文件问题

我读问题时读来的长度不是超过我文件实质长度 更严重的是第一个字节读不出来?? 我的代码如下(文件长度为32 ),读出来的来为Len = 0x38

补充一下 实质内存为81CE1CB0EC2C8FD800658EA7AE714454 读出来为1CE1CB0EC2C8FD800658EA7AE7144544

if( CH376FileOpenPath( "/UPDATE.HTU" ) == USB_INT_SUCCESS ) { u8 *md5buf = mymalloc( 40 ); if( NULL != md5buf ) { UINT16 Len = 0; CH376ByteLocate( 0 ); if( USB_INT_SUCCESS == CH376ByteRead( md5buf, 32, &Len ) ) { debugPrintf( "Read UPDATE.HTU OK", sizeof( "Read UPDATE.HTU OK" ) ); CH376FileClose( FALSE ); if( Len == 32 ) { u8 i = 0; debugPrintf( "Read UPDATE.HTU len OK", sizeof( "Read UPDATE.HTU len OK" ) );

for(; i < 16; i++ ) { md5buf = ( AsciiToHex( md5buf[2 * i] ) << 4 ) | ( AsciiToHex( md5buf[2 * i + 1] ) ); debugPrintfHex2Ascii( md5buf, 16 ); } if( USB_INT_SUCCESS == CopyUpdateFile( "/UPDATE.BIN", md5buf ) ) { OSQPost( app_lcd_MsgQptr( ), (void*)( LCD_MSGQ_USB | LCD_USB_UPDATE_OK ) ); }else { OSQPost( app_lcd_MsgQptr( ), (void*)( LCD_MSGQ_USB | LCD_USB_UPDATE_FAIL ) ); } } } myfree( md5buf, 40 ); } }

读取第一个字节没读取上来看你读出来的数据应该是数据长度。看下你读函数有没有问题。


UINT8 CH376ByteRead( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ) /* 以字节为单位从当前位置读取数据块 */ { UINT8 s; xWriteCH376Cmd( CMD2H_BYTE_READ ); xWriteCH376Data( (UINT8)ReqCount ); xWriteCH376Data( (UINT8)(ReqCount>>8) ); if ( RealCount ) *RealCount = 0; while ( 1 ) { s = Wait376Interrupt( ); if ( s == USB_INT_DISK_READ ) { s = CH376ReadBlock( buf ); /* 从当前主机端点的接收缓冲区读取数据块,返回长度 */ xWriteCH376Cmd( CMD0H_BYTE_RD_GO ); buf += s; if ( RealCount ) *RealCount += s; } /* else if ( s == USB_INT_SUCCESS ) return( s );*/ /* 结束 */ else return( s ); /* 错误 */ } }


中断我是用查询方式有什么问题吗


这个函数肯定没问题,但是需要看下xWriteCH376Data以及xReadCH376Data函数底层的硬件接口部分。


void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376写命令 */ { u8 synb[] = {SER_SYNC_CODE1,SER_SYNC_CODE2}; if(USB_ResetRecLen()) {

USB_UartDataSend(USART3,synb,1);/* 启动操作的第1个串口同步码 */

USB_UartDataSend(USART3,&synb[1],1);/* 启动操作的第2个串口同步码 */ USB_UartDataSend(USART3,&mCmd,1);/* 串口输出 */ }

}

void xWriteCH376Data( UINT8 mData ) /* 向CH376写数据 */ { USB_UartDataSend(USART3,&mData,1);/* 串口输出 */ }

UINT8 xReadCH376Data( void ) /* 从CH376读数据 */ { UINT32 i; for ( i = 0; i < 10000000; i ++ ) { /* 计数防止超时 */ if ( USB_GetRecLen() ) { /* 串口接收到 */ return( USB_GetData() ); /* 串口输入 */ } //OSTimeDly(1); } return( 0 ); /* 不应该发生的情况 */ }


芯片是STM32101VB 36M


接中断接收回调 void USB_DataRecv( u8 data ) { g_UsbRecBuf = data; g_UsbRecLen = 1;

} u16 USB_GetRecLen( void ) { return g_UsbRecLen; } bool USB_ResetRecLen( void ) {

g_UsbRecLen = 0; g_UsbRecBuf = 0x0;

return TRUE; }

u8 USB_GetData( void ) {

g_UsbRecLen = 0; return g_UsbRecBuf;

}


你主要查下你串口接收数据这个函数好像有问题。


有什么问题啊。你是冲没来的记处理的的数据吗


你看下你的串口接收函数没有判断串口接收标志。只有判断到数据来了之后在读取数据才是有效的。


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