从CH32F103操作CH340代码移植到CH32V103C8T6,目前可以接受到CH340上传的数据,但是数据发送不过去,程序标志是显示发送成功。
/*发送数据长度*/ UINT8 TXDUsbCH341BulkOut( PUINT8 pBuf,UINT8 len ) // 341批量发送 { UINT8 TxCnt,s,endp = ThisUsbDev.GpVar[1]; printf("CH341 Out data: \r\n"); while ( len ) { Delay_Us( 200 ); R8_UH_TX_LEN = len >= 32 ? 32 : len; for ( TxCnt = 0; TxCnt != R8_UH_TX_LEN; TxCnt ++ ) { TxBuffer[ TxCnt ] = *pBuf; printf("x%02X ",TxBuffer[ TxCnt ]); pBuf ++; } s = USBHostTransact( USB_PID_OUT << 4 | (endp & 0x7F), endp & 0x80 ? RB_UH_R_TOG | RB_UH_T_TOG : 0, 0 ); // OUT数据 if ( s == ERR_SUCCESS ){ len -= R8_UH_TX_LEN; endp ^= 0x80; // 同步标志翻转 ThisUsbDev.GpVar[1] = endp; // 保存同步标志位 } else { return( s ); printf("\r\n"); } } printf("\r\n"); return ERR_SUCCESS; } /*返回数据接收长度,数据存放RxBuffer*/ UINT8 RXDUsbCH341BulkIn( void ) // 341批量接收 { UINT8 i,s,len,endp = ThisUsbDev.GpVar[0]; // CH559传输事务,获取数据,NAK不重试 s = USBHostTransact( USB_PID_IN << 4 | (endp & 0x7F), endp & 0x80 ? RB_UH_R_TOG | RB_UH_T_TOG : 0, 0 ); if ( s == ERR_SUCCESS ) { endp ^= 0x80; // 同步标志翻转 ThisUsbDev.GpVar[0] = endp; // 保存同步标志位 len = R8_USB_RX_LEN; // 接收到的数据长度 if ( len ) { printf("CH341 In data: \r\n"); for ( i = 0; i < len; i ++ ) printf("x%02X ",(UINT16)(RxBuffer[i]) ); printf("\r\n"); } return len; } else if ( s != ( USB_PID_NAK | ERR_USB_TRANSFER ) ) printf("CH341 error %02x\r\n",(UINT16)s);// 可能是断开了 return 0; }
热门产品 :
CH397: 高集成度、低功耗USB网卡芯片