在HID_CompliantDev例程的基础上,增加了端点2,修改了USB相关描述符,也在响应的Case语句块中添加了对应的寄存器处理,下面是修改后的相关描述符
// 设备描述符
const uint8_t MyDevDescr[] = {0x12,0x01,0x00,0x02,0x00,0x00,0x00,DevEP0SIZE,0x3d,0x41,0x07,0x21,0x00,0x00,0x00,0x00,0x00,0x01};
// 配置描述符
const uint8_t MyCfgDescr[] = {
0x09,0x02,0x37,0x00,0x01,0x01,0x04,0xA0,0x23, //配置描述符
0x09,0x04,0x00,0x00,0x04,0x03,0x00,0x00,0x05, //接口描述符
0x09,0x21,0x00,0x01,0x00,0x01,0x22,0x22,0x00, //HID类描述符
0x07,0x05,0x81,0x03,0x40,0x00,0x01, //端点1描述符
0x07,0x05,0x01,0x03,0x40,0x00,0x01, //端点1描述符
0x07,0x05,0x82,0x03,0x40,0x00,0x01, //端点2描述符
0x07,0x05,0x02,0x03,0x40,0x00,0x01 //端点2描述符
};
在Windows下,使用libusb中断模式去读USB端点2,结果全是端点1的数据;Bus Bound抓包,发现都是主机都是自动查询端点1,使用Bus Commander可以发现有端点2 In / Out。但是执行端点2 IN有数据但非常卡响应很慢,有时很还不成功(目前猜测是端点1被Windows主机频繁查询,占用USB带宽,导致端点2效率低下)
在Ubuntu 22.04下,使用libusb读取端点1和2都正常,但是发现Linux环境下USB主机并没有按照bInterval值,去查询CH573F HID设备端点,也不影响,就是不知道什么原因!
疑问:
Windows下的问题,是不是相关描述符配置的有问题?增加了端点2 In / Out,HID类报表描述符是否需要修改?