你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HID+CDC 复合设备在 WIN10 的识别问题

[复制链接]
zero99 发布时间:2018-3-27 11:57
1  问题现象
有一客户使用 STM32F405 参照 USB 标准库下的 HID+CDC 的示例代码做产品,发现在 WIN7 上使用得好好的,可放到WIN10 上,CDC 第一次能够识别,再次拔插后就不能再识别,且此后无论插拔多少次都无法再识别,除非再次上电,又会重复上述现象,只有板子上电后第一次才能正确被识别,后续均不行。

2  问题 分析
客户使用 ST 官方示例代码 STM32_USB-Host-Device_Lib_V2.2.0\Project\USB_Device_Examples\Composite_Examples\CDC_HID_Composite 。当我尝试使用此示例代码重现客户所遇到的问题时,发现此代码在 WIN7 运行 OK,但与客户不同的是,我测试到的情况是在 WIN10 下 CDC 一次都无法识
别,HID 却一直可以识别。
下面来分析下问题,既然 WIN7 下 HID 和 CDC 都能正常识别,放在 WIN10 上才不正常,那么初步可以判断,此问题应该与 WIN10 操作系统的 USB 主机驱动实现有关。通过 USB 分析仪分析客户代码在 WIN10 下 USB 枚举异常的数据通讯:
41.png

上图是客户代码第一次正常枚举的通讯数据,从中可以看出,WIN10 USB 主机在正常获取 HID 报告描述符后,紧接着会获取
虚拟串口状态和设置波特率,这样就正常枚举结束了。接着继续采集异常 USB 枚举过程进行对比:
42.png

上图是 WIN10 下异常枚举过程。由上图可以看出,WIN10 系统上 USB 主机在获取到设备描述符和配置描述符后直接将设备挂起了。很明显,WIN10 操作系统的 USB 主机驱动实现对设备描述符或者配置描述符的内容并不认可,才会导致无法识别HID+CDC 复合设备。
于是,我们首先检查客户代码的设备描述符:
43.png

复合设备的 class,subclass,protocol 必须为 0xef,0x02,0x01,这里 VID=0x0483,PID=0x3256(Cube 库下为 0x5740,但这个不重要),接下来看配置描述符:
44.png

由此可见,客户的描述符是 HID interface + IAD + CDC interfaces 结构。对于 WIN7,这种结构可以识别,但对于 WIN10,这种结构 WIN10 未必能够兼容,我们尝试在 HID interface 外部加上一层 IAD 结构,使其成为 IAD1 + HID interface + IAD2 +CDC interfaces 结构,此时客户的问题得以解决,在 WIN10 也可以正确识别了。

...

了解更多,请下载后阅读
下载地址1>>         下载地址2>>       更多实战经验>>


收藏 评论4 发布时间:2018-3-27 11:57

举报

4个回答
maxtch 回答时间:2018-3-28 01:07:53
这个问题我倒是早就发现了。参考我的 DAP42 源代码,现在是 CDC+HID,后面只要空间允许(不用 Cube 空出不少 Flash)还打算加入 MSC。
15616384352 回答时间:2018-3-28 19:14:01
maxtch 发表于 2018-3-28 01:07
这个问题我倒是早就发现了。参考我的 DAP42 源代码,现在是 CDC+HID,后面只要空间允许(不用 Cube 空出不 ...

大神,这么牛逼,能否方便参考下
lanmanck 回答时间:2019-1-8 15:14:59
15616384352 发表于 2018-3-28 19:14
大神,这么牛逼,能否方便参考下

我比他还早发现,算小神一个吧
zgr110064 回答时间:2019-1-10 10:40:23
看看

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版