我用之前官方的這個例程添加了一下端點4上傳的功能,通過bushound測試時可以看到端點4成功接收到數(shù)據(jù)并且返回。
但是我使用自己編寫的上位機進行測試的時候,通過bushound可以看到數(shù)據(jù)同樣可以返回,但是我的上位機卻提示端點通信超時,上位機使用libusb進行通信,我測試了一下,上位機的程序讀寫ch573官方的HID通信例程是可以接收到信息的,但是我修改的ch554卻不能與上位機通信成功。
libusb提示超時,但是看通信像是libusb還沒有開始接收,ch554就把數(shù)據(jù)傳輸上去了,導致上位機一直接收不到消息。
下面這個是當時官方原來的例程,只有端點4接收的功能
EXAM_鍵盤鼠標多媒體自定義HID_V200 - 副本.zip
下面是我添加的與上傳相關的程序
void?Enp4IntIn(UINT8?len?) { ????UEP4_T_LEN?=?len;??????????????????????????????????????????????//上傳數(shù)據(jù)長度 ????UEP4_CTRL?=?UEP4_CTRL?&?~?MASK_UEP_T_RES?|?UEP_T_RES_ACK;??????????????????//有數(shù)據(jù)時上傳數(shù)據(jù)并應答ACK } void?hid_send_data(unsigned?char?endp,?unsigned?char*?sendData,?unsigned?char?len)??//hid端點上傳數(shù)據(jù) { ????if(Ready) ????{ ????????switch(endp) ????????{ ????????????case?1:?// ????????????????Ep1FLAG?=?0; ????????????????memcpy(Ep1Buffer,?sendData,?len); ????????????????Enp1IntIn(len); ????????????????while(Ep1FLAG?==?0); ????????????????break; ????????????case?2:?// ????????????????Ep2FLAG?=?0; ????????????????memcpy(Ep2Buffer,?sendData,?len);??? ????????????????Enp2IntIn(len); ????????????????while(Ep2FLAG?==?0); ????????????????break; ????????????case?3:?// ????????????????Ep3FLAG?=?0; ????????????????memcpy(Ep3Buffer,?sendData,?len);??? ????????????????Enp3IntIn(len); ????????????????while(Ep3FLAG?==?0); ????????????????break; ????????????case?4:?// ????????????????Ep4FLAG?=?0; ????????????????memcpy(&Ep0Buffer[128],?sendData,?len);? ????????????????Enp4IntIn(len); ????????????????while(Ep4FLAG?==?0); ????????????????break; ????????????default: ????????????????break; ????????} ????????UEP4_CTRL?=?UEP4_CTRL?&?~?MASK_UEP_R_RES?|?UEP_R_RES_ACK;????????????//默認應答NAK?? ????} }
可以幫忙分析一下是什么地方的問題嗎,上位機應該是沒有問題,我用ch573中的HID通信的例程測試過,ch554和ch573這兩個usb中斷處理中有什么不同嗎,是不是因為ch554中沒有檢測空閑狀態(tài)