USB动态检测、枚举、配置

USB动态检测、枚举、配置


这边做一个小的总结:
首先是动态检测:
通过d+d-的上拉电阻导致的电压变化来判断检测设备是否连接。
枚举:

  1. 主机先发送一个请求
  2. 然后通过d+,d-来判断是全速还是低速
  3. 复位期间发送J或者K-state
  4. 复位后,发送一个状态,请求USB的地址是00h,多个USB的地址是相同的,因此需要轮流枚举
  5. 然后请求设备描述符,windows一般要去64个字节。
  6. 给usb分配新地址。
    配置:
  7. 用新地址获取设备描述符
  8. 加载驱动
  9. 进行特殊的设备配置

动态检测

  1. 设备被连接到USB端口上,并得到检测。此时,设备可从总线吸收100ma的电流,并处于被供电状态。
  2. 集线器通过监控端口的电压来检测设备,集线器的D+线和D-线上带有下拉电阻,如图17所示。如上所述,根据设备的速度,D+或D-线上会带有上拉电阻。通过监控这些线上的电压变换,集线器检测设备是否得到连接。

枚举

  1. 主机使用中断端点获得集线器状态(包括端口状态的变化),从而了解新连接的设备。主机从集线器获得设备检测情况后,它会向集线器发送一个请求,以便询问在 GET_PORT_STATUS 请求有效时所发生状态变化的详细信息。
  2. 主机收集该信息后,它通过“USB 速度”一节中所介绍的方法来检测设备的速度。最初,通过确定上拉电阻位于 D+线还是 D-线,集线器可以检测设备速度是全速还是低速。通过另一个 GET_PORT_STATUS 请求,该信息被报告给主机。
  3. 主机向集线器发送 SET_PORT_FEATURE 请求,要求它复位新连接的设备。通过将 D+和 D-线下拉至 GND(0 V),使设备进入复位状态。这些线处于低电平状态的时间长达 2.5 us,因此发生复位条件。集线器在 10 ms 内维持复位状态。
  4. 复位期间发生一系列 J-State 和 K-State,这样是为了确定设备是否支持高速传输。如果设备支持高速,它会发出一个单一的 K-State。高速集线器检测该 K-State 并用 J 和 K 顺序(组成“KJKJKJ”格式)来回应。设备检测到该格式后,它会移除 D+线上的上拉电阻。低速设备和全速设备则会忽略这一步。
  5. 通过发送 GET_PORT_STATUS 请求,主机检查设备是否仍处于复位状态。如果设备仍处于复位状态,则主机会继续发送请求,直到它得知设备退出复位状态为止。设备退出复位状态后,它便进入默认状态,如 USB 电源一节所述。现在,设备可以回应主机的请求,具体是对其默认地址 00h 进行控制传输。所有 USB 设备的起始地址均等于该默认地址。每次只能有一个 USB 设备使用该地址。因此,同时将多个 USB 设备连接到同一个端口时,它们会轮流进行枚举,而不是同时枚举。
  6. 主机开始了解有关设备的更多信息。首先,它要知道默认管道(端点 0)的最大数据包大小。主机先向设备发送 GET_DESCRIPTOR 请求。设备发给主机相应应用笔记 USB 描述符一节所介绍的描述符。在设备描述符中,第八个字节(bMaxPacketSize0)包含了有关 EP0 最大数据包尺寸的信息。Windows 主机要求 64 字节,但仅在收到 8 字节设备描述符后它才转换到控制传输的状态阶段,并要求集线器复位设备。USB 规范要求,如果设备的默认地址为00h,当它得到请求时,设备至少要返回 8 字节设备描述符。要求 64 字节是为了防止设备发生不确定行为。此外,仅在收到 8 字节后才进行复位的操作是早期 USB 设备遗留的特性。在早期 USB 设备中,当发送第二个请求来询问设备描述符时,某些设备没有正确回应。为了解决该问题,在第一个设备描述符请求后需要进行一次复位。被传输的 8 字节包含 bMaxPacketSize0 的足够信息。
  7. 主机通过 SET_ADDRESS 请求为设备分配地址。在使用新分配地址前,设备使用默认地址 00h 完成所请求的状态阶段。在该阶段后进行的所有通信均会使用新地址。如果断开与设备的连接、端口被复位或者 PC 重启,该地址可能被更改。现在,设备处于地址状态。

配置

  1. 设备退出复位状态后,主机会发送 GET_DESCRIPTOR 命令,以便使用新分配地址读取设备的描述符。不过,此次所有描述符均被读取。主机通过该信息了解设备及其性能。该信息包含外设接口数量、电源连接方法以及所需要的最大电源。主机先请求设备描述符,而这一次它将收到全部描述符,而不仅是描述符的一部分。然后,主机将发送另一个 GET_DESCRIPTOR 命令,以便询问配置描述符。该请求的结果不仅是配置描述符,并且还包含了与配置描述符相关联的所有描述符,如接口描述符和端点描述符。Windows PC 首先只询问配置描述符(9 个字节),然后它会发送第二个 GET_DESCRIPTOR 请求,询问配置描述符以及与配置描述符相关联的所有描述符(如接口和端点描述符)。
  2. 为了让主机 PC(此情况是 Windows PC)成功使用设备,主机必须加载设备驱动程序。主机会搜索一个用于管理它与设备通信的驱动程序。Windows 使用它的.inf 文件寻找与设备产品 ID 和供应商 ID 匹配的驱动程序。也可以选择性寻找与设备发布版本号匹配的程序。如果 Windows 未能找到匹配的驱动程序,它会寻找与设备的类别、子类以及协议相匹配的程序。如果设备先前已经进行了枚举,Windows 会使用设备所注册的信息来寻找合适的驱动程序。确定好驱动程序后,主机可能请求设备的特定描述符或者请求设备重新发送描述符。
  3. 收到所有描述符后,主机使用 SET_CONFIGURATION 请求进行特殊的设备配置。大部分设备只有唯一一种配置。对于支持多项配置的设备,用户或驱动程序可选择合适的配置。
  4. 此时设备将处于配置状态。它将按照描述符所定义的性能进行操作。所定义的最大电源是从 VBUS 吸取的,现在就可以在应用中使用设备。
  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值