【STM32H7】第5章 ThreadX USBX各种USB描述符简介-程序员宅基地

技术标签: 自动驾驶  ThreadX USBX  物联网  

教程更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=108546

第5章   ThreadX USBX各种USB描述符简介

本章节为大家讲解USB的各种描述符。

目录

5.1   初学者重要提示

5.2   USB描述符概述(USB Descriptors)

5.3   USB设备描述符(Device Descriptor)

5.4   USB配置描述符(Configuration Descriptor)

5.5   USB接口描述符(Interface Descriptor)

5.6   USB端点描述符(Endpoint Descriptor)

5.7   USB字符串描述符(String Descriptor)

5.8   USB设备限定符描述符(Qualifier Descriptor)

5.9   总结


5.1   初学者重要提示

1、  USB1.1和USB2.0规格书以及Cypress做的中文版USB文档,非常推荐大家学习:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=100698

2、  USB初学 -- 入门篇 (USB基础知识速览)

http://www.armbbs.cn/forum.php?mod=viewthread&tid=100687

3、  文献参考:

https://en.wikipedia.org/wiki/USB

https://zh.wikipedia.org/wiki/USB

https://en.wikipedia.org/wiki/USB_hardware

5.2   USB描述符概述(USB Descriptors)

USB设备使用描述符报告其属性,描述符是具有定义格式的数据结构。每个描述符都以一个字节宽的字段开始,该字段包含描述符中字节的总数,然后是一个标识描述符类型的字段。

将USB设备连接到USB总线时,主机通过总线枚举来识别和配置设备。设备加入USB网络后,USB主机立即发送设置请求。将指示该设备选择配置和接口,以匹配USB主机上运行的应用程序需求。选择配置和接口后,设备必须为活动的端点提供服务,以此与USB主机交换数据。

常用的描述符主要有:

  •   设备描述符(Device Descriptor)
  •   配置描述符(Configuration Descriptor)
  •   接口描述符(Interface Descriptor)
  •   一个或多个端点描述符(Endpoint Descriptor)

 

  •   字符串描述符(String Descriptor)

字符串描述符是另一种可选的描述符,它为用户提供了有关设备的可读信息。

  •   设备限定符描述符(Device Qualifier Descriptor)

它提供了支持高速性能的设备信息,该信息会根据设备的不同运行速度而不同。

  •   复杂设备具有多个接口。每个接口可以有多个端点。例如,IP语音电话可能具有:

A.  一个音频类接口,带有2个同步端点,用于在每个方向上传输音频数据。

B.  一个HID接口,带有一个用于内置键盘的IN中断端点。

RL-USB支持用户在必要时可以选择覆盖USB描述符。当需要在运行时更改设备类或需要创建其他报告时,可能就是这种情况。

5.3   USB设备描述符(Device Descriptor)

设备描述符为主机提供了许多信息,如设备需要满足的USB规范、设备配置编号、设备支持的协议、供应商标识(idVendor又称为VID,每个公司只能从USB-IF获得唯一的VID)、产品标识(idProduct又称为PID,与数据包ID不同)和一个序列号(如果设备有)。 设备描述符包含了 USB 设备的重要信息。

 

5.4   USB配置描述符(Configuration Descriptor)

该配置描述符包含有关设备的功率需求,它可以支持的接口数量。一个设备可以具有多种配置,主机可以选择最符合应用软件要求的配置。

 

5.5   USB接口描述符(Interface Descriptor)

接口描述符(USB_INTERFACE_DESCRIPTOR)定义的端点的集合。该接口支持适用于特定任务的一组管道。每个配置可以具有多个接口。USB主机可以动态选择接口。

接口描述符永远不会在端点编号中包含端点0。如果接口仅使用端点0,则必须将字段bNumEndpoints设置为零。如果没有为设备选择任何类别,则不会加载任何标准USB驱动程序,并且开发人员必须提供自己的设备驱动程序。

 

例如,需要两个具有不同接口的设备。

第一个接口Interface0的bInterfaceNumber字段设置为0。

下一个接口Interface1的bInterfaceNumber字段设置为1,

bAlternativeSetting字段也设置为0(默认)。通过将字段bInterfaceNumber设置为1并将字段bAlternativeSetting设置为1而不是0 ,可以为此设备定义替代设置。使用bAlternativeSettings等于0的前两个接口描述符。但是,主机可以发送SetInterface()请求以启用替代设置。

 

5.6   USB端点描述符(Endpoint Descriptor)

端点描述符(USB_ENDPOINT_DESCRIPTOR)为每个端点指定传输类型,方向,轮询间隔,以及最大分组大小。端点0(默认端点)始终被假定为控制端点,并且从不包含描述符。

 

 

5.7   USB字符串描述符(String Descriptor)

字符串描述符(USB_STRING_DESCRIPTOR)是可选的,并将可读信息添加到其他描述符中。如果设备不支持字符串描述符,则必须将设备,配置和接口描述符中对字符串描述符的所有引用都设置为零。

字符串描述符以Unicode编码,因此单个产品可以支持多种语言。请求字符串描述符时,请求者使用USB-IF定义的16位语言ID(LANGID)指定所需的语言(详情请参阅语言标识符(LANGID))。字符串索引零用于所有语言,并返回一个字符串描述符,该描述符包含设备支持的两字节LANGID代码的数组。

LANGID代码的数组不是以NULL结尾的。数组的大小(以字节为单位)是通过描述符的第一个字节的值减去2而得出的。

 

UNICODE字符串描述符不是以NULL结尾的。字符串长度是通过从描述符的第一个字节的值中减去2来计算的。

 

5.8   USB设备限定符描述符(Qualifier Descriptor)

具有全速和高速设备信息不同的高速设备必须具有设备限定符描述符(USB_DEVICE_QUALIFIER_DESCRIPTOR)。例如,如果设备当前以全速运行,则设备限定符将返回有关如何以高速运行的信息,反之亦然。不包括供应商,产品,设备,制造商和序列号的字段。无论支持的速度如何,此信息对于设备而言都是恒定的。

如果全速设备接收GetDescriptor()请求device_qualifier,它必须回应错误请求。然后,主机不得请求other_speed_configuration描述符。

 

5.9   总结

本章就为大家介绍这么多,后面的应用设计中,描述符用到的地方很多,需要大家熟练掌握。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Simon223/article/details/120864824

智能推荐

ASP.NET MVC 模式-程序员宅基地

文章浏览阅读307次。ASP.NET MVC 是一个全新的Web应用框架ASP.NET 代表支撑应用框架的技术平台,表明ASP.NET MVC和传统的WebForm应用框架一样,都是建立在ASP.NET平台之上。MVC 表示该框架背后的设计思想,意味着ASP.NET MVC采用了MVC架构模式。MVC在20世纪70年代后期出现,产生于Xerox PARC施乐公司的帕洛阿尔托研究中心的Small..._aspnet mvvm

MacOS M1搭建Selenium环境_m1 mac selenium配置-程序员宅基地

文章浏览阅读350次。解压压缩包后,打开终端,进入当前chromedriver所在的路径,将chromedriver移动到默认路径(/usr/local/bin/)二、下载对应版本的浏览器驱动器:找到版本一致或最接近的版本的驱动器。若列表中含有selenium则表明安装成功。记得勾选上继承全局包,要不然会报错。_m1 mac selenium配置

UE4 OpenCV 插件 官方配置流程_ue4 opencv操作texture-程序员宅基地

文章浏览阅读4.6k次。谨以此片献给各种遇到坑的朋友。官网上的OpenCV 插件,根据github 上的描述 是针对UE4 4.16 版本以下的版本来提供的 OpenCV 采用的是3.0.0 , 也可以使用openCv 3.2.0环境描述:Ue4 4.15 OpenCV 3.2.0固有插件配置步骤:1, 创建一个C++ 的工程,打开后, 关闭即可。2,将OpenCV 的插件文件 解压缩之后, 将里面的文件..._ue4 opencv操作texture

使用Anaconda安装opencv-python-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏11次。直接在cmd命令行输入:conda install --channel https://conda.anaconda.org/menpo opencv3 接着根据提示按Y即可

nyoj-236-心急的C小加_nyoj 心急的c小加-程序员宅基地

文章浏览阅读646次。#include#includestruct mubang{int x;int y;}a[5005];int cmp(const void *a,const void *b){struct mubang *c=(struct mubang *)a;struct mubang *d=(struct mubang *)b;if(c->x!=d->x)re_nyoj 心急的c小加

JavaEE基础知识讲解-程序员宅基地

文章浏览阅读1.7k次。学习JavaEE的你们是不是一头雾水呢? C/S client/server 客户端/服务器 B/C browser/server 浏览器/服务器 通过浏览器访问到对应页面,发送请求(同步请求,异步请求,ajax请求,会读接口文档)---服务器(云服务器:腾讯云服务器 阿里云服务器等等)---应用服务器Tomcat---匹配servlet---service业务处理---dao层 JDBC Hibemate,ORM---数据库---File---servlet(控制器Controller)MVC_javaee基础知识

随便推点

深度学习简介-程序员宅基地

文章浏览阅读910次,点赞28次,收藏19次。交互性检索是在检索用户不能构建良好的检索式(关键词)的情况下,通过与检索平台交流互动并不断修改检索式,从而获得较准确检索结果的过程。新闻推荐需要:获取用户请求,召回候选新闻,对候选新闻进行排序,最终给用户推出新闻。将用户持续浏览新闻的推荐过程看成一个决策过程,通过强化学习学习每一次推荐的最佳策略,提高用户的点击率。无人驾驶被认为是强化学习短期内能技术落地的一个应用方向,很多公司投入大量资源在无人驾驶上,其中百度的无人巴士“阿波龙”已经在北京、武汉等地展开试运营,自动无人驾驶的行车视野如下图所示。

前端开发工程师简历_前端简历-程序员宅基地

文章浏览阅读3.5w次,点赞102次,收藏685次。简历是什么找工作之前投递的个人信息和工作能力----不全面应该是:个人当前阶段的价值体现前者:我能卖多少钱;后者:我现在值多少钱建议:每隔半年/一年给自己做总结的时候写一份简历(相当于个人价值总结)面试要刻意、精心准备公司内部晋升答辩,需要精心准备(ppt、演讲基本要精心准备一个月的时间)面试,简历,同样需要精心准备目录面试官如何分析一份简历简历模板和内容个人信息教育经历专业技能工作经历项目经历体现自己的亮点课程总结注意:不要造假学历造假:学信网可查工作经历造假:可_前端简历

CentOS 通过yum安装gcc 4.8, 4.9, 5.2等高版本GCC_有gcc高版本的yum库-程序员宅基地

文章浏览阅读2.6k次。https://www.dwhd.org/20160724_085212.html_有gcc高版本的yum库

SpringBoot自动配置原理分析_springboot 自动配置分析与整合测试-程序员宅基地

文章浏览阅读320次。1起步依赖原理分析 1.1分析spring-boot-starter-parent 按住Ctrl点击pom.xml中的spring-boot-starter-parent,跳转到了spring-boot-starter-parent的pom.xml,xml配置如下(只摘抄了部分重点配置):<parent> <groupId>org.sp..._springboot 自动配置分析与整合测试

python2.7 Crypto 使用pip的安装方式 【橘小白】_python2.7 使用pycrypto-程序员宅基地

文章浏览阅读9.1k次。最近想要使用Crypto.Cipher 的AES模块,可总是找不到Crypto.Cipher接下来介绍几个坑1.AES是在pyCrypto中而不是crypto中2.这个pyCrypto中间的C一定要大写,不然也不能用接下来介绍正确的安装姿势1.首先需要现在一款编译器Microsoft Visual C++ Compiler for Python 2.7下载地址https://www.m..._python2.7 使用pycrypto

整数划分问题(递归&非递归)_n的划分种数,其中划分大于等于2非递归算法-程序员宅基地

文章浏览阅读2.9k次,点赞4次,收藏7次。递归算法:将正整数n表示成一系列正整数之和,n=n1+n2+...+nk,其中n1>=n2>=n3>=...>=nk>=1,k>=1。正整数n的这种表示称为正整数n的划分。正整数n的不同的划分个数城外正整数n的划分数,记作p(n)。例如,正整数6有如下11种不同的划分,所以p(6)=11。6;5+1;4+2;4+1+1;3+3;3+2+1;3+1+1+1;2+2+2_n的划分种数,其中划分大于等于2非递归算法

推荐文章

热门文章

相关标签