来源:公众号【鱼鹰谈单片机】
作者:鱼鹰Osprey
ID :emOsprey
虽然鱼鹰提供的资料已经把图解资料分享出来了(Osprey文件夹),但因为这个系列就是图解系列,所以还是把 CDC 枚举过程中涉及到的所有标准请求和描述符都展现一下好了。在鱼鹰提供的例程资料中,标准请求通过一个结构体体现:

以下是CDC枚举过程涉及到的所有标准请求和对应的描述符:
获取设备描述符:
设置地址:这次事务从机不需要回复或接收数据,所以没有数据阶段,只有状态阶段。
获取配置描述符:这个描述符最长,如果只是单纯的获取配置描述符的话,其实没有多少,但实际上,主机大部分情况下会一次性要求返回包括
:配置描述符、接口描述符、端点描述符等描述符。这样主机才能根据当前的配置描述符确定接口和端点信息。因为接口和端点描述符依赖配置描述符的信息,所以从机需要把所有信息一次提供给主机,这样可以保证数据的完整性(否则可能在交互时该配置下的描述符和别的配置下描述符错乱,毕竟 USB 可是支持多种配置的)。这里面比较难理解的是Union相关描述符,简单理解就是,因为CDC有两个接口,而主机一般会把每一个接口当做一种设备功能,所以为了让主机知道这里面的两个接口其实是一个设备功能,所以使用Union 等描述符来告诉主机两个接口属于同一个功能,可以使用一个驱动程序驱动。



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

获取语言ID





关于字符串,鱼鹰提供的例程并不能在【设备管理器】中正确显示,可能就是因为语言ID 返回 0x0409, 表示ASCII编码,但是实际上却是 Unicode 编码,这可能就是为什么设备可以正常使用,但字符串显示不对的原因了。
推荐阅读:
-THE END-
如果对你有帮助,记得转发分享哦
微信公众号「鱼鹰谈单片机」
每周一更单片机知识

长按后前往图中包含的公众号关注
鱼鹰,一个被嵌入式耽误的畅销书作家
个人微信「EmbeddedOsprey」

长按后打开对方的名片关注