从3.01 版本cunstom hid例子修改成bulk传输,pc驱动用libusb-win32,将ADC数据通过USB上传到PC,能正常枚举,装驱动,但是PC在发送BULK IN 后,设备端无反应。 以下为USB部分设置: SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxCount(ENDP1, 64); //2*3*8 SetEPTxStatus(ENDP1, EP_TX_VALID); //设置端点发送有效 //SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); //设置端点接收关闭
SetEPType(ENDP2, EP_BULK); //设置端点2传输模式批量传输 SetEPRxAddr(ENDP2, ENDP2_RXADDR); SetEPRxCount(ENDP2, 64); SetEPRxStatus(ENDP2, EP_RX_VALID); SetEPTxStatus(ENDP2, EP_TX_DIS); //端点关闭发送
void EP1_IN_Callback(void) { static uint16_t i=0; if(Ready2Transfer) { GPIO_WriteBit(GPIO_LED, GPIO_LED2_PIN, Bit_SET); UserToPMABufferCopy(Send_Buffer+i*64, GetEPTxAddr(ENDP1), 64); SetEPTxValid(ENDP1); //发送数据 i++; if(i==4) { i=0; Ready2Transfer = 0; //May also need ZLP here! depend on the pc driver } } //delay(); } #define EP_NUM (2) /*-------------------------------------------------------------*/ /* -------------- Buffer Description Table -----------------*/ /*-------------------------------------------------------------*/ /* buffer table base address */ /* buffer table base address */ #define BTABLE_ADDRESS (0x00) //描述表在分组缓冲区中的位置 /* EP0 */ /* rx/tx buffer base address */ #define ENDP0_RXADDR (0x18) //0x00~0x17被描述表给占用,0x18~0x1ff作为真正端点数据缓冲区 #define ENDP0_TXADDR (0x58) /* EP1 */ /* tx buffer base address */ #define ENDP1_TXADDR (0x100) #define ENDP2_RXADDR (0x180) //#define EP1_IN_Callback NOP_Process
|