關于Ch32F103 USB全速設備控制器(USBD)端口的問題

在使用usbd模擬xbox的過程中,使用大于等于4的endpoint會出現(xiàn)一些問題。我把問題簡化成測試用例了,使用的是wch官方例程中的CH32F103EVT\EVT\EXAM\USB\USBD這個例程

測試1:

? 直接使用例程,完全沒問題ch372Succ.JPG可以看到,setup過程正確的建立了。這個設備一共有0~4,5個端點。

但是在void USBD_Reset(void)這個函數(shù)中,只初始化了0~3這4個端點,4號endpoint沒有初始化。在setup過程中也沒用到它


測試2:

?修改USBD_Reset(void)函數(shù),增加對endpoint 5的初始化,

? SetEPType(ENDP5, EP_INTERRUPT);

? SetEPRxAddr(ENDP5, ENDP5_RXADDR);

? SetEPRxCount(ENDP5, USBD_DATA_SIZE);

? SetEPTxAddr(ENDP5, ENDP5_TXADDR);

? SetEPTxCount(ENDP5, USBD_DATA_SIZE);

? SetEPRxStatus(ENDP5, EP_RX_NAK);

? SetEPTxStatus(ENDP5, EP_TX_NAK);

//? SetEPRxStatus(ENDP4, EP_RX_DIS);

//? SetEPTxStatus(ENDP4, EP_TX_DIS);

//? SetEPRxStatus(ENDP4, EP_RX_VALID);

//? SetEPTxStatus(ENDP4, EP_RX_VALID);

? _ClearDTOG_RX(ENDP5);

? _ClearDTOG_TX(ENDP5);

結果如下:

reset.JPG端點0 reset了

如果設置成這個樣子:

? SetEPType(ENDP5, EP_INTERRUPT);

? SetEPRxAddr(ENDP5, ENDP5_RXADDR);

? SetEPRxCount(ENDP5, USBD_DATA_SIZE);

? SetEPTxAddr(ENDP5, ENDP5_TXADDR);

? SetEPTxCount(ENDP5, USBD_DATA_SIZE);

//? SetEPRxStatus(ENDP5, EP_RX_NAK);

//? SetEPTxStatus(ENDP5, EP_TX_NAK);

//? SetEPRxStatus(ENDP4, EP_RX_DIS);

//? SetEPTxStatus(ENDP4, EP_TX_DIS);

? SetEPRxStatus(ENDP4, EP_RX_VALID);

? SetEPTxStatus(ENDP4, EP_RX_VALID);

? _ClearDTOG_RX(ENDP5);

? _ClearDTOG_TX(ENDP5);

stall.JPG

發(fā)現(xiàn)endpoint 0 stall了

想問的就是:設置endpoint 5為什么會影響到endpoint 0的setup過程? 這個設備也完全用不到endpoint 5


測試3:

把例子的設備描述符和配置描述符改成xbox的,xbox會用到端點4,5. 在USBD_Reset(void)這個函數(shù)中我沒有初始化endpoint 4,5.但是卻發(fā)現(xiàn)endpoing 5會發(fā)數(shù)據(jù)給pc端。導致pc端不斷的發(fā)送Clear_feature重啟,這是怎么回事呢?

xBox_endp5SendData.JPG

測試4

如果我初始化了endpoing 5,就會出現(xiàn)前面例子的stall的情況

現(xiàn)在感覺是端點號>=4的都有點問題

對USB全速主機設備控制器( USBHD )我也測試了,這個沒問題。usbD有問題


這些測試用例,我是在官方的基礎上改的,只改了描述符和USBD_Reset中的初始化代碼



地址的設置:

/* EP1? */

/* tx buffer base address */

#define ENDP1_TXADDR? ? ? ? (0xC0)

#define ENDP2_TXADDR? ? ? ? (0x100)

#define ENDP2_RXADDR? ? ? ? (0x110)

#define ENDP3_RXADDR? ? ? ? (0x111)

#define ENDP4_RXADDR? ? ? ? (0x140) /////////

#define ENDP4_TXADDR? ? ? ? (0x180) /////////

#define ENDP5_RXADDR? ? ? ? (0x1C0) /////////

#define ENDP5_TXADDR? ? ? ? (0x200) /////////



您好,使用4個以上端點,需將EP_NUM改為15即可。

image.png

因雙向端點1-5的模擬CH372設備程序比較大,如果需要可以留一下郵箱,程序通過郵箱發(fā)您測試一下。


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

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