新闻  |   论坛  |   博客  |   在线研讨会
【图解USB】USB 之CDC 设备枚举过程详解(2)
鱼鹰谈单片机 | 2021-01-24 11:54:45    阅读:345   发布文章

虽然鱼鹰提供的资料已经把图解资料分享出来了(Osprey文件夹),但因为这个系列就是图解系列,所以还是把 CDC 枚举过程中涉及到的所有标准请求和描述符都展现一下好了。

在鱼鹰提供的例程资料中,标准请求通过一个结构体体现:

12.png

以下是CDC枚举过程涉及到的所有标准请求和对应的描述符:

获取设备描述符:

11.png

设置地址:

这次事务从机不需要回复或接收数据,所以没有数据阶段,只有状态阶段。

10.png

获取配置描述符:

这个描述符最长,如果只是单纯的获取配置描述符的话,其实没有多少,但实际上,主机大部分情况下会一次性要求返回包括:配置描述符、接口描述符、端点描述符等描述符。这样主机才能根据当前的配置描述符确定接口和端点信息。

因为接口和端点描述符依赖配置描述符的信息,所以从机需要把所有信息一次提供给主机,这样可以保证数据的完整性(否则可能在交互时该配置下的描述符和别的配置下描述符错乱,毕竟 USB 可是支持多种配置的)。

这里面比较难理解的是Union相关描述符,简单理解就是,因为CDC有两个接口,而主机一般会把每一个接口当做一种设备功能,所以为了让主机知道这里面的两个接口其实是一个设备功能,所以使用Union 等描述符来告诉主机两个接口属于同一个功能,可以使用一个驱动程序驱动。

9.png8.png7.png

字符串描述符,主机显示用:

6.png

获取语言ID

5.png4.png3.png2.png1.png

关于字符串,鱼鹰提供的例程并不能在【设备管理器】中正确显示,可能就是因为语言ID 返回 0x0409, 表示ASCII编码,但是实际上却是 Unicode 编码,这可能就是为什么设备可以正常使用,但字符串显示不对的原因了。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客