CH573F HID_CompliantDev例程,增加端点2 In / Out,使用libusb,在Windows下异常,Linux下正常

在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类报表描述符是否需要修改?

您好。“Bus Bound抓包,发现都是主机都是自动查询端点1”,正常,BUS HOUND只会显示完成正常通信的USB包。

使用Bus Commander可以发现有端点2 In / Out。但是执行端点2  IN有数据但非常卡响应很慢”,这个要检查是不是上位机产生IN事务的间隔本身就不稳定,确实有可能是上位机/处理器的性能不够,来不及轮询端点2。

Linux环境下USB主机并没有按照bInterval值,去查询CH573F HID设备端点,也不影响”,从机代码里没有做“USB主机是否严格按照端点描述符中的间隔来发起IN事务”这样的判断,那么确实是不影响走USB上传报表的功能的,但是会影响上报率。比如说有些要求8K上报率的鼠标,在部分电脑上只能达到6K的上报率,确实是电脑本身有限制,但不会影响鼠标功能。

Windows下的问题,是不是相关描述符配置的有问题”常见用到多个端点上传报表的情况:在多个接口组合的设备中,可以用到多个端点来上传报表,比如说键鼠组合设备,分别走不同接口下的不同端点,分别上传键盘/鼠标报表;当然,走同一个端点,通过reportID来区分不同的功能也是可以实现的。

增加了端点2 In / Out,HID类报表描述符是否需要修改

只是单独加了一路端点2,但上传的是完全相同的报表,那么在我看来没必要,可能window驱动也摸不着头脑。


只有登录才能回复,可以选择微信账号登录