CH374T + CP2102通訊問題,求大蝦幫忙看看

使用STM32操作CH374T控制CP2102時(shí),在讀取CP2102數(shù)據(jù)時(shí)當(dāng)?shù)簟? CP2102能夠正常枚舉出來,但在CP2102_Res_Data獲取接受長度時(shí)會(huì)死在里面 u8 CP2102_Res_Data(u8 *p ) { u8 result = 0; u8 count; result = WaitHostTransact374(mDiskBulkInEndp,DEF_USB_PID_IN,mSaveDevEndpTog,20); //1000); if(result!=USB_INT_SUCCESS) { return result; } else { count = CDeviceCH374t_SPIBus_ReadByte(REG_USB_LENGTH); CDeviceCH374t_SPIBus_ReadBuffer(RAM_HOST_RECV, count , p); mSaveDevEndpTog = mSaveDevEndpTog? FALSE : TRUE;; } return result; }

void CDeviceCH374t_USBDeviceUse() { u8 s; u8 buf[250]; if (Query374DeviceIn()) { if(uid == 0x10C4 || pid == 0xEA60) { s=CP2102_Start_stop(0x0001); if(s != USB_INT_SUCCESS) { usbStatus = USB_FREE; return; } s = CP2102_Uart_Bound(19200); if(s!=USB_INT_SUCCESS) { usbStatus = USB_FREE; return; } s=CP2102_Uart_Bit(0x0810); if(s!=USB_INT_SUCCESS) { usbStatus = USB_FREE; return; } CP2102_Res_Data(buf); s = CP2102_Start_stop(0x0000); if(s != USB_INT_SUCCESS) { usbStatus = USB_FREE; return; }

} } else { HostSetBusFree( ); // USB總線空閑 usbStatus = USB_FREE; }

}

枚舉的過程是不是一定正確?如果都正確的話,說明374T和CP2102通信沒有問題,接下來你得注意CP2102的用法了,比如您發(fā)的端點(diǎn)號(hào)對不對,發(fā)IN令牌的時(shí)間間隔


枚舉過程是OK的,能正確的識(shí)別到CP2102,端點(diǎn)號(hào)是通過配置描述符獲取的 void CP2102_Get_PortAndEndpoint(u8 *buf) { u8 i; mDiskInterfNumber = ( (PUSB_CFG_DESCR_LONG)buf ) -> itf_descr.bInterfaceNumber; /* ??? */ mDiskBulkInEndp = 0; mDiskBulkOutEndp = 0; for ( i = 0; i < 2; i ++ ) { if ( ( (PUSB_CFG_DESCR_LONG)buf ) -> endp_descr[ i ].wMaxPacketSize == 64 && ( (PUSB_CFG_DESCR_LONG)buf ) -> endp_descr[ i ].bmAttributes == 2 ) { if ( ( (PUSB_CFG_DESCR_LONG)buf ) -> endp_descr[ i ].bEndpointAddress & 0x80 ) { mDiskBulkInEndp = ( (PUSB_CFG_DESCR_LONG)buf ) -> endp_descr[ i ].bEndpointAddress & 0x0F; /* IN?? */ } else { mDiskBulkOutEndp = ( (PUSB_CFG_DESCR_LONG)buf ) -> endp_descr[ i ].bEndpointAddress & 0x0F; /* OUT?? */ } } } } 我是第一次用CH374T,不太了解IC寄存器設(shè)定,我Debug了result = WaitHostTransact374(mDiskBulkInEndp,DEF_USB_PID_IN,mSaveDevEndpTog,20),result在第一次收取的時(shí)候是0x14,第二次收取的時(shí)候變?yōu)?x2A,這說明什么?


0x2a表示設(shè)備正在忙,超時(shí)參數(shù)可以調(diào)大點(diǎn),你前面的枚舉過程通過了,說明通信沒有問題了,我不太了解CP2101,接下來就是您按CP2101的手冊來操作它了


謝謝,確認(rèn)了一下,當(dāng)CP2102有串口輸入時(shí),會(huì)有輸出,此時(shí)CH374T狀態(tài)會(huì)變?yōu)?x14. 而CP2102沒有輸入時(shí),此時(shí)做讀取操作會(huì)返回0x2A.


返回0X2A表示設(shè)備忙,也就是USB那部分返回NAK。表示串口沒有數(shù)據(jù)。和你描述的現(xiàn)象是完全一致的。


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

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