0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

科普一下什么是USB的描述符

单片机匠人 来源:单片机匠人 作者: 黄忠老师 2021-12-02 14:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

USB只是一个总线,只提供一个数据通路而已。USB总线驱动程序并不知道一个设备具体如何操作,有哪些行为。具体的一个设备实现什么功能,要由设备自己来决定。那么,USB主机是如何知道一个设备的功能以及行为呢?这就要通过描述符来实现了。那么什么是USB的描述符呢?其实就是一些传递的协议信息,比如设备的类型、厂商ID、产品ID、端点情况、版本号等信息。

既然描述符是协议信息,那么不同的版本也会有所不同,比如USB1.1协议定义的标准描述符有设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符、类特殊描述符以及厂商自定义的描述符。那么USB2.0协议中又增加了两个新的标准描述符有设备限定符描述符和其他速度配置描述符。随着USB协议版本的提升,大家知道都是为了提升速度和可靠度,让用户有更快更高效的体验。那么USB1.1是全速设备,现在我们一起看下USB1.1协议定义的描述符吧。

一个USB设备只有一个设备描述符。设备描述符里决定了该设备有多少种配置,每种配置都有一个配置描述符;而在每个配置描述符中又决定了该配置里有多少个接口,每个接口都有一个接口描述符;在接口描述符里又定义了该接口有多少个端点,每个端点都有一个端点描述符;端点描述符定义了端点的大小、类型等。

如果有类特殊描述符,它跟在相应的接口描述符之后。由此可以看出,USB的描述符之间的关系是一层一层的,最上一层是设备描述符,接下来是配置描述符,再下来是接口描述符,最下面是端点描述符。在主机获取描述符时,首先获取设备描述符,接着再获取配置描述符,然后根据配置描述符中的配置集合的总长度,一次将配置描述符、接口描述符、类特殊描述符(如果有)、端点描述符一次读回。对于字符串描述符,是单独获取的。主机通过发送获取字符串描述符的请求以及描述符的索引号、语言ID来获取对应的字符串描述符。

l 设备描述符主要记录的信息有:设备所使用的USB协议版本号、设备类型、端点0的最大包大小、厂商ID(VID)和产品ID(PID)、设备版本号、厂商字符串索引、产品字符串索引、设备序列号索引、可能的配置数等。

l 配置描述符主要记录的信息有:配置所包含的接口数、配置的编号、供电方式、是否支持远程唤醒、电流需求量等。

l 接口描述符主要记录的信息有:接口的编号、接口的端点数、接口所使用的类、子类、协议等。

l 端点描述符主要记录的信息有:端点号及方向、端点的传输类型、最大包长度、查寻时间间隔等。

l 字符串描述符主要是提供一些方便人们阅读的信息,它不是必需的。

说了半天,也许你还没搞清楚到底设备、配置、接口、端点等这些是什么东西。不要急,这些东西的确是有点晕人。特别是刚接触时,这么多的内容很容易让人搞混,或者似乎是懂了,然后再想想,似乎又没懂……这些所说的设备,就是一个实实在在的USB设备,例如一个USB鼠标。设备有一个设备地址,USB主机依靠这个设备地址来访问设备。而在设备内部还会分的更细。

它会分出一些端点出来,例如端点0、端点1等。就是说,如果USB主机要和USB设备通信,光有设备地址是不够的,还需要一个端点地址。有了设备地址和端点地址,就能准确地对端点发送和读取数据了。好比你要去找8号教学楼的605教室,8号楼就是设备地址,而605教室就是端点地址。而配置和接口,是为了更方便地管理端点而抽象出来的概念。一个设备可以有多个配置,但是同一时刻只能有一个配置有效。每个配置下又可以有多个接口。当我们需要不同的功能时,只要选择不同的配置即可。

拿刚才的教学楼来说,我们可以把它分成两个配置:平时上课用和考试用。考试用时,全部的教室都拿来作考场(即该配置下只有一个接口,接口下有很多端点---教室);而平时上课用时,分成两类(即该配置下有两个接口,每个接口下有一些端点---教室):教师休息室和上课的课室。教师休息室和课室是不能共用的(这在USB中也是如此,同一个端点号不能出现在同一个配置下的两个或者更多个不同的接口中)。但是平时用来做课室或者休息室的教室,考试时都可以拿来作考场(这在USB中也是如此,同一个端点号可用在不同的配置中)。

具有多个接口并由接口来实现功能的设备把它叫做USB复合设备,例如一个USB音频设备,它具有一个音频控制接口,另外还可能具有一到多个音频流或MIDI流接口。在主机端会把USB复合设备的每个接口当作一个功能设备来看待。像常见的USB鼠标、U盘等,通常是单一的设备,即一个设备下只有一个配置描述符、一个接口描述符。

总结一下:由端点构成一个接口(或者反过来说,接口是端点的集合),由接口又构成一个配置(反过来说,配置是接口的集合),再由配置构成一个设备(设备是配置的集合)。学习USB,一定要把这些关系理清楚了,才能按照需要构造出一个合格的USB设备。如果一个设备的各种描述符成功返回了,那么可以说已经成功了大半。相反,只要描述符出现一点问题,哪怕只是一个bit的错误,都可能造成设备无法识别或者无法正常工作。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    60

    文章

    8372

    浏览量

    281626
  • 通信
    +关注

    关注

    18

    文章

    6314

    浏览量

    139541
  • MIDI
    +关注

    关注

    0

    文章

    78

    浏览量

    16703

原文标题:什么是USB的描述符?

文章出处:【微信号:gh_e7f294a514ca,微信公众号:单片机匠人】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    飞凌嵌入式ElfBoard-文件I/O的了解探究之复制文件描述符

    。在Linux系统,可以使用dup或dup2这两个系统调用对文件描述符进行复制。1.dup用于并可以多次复制文件描述符,复制得到的文件描述符与原文件
    发表于 11-26 15:36

    飞凌嵌入式ElfBoard-文件I/O的了解探究之文件描述符和FILE指针转换

    在同个文件上执行I/O操作时,系统I/O与标准I/O可以混合使用,借助于库函数 fdopen、fileno可以将文件描述符和FILE指针对象之间进行转换。1.3.3.1 fileno用于将传入
    发表于 11-20 09:24

    stm32103VB tinyusb 使用异常,无法识别:设备描述符请求失败怎么解决?

    设备描述符的指令,在附近查找相关指令回复 展开回复: 看到设备也是有回复的 但是这个设备就是无法识别! 后面多抓取些数据,发现,只是第次有回应,后面的多次发送都没有回应 好像确实是没有回应
    发表于 10-14 08:00

    STM32F7使用USB获取设备描述符失败怎么解决?

    (设备描述符请求失败)”: 配置界面: 用的是2019.12.17克隆下来的RTT源码。程序能正常执行,LED在闪,就是USB无法识别 如果主函数中执行了“MX_USB_OTG_FS_PCD_Init()”函数的话,插
    发表于 09-29 06:40

    STM32H7 ETH rx描述符不可用是怎么回事?

    加入文件系统(挂载在qspi+w25q)后以太网上机会有段时间ping异常后续正常,去掉这个文件系统以太网就上电正常了 手册上说eth的dma是独立的,但是看dma寄存器得知rx描述符无效,期间尝试关闭cache,情况是不变的 下图是正常的dma数据 大佬若有空,麻
    发表于 09-11 07:59

    如何使用 GDMA 描述符模式吗?

    如何使用 GDMA 描述符模式吗?
    发表于 08-29 06:00

    如何确定 M483 HSUSB 描述符

    我们使用M843SIDAE对于USB 2.0设备,时钟和寄存器等的初始化是正确的,但是在与主机通信时,发生了错误: “ USB 1-6:设备描述符读取/64,错误 -71 USB 1
    发表于 08-28 06:46

    STM32H747的USB无法连接到电脑,电脑提示“未知USB设备,(设备描述符请求失败)”,怎么解决?

    USB部分电路抄的 arduino GIGA RI WiFi。通过BOOT0拉高强制进入DFU 和 正常上电链接都不行,电脑显示致。“未知USB设备,(设备描述符请求失败)”通过SW
    发表于 07-11 08:24

    STM32G0b1 USB device cdc显示设备描述符请求失败的原因?怎么解决?

    自己加,加上后还是设备描述符请求失败。 那我就又怀疑,MCU的USB不带阻抗匹配的功能(同个接口CH340可以被识别到),DP、DN长度分别是1029mil和1025mil,10mil线宽,没有接其他阻容元件。想咨询
    发表于 07-10 06:16

    ART-PI H750-USB-MSC设备描述符异常的原因?怎么解决?

    3.2 主机发送请求设备描述符的IN事务阶段 3.3 接口重写 想咨询 是否应该根据文档《USB进阶培训_Part1_USB类的介绍》来查看回调函数Datain接收后对
    发表于 06-19 06:52

    cx3提示未知的描述符是怎么回事?

    我通过配置生成个新的工程 运行起来总是提示 未知的描述符
    发表于 06-04 07:08

    通过 FX3 以 5200*3900 分辨率、15fps 的速度从我的 fpga 传输视频数据流,但无法设置最小/最大比特率描述符值,怎么解决?

    我正试图通过 FX3 以 5200*3900 分辨率、15fps 的速度从我的 fpga 传输视频数据流,但无法设置最小/最大比特率描述符值,因为描述符大小只有 32 位。 描述符的预期值应该是
    发表于 05-23 06:35

    将CY7C68013A连接到基板管理控制器 (BMC),读取设备描述符时发生FX2超时错误怎么解决?

    : 使用 ehci-platform 的新高速 USB 设备编号 4 [391.934969] usb 1-1:设备描述符读取/8,错误-110 [397.134834] usb 1-
    发表于 05-14 07:36

    使用官方评估板STM32H563ZI进行USB虚拟串口开发,下载后电脑提示USB设备无法识别,设备描述符请求失败怎么解决?

    使用官方评估板STM32H563ZI进行USB虚拟串口开发,找到官方例程:Ux_Device_HID_CDC_ACM,屏蔽掉HID相关的配置和初始化代码,下载后电脑提示USB设备无法识别,设备描述符请求失败!求指教!!!
    发表于 03-11 08:06

    USB组合设备的配置描述符定要用IAD描述符吗?

    USB组合设备的配置描述符定要用IAD描述符
    发表于 03-11 06:41