"); //-->
虽然鱼鹰提供的资料已经把图解资料分享出来了(Osprey文件夹),但因为这个系列就是图解系列,所以还是把 CDC 枚举过程中涉及到的所有标准请求和描述符都展现一下好了。
在鱼鹰提供的例程资料中,标准请求通过一个结构体体现:
以下是CDC枚举过程涉及到的所有标准请求和对应的描述符:
获取设备描述符:
设置地址:
这次事务从机不需要回复或接收数据,所以没有数据阶段,只有状态阶段。
获取配置描述符:
这个描述符最长,如果只是单纯的获取配置描述符的话,其实没有多少,但实际上,主机大部分情况下会一次性要求返回包括:配置描述符、接口描述符、端点描述符等描述符。这样主机才能根据当前的配置描述符确定接口和端点信息。
因为接口和端点描述符依赖配置描述符的信息,所以从机需要把所有信息一次提供给主机,这样可以保证数据的完整性(否则可能在交互时该配置下的描述符和别的配置下描述符错乱,毕竟 USB 可是支持多种配置的)。
这里面比较难理解的是Union相关描述符,简单理解就是,因为CDC有两个接口,而主机一般会把每一个接口当做一种设备功能,所以为了让主机知道这里面的两个接口其实是一个设备功能,所以使用Union 等描述符来告诉主机两个接口属于同一个功能,可以使用一个驱动程序驱动。
字符串描述符,主机显示用:
获取语言ID
关于字符串,鱼鹰提供的例程并不能在【设备管理器】中正确显示,可能就是因为语言ID 返回 0x0409, 表示ASCII编码,但是实际上却是 Unicode 编码,这可能就是为什么设备可以正常使用,但字符串显示不对的原因了。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。