[求助]CH376讀文件問題

我讀問題時讀來的長度不是超過我文件實質(zhì)長度 更嚴(yán)重的是第一個字節(jié)讀不出來?? 我的代碼如下(文件長度為32 ),讀出來的來為Len = 0x38

補(bǔ)充一下 實質(zhì)內(nèi)存為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 ); } }

讀取第一個字節(jié)沒讀取上來看你讀出來的數(shù)據(jù)應(yīng)該是數(shù)據(jù)長度。看下你讀函數(shù)有沒有問題。


UINT8 CH376ByteRead( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ) /* 以字節(jié)為單位從當(dāng)前位置讀取數(shù)據(jù)塊 */ { 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 ); /* 從當(dāng)前主機(jī)端點的接收緩沖區(qū)讀取數(shù)據(jù)塊,返回長度 */ xWriteCH376Cmd( CMD0H_BYTE_RD_GO ); buf += s; if ( RealCount ) *RealCount += s; } /* else if ( s == USB_INT_SUCCESS ) return( s );*/ /* 結(jié)束 */ else return( s ); /* 錯誤 */ } }


中斷我是用查詢方式有什么問題嗎


這個函數(shù)肯定沒問題,但是需要看下xWriteCH376Data以及xReadCH376Data函數(shù)底層的硬件接口部分。


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寫數(shù)據(jù) */ { USB_UartDataSend(USART3,&mData,1);/* 串口輸出 */ }

UINT8 xReadCH376Data( void ) /* 從CH376讀數(shù)據(jù) */ { UINT32 i; for ( i = 0; i < 10000000; i ++ ) { /* 計數(shù)防止超時 */ if ( USB_GetRecLen() ) { /* 串口接收到 */ return( USB_GetData() ); /* 串口輸入 */ } //OSTimeDly(1); } return( 0 ); /* 不應(yīng)該發(fā)生的情況 */ }


芯片是STM32101VB 36M


接中斷接收回調(diào) 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;

}


你主要查下你串口接收數(shù)據(jù)這個函數(shù)好像有問題。


有什么問題啊。你是沖沒來的記處理的的數(shù)據(jù)嗎


你看下你的串口接收函數(shù)沒有判斷串口接收標(biāo)志。只有判斷到數(shù)據(jù)來了之后在讀取數(shù)據(jù)才是有效的。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频