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

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

3天内不再提示

USB的枚举过程

冬至子 来源:binnary 作者:binnary 2023-06-25 14:14 次阅读

每当一个USB外设接入主机后,系统会提示用户USB设备接入了,并不停的查找对应的驱动文件,如果找到驱动文件,则加载对应驱动;如果没有找到,则提示用户没有对应的驱动,需要用户主动去配置驱动。

那么主机是如何判断设备类型以及找到对应的设备驱动?在解决这问题之前,先来了解几个概念:

  • 设备描述符 :描述设备的通用信息,如厂商IDD、产品ID和修订ID,支持的设备类、设备子类、适用的协议以及默认端点的最大包大小等。
  • 配置描述符 :描述当前配置中的接口数、支持的挂起和恢复能力以及功率要求。单个物理的USB设备,可以包含一个或者多个配置,不同的配置描述表现出不同的设备功能。
  • 接口描述符 :接口类、子类和适用的协议,接口备用配置的数目和端点数目。USB协议根据功能将不同的接口划分成不同的类,如下:

1:音频类,2:CDC控制类,3:人机接口类(HID),5:物理类,6:图像类,7:打印机类,8:大数据存储类,9:集线器类,10:CDC数据类,11:智能卡类,13:安全类,220:诊断设备类,224:无线控制类,254:特定应用类,255厂商定义的设备。

  • 端点描述符 :描述端点地址、方向和类型、支持的最大包大小。主机只能通过端点和设备通信。主机通过USB地址+端点号来寻址,确定数据最终是发到那个端点。

0号端点是个特殊端点,通常称作控制端点,用户设备的初始化

我们来看一下下面这个图,描述了设备描述符、配置、接口以及端点个层次包含关系。

图片

USB各描述符层次关系

我们可以看到,最顶层的设备描述符包含一个USB设备的所有信息,也就是说可以通过设备描述符依次获取到整个USB设备的信息.

枚举的整个过程大概就是这样:

  1. 获取设备描述: 获取设备基本信息,并获取配置描述符。
  2. 获取配置信息: 根据配置描述获取到接口描述
  3. 获取接口描述: 根据接口描述,得到端点描述符
  4. 获取端点描述: 得到端点描述符

以上只是个基本过程,大体上要识别一个USB设备,这几步骤是必须的。

那么这几步骤具体是怎么完成的的?说到这就得说说SETUP过程,枚举过程中每次HOST和Device的交互,都是通过SETUP来完成的。下来详细说说这SETUP过程, 整个过程分为三个阶段:

1. CMD阶段(SETUP阶段)

数据方向:HOST->DEVICE单方向,这就是为什么USB所有的动作都必须是由HOST发起的原因

HOST发出的都是固定的8字节,每个字节代表不同含义。

每个字节含义解释

2. DATA阶段

数据方向双方向:HOST<->DEVICE。数据传输方向由CMD命令决定。

数据阶段是可有可无的,具体根据命令字的类型,比如:设置地址命令,是没有数据阶段,Device端接收命令成功,后设置地址,如果地址设置成功则返回ACK信号,失败则是NAK信号。

3. ACK阶段

数据双方向:HOST<->DEVICE。比如设置地址的命令,DEVICE端设置完成之后需要给HOST回复ACK/NAK信号.

4. SETUP实例

下图是USB协议分析仪解析出的获取描述符的过程(这里主要关注软件部分,图例中设置数字标号的部分):

  • 图中标号1: 命令阶段,主机发送获取描述符指令,请求获取设备描述符.
  • 图中标号2: 数据阶段(Device->Host),设备回送设备描述信息.
  • 图中标号3: 数据阶段(Device->Host),在USB1.1设备中,0号端点的BUFFER都比较小,单次不能把数据发送完成,需要多次
  • 图中标号4: ACK阶段(Host->Device),主机告诉设备数据正确接收完成

图片

获取设备描述符

HOST端主机软件就是通过以上SETUP过程,一步一步完成整个枚举过程。

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

    关注

    0

    文章

    22

    浏览量

    9346
  • 集线器
    +关注

    关注

    0

    文章

    387

    浏览量

    39479
  • ACK
    ACK
    +关注

    关注

    0

    文章

    28

    浏览量

    11144
  • 无线控制
    +关注

    关注

    0

    文章

    96

    浏览量

    19972
收藏 人收藏

    评论

    相关推荐

    STM32H750 FATFS文件系统挂载USB驱动,USB驱动枚举过程一直处于ready状态是为什么?

    就是FATFS文件系统挂载USB驱动,读写U盘,我一直不成功USB驱动枚举过程一直处于ready 状态,文件系统挂载不成功!请问大家有知道怎么解决的吗?或者类似案列参考一下!谢谢!
    发表于 03-27 06:52

    调试USB hots的时候,枚举过不去,为什么?

    调试USB hots的时候,枚举过不去,第一步的状态都不对。我看数据是中断函数USBH_OTG_ISR_Handler返回的,请问哪位有相关说明发一下,现在总是触发gintsts.b.sofintr中断。谢谢!
    发表于 04-10 07:28

    国产化USB转串口芯片GP232RL 转串口线 完美兼容替换FT232RL

    时,USB主机会检测到设备的插入并进行复位。2.‌枚举过程‌:计算机通过USB枚举过程获取设备的描述符信息,包括厂商ID、设备ID和Class类别等。3.‌驱动匹配‌:操作系统根据获取
    发表于 09-10 16:20

    USB枚举过程是怎样的?

    USB枚举过程是怎样的?谁能描述下?谢谢
    发表于 11-21 15:34

    调试USB例程,USB枚举失败后导致不能下载程序

    Virtual_Com_Port_Reset(void)的内容注释掉。下载成功,断电重启后,电脑报告未能识别的USB设备,我想大概这个函数的内容影响到了USB枚举过程。所以,重新恢复void
    发表于 05-05 10:26

    USB描述符详解

    对于实现USB功能的项目,不管是实现CDC,大容量存储、HID等都必须使用实现USB标准描述符,从而实现USB枚举过程。这里共享一个USB
    发表于 06-12 14:46

    求问关于ThreadX系统中开发的USB枚举问题

    利用ds5+dstream将这个工程代码烧录到指定的目标板中,全程运行后再将目标板的USB端口连接到Linux主机上,USB枚举过程时而成功,时而失败,以下是将USB端口接到Linux
    发表于 11-06 10:45

    请问STM32F103的USB功能否由软件开启或关闭?

    USB枚举过程,如果此时设备还没有准备好回应,就会枚举失败!其它的一些具有USB功能单片机都可以由寄存器配置决定是否接入D+线上内置的上拉电阻, 不知STM32F103是否有类似的功
    发表于 11-06 08:46

    USB枚举失败

    我使用的芯片是STM32F105,Full-speed模式,ST官网的USB-OTG的库,现在枚举过程总是失败,电脑设备管理器已经可以显示USB人体输入设备,但是显示错误码:(10)设备无法启动
    发表于 05-10 06:23

    FX3 USB 3控制器不被重新枚举和断开连接

    来在FX3 RAM中上传固件。转会工作完美无瑕。例如,如果我们用闪烁的LED编写一个固件,默认的引导加载程序,在程序跳转进入USB命令之后,LED闪烁。到目前为止,这是很好的,但是如果我们看USB枚举过程
    发表于 09-20 09:36

    ARM嵌入式裸机--USB的HOST枚举

    设备就要自动进入挂起状态,在进入挂起状态后,总的电流功耗不超过280uA。状态转移图如下所示:二、枚举过程1、用户将一个USB设备插入USB端口,主机为端口供电,设备此时处于上电状态。主机检测设备
    发表于 10-15 07:51

    USB 实验装置的研制与开发

    利用最新的嵌入式开发工具EDK,在FPGA中完成对PDIUSBD12的硬件定制和固件编程,从而在FPGA中实现USB 控制器, 并最终完成USB枚举过程、驱动程序的开发和简单的应用。
    发表于 05-18 13:24 12次下载

    daref101运行安装程序的用户指南

    、J8、J10和J11,安装和跳线J9上没有安装板。 2)连接你的麦克风输入的3.5mm音频插孔标记上板。 3)连接你的耳机或音箱的3.5mm音频插孔标记在董事会外。 4)连接从您的PC的USB端口的USB电缆J2板。这将电源应用于主板,并开始
    发表于 06-01 14:48 10次下载
    daref101运行安装程序的用户指南

    USB设备枚举过程的详细资料说明

    USB设备在正常工作以前,第一件要做的事就是枚举枚举就是让HOST认得这个设备,并且为该设备准备其所请求的资源,建立好主机和设 备之间的信息沟通机制 。
    发表于 05-09 08:00 3次下载
    <b class='flag-5'>USB</b>设备<b class='flag-5'>枚举过程</b>的详细资料说明

    CDC设备枚举过程解析

    本篇笔记将详述 CDC设备枚举过程,让大家对整体的枚举过程有个概念。
    的头像 发表于 10-09 11:43 2735次阅读
    CDC设备<b class='flag-5'>枚举过程</b>解析