大家好!
因STM32的USB端点只提供8个,除了端点0,只有7个供用户使,大多数情况下都是Bulk-IN和Bulk-OUT各占一个端点,但我的设备要用到4个Bulk-IN和4个Bulk-OUT,所以就有Bulk-IN和Bulk-OUT共用一个端点的情况,我现在分别用两个端点(1,2)对应Bulk-IN和Bulk-OUT传数据正常,但将Bulk-IN和Bulk-OUT合到端点1上,设备只能向主机传一次数据,以后主机再发数据我的设备连ACK都不回了,请高手指点一下,我一直没找到原因,谢谢!
#define BTABLE_ADDRESS (0x00)
/* EP0 */
/* rx/tx buffer base address */
#define ENDP0_RXADDR (0x40)
#define ENDP0_TXADDR (0x80)
#define ENDP1_TXADDR (0xC0)
#define ENDP1_RXADDR (0x100)
#define ENDP2_TXADDR (0x140)
SetBTABLE(BTABLE_ADDRESS);
/* Initialize Endpoint 0 */
SetEPType(ENDP0, EP_CONTROL);
SetEPTxStatus(ENDP0, EP_TX_NAK);
SetEPRxAddr(ENDP0, ENDP0_RXADDR);
SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
SetEPTxAddr(ENDP0, ENDP0_TXADDR);
Clear_Status_Out(ENDP0);
SetEPRxValid(ENDP0);
/* Initialize Endpoint 1 */
SetEPType(ENDP1, EP_BULK);
SetEPTxAddr(ENDP1, ENDP1_TXADDR);
SetEPTxStatus(ENDP1, EP_TX_NAK);
SetEPRxStatus(ENDP1, EP_RX_DIS);
/* Initialize Endpoint 1 */
SetEPType(ENDP1, EP_BULK);
SetEPRxAddr(ENDP1, ENDP1_RXADDR);
SetEPRxCount(ENDP1, Device_Property.MaxPacketSize);
SetEPRxStatus(ENDP1, EP_RX_VALID);
SetEPTxStatus(ENDP1, EP_TX_DIS);
SetEPType(ENDP2, EP_INTERRUPT);
SetEPTxAddr(ENDP2, ENDP2_TXADDR);
SetEPTxCount(ENDP2, 4);
SetEPRxStatus(ENDP2, EP_RX_DIS);
SetEPTxStatus(ENDP2, EP_TX_NAK);
中断正常,第二条命令62 00 00 00 00 00 02 00 00 设备连ACK都没有回,不知是哪里设置的不对,请高手指点.谢谢! |