我用之前官方的这个例程添加了一下端点4上传的功能,通过bushound测试时可以看到端点4成功接收到数据并且返回。
但是我使用自己编写的上位机进行测试的时候,通过bushound可以看到数据同样可以返回,但是我的上位机却提示端点通信超时,上位机使用libusb进行通信,我测试了一下,上位机的程序读写ch573官方的HID通信例程是可以接收到信息的,但是我修改的ch554却不能与上位机通信成功。
libusb提示超时,但是看通信像是libusb还没有开始接收,ch554就把数据传输上去了,导致上位机一直接收不到消息。
下面这个是当时官方原来的例程,只有端点4接收的功能
EXAM_键盘鼠标多媒体自定义HID_V200 - 副本.zip
下面是我添加的与上传相关的程序
void?Enp4IntIn(UINT8?len?) { ????UEP4_T_LEN?=?len;??????????????????????????????????????????????//上传数据长度 ????UEP4_CTRL?=?UEP4_CTRL?&?~?MASK_UEP_T_RES?|?UEP_T_RES_ACK;??????????????????//有数据时上传数据并应答ACK } void?hid_send_data(unsigned?char?endp,?unsigned?char*?sendData,?unsigned?char?len)??//hid端点上传数据 { ????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中没有检测空闲状态