USB2.0集线器HUB
+ -

USB 集线器状态信息上报

2026-04-23 本文链接为:http://www.usbzh.com/article/detail-1631.html ,欢迎转载,转载请附上本文链接。

USB集线器上报三类信息给主机驱动:

信息类型 通信协议 USB管道 发起方 典型场景/指令
状态信息 (静态) 标准设备请求 默认控制管道 (Endpoint 0) 主机 主动查询检测 GetStatus (获取设备当前是否自供电)
硬件改变信息 中断传输 状态改变端点 (中断IN管道) 设备 主动上报 设备插入/拔出事件、端口过流
控制信息 (状态改变) 标准设备请求 默认控制管道 (Endpoint 0) 主机 根据获取的信息发送指令 SetFeature (复位端口)、ClearFeature

上报信息的方式有2种,分别为控制端点和中断端点。

200557304989

上报信息的路由

USB集线器通过中断方式上报信息,中断上报包括了HUB的变化和端口的变化。根据不同的变化执行不同的控制请求,分别为

中断端点数据位图
├─ Bit 0 = 1 → Hub 状态变化
│  └─► GetHubStatus
│     ├─ [LOCAL_POWER] → ClearFeature
│     └─ [OVER_CURRENT] → ClearFeature + IoInvalidateDeviceRelations + ESD恢复
│
└─ Bit N = 1 → Port N 变化
   └─► GetPortStatus
      ├─ [CONNECT] → ClearFeature + IoInvalidateDeviceRelations ◄── 触发PnP枚举
      ├─ [RESET] → ClearFeature
      ├─ [ENABLE] → ClearFeature
      ├─ [SUSPEND] → ClearFeature
      └─ [OVER_CURRENT] → ClearFeature

中断端点

USB 集线器端口状态处理方法的,用于描述系统软件如何处理来自 USB 集线器的端口状态变化(如设备插拔、复位、过流等)。
USB中断端点返回的是USB集线器和USB集线器下游端口的状态变化。

  • BIT0:Hub change detected
  • BIT1:Port 1 change detected
  • BIT2:Port 2 change detected
  • BITN:Port N change detected

USB 集线器端口状态处理方法

  1. 开始
    系统软件请求中断管道(Interrupt Pipe)通知状态变化信息。

  2. Hub NAKs 状态变化 IN 令牌
    如果当前没有状态变化数据,Hub 会回复 NAK
    → 判断是否有变化数据可用:

    • No:回到开始继续请求
    • Yes:继续
  3. 中断管道返回 Hub 和端口状态变化位图
    变化位图告知系统:Hub 本身或哪些端口的状态发生了变化。

  4. 中断管道通知被清除
    一次通知完成。

  5. 系统软件读取 Hub 或端口状态(针对受影响的端口)
    通过标准 Hub 类请求读取具体状态。

  6. 判断是否有任何状态改变

    • Yes
      • 累计变化信息
      • 系统软件清除对应的变化状态(写入清除命令)
    • No:直接跳到处理累计的变化信息
  7. 系统软件处理累计的变化信息
    根据变化类型执行相应动作(如枚举新设备、处理断开、过流保护等)。

  8. 重新初始化中断管道(为状态变化端点)
    为下一次中断通知做好准备。

  9. 回到开始
    循环监测后续状态变化。

  • 中断管道用于 Hub 向主机异步通知状态变化。
  • NAK 机制避免无效查询,提高效率。
  • 读取后必须清除变化状态,否则不会产生新通知。
  • 这是一个轮询 + 异步通知结合的模型,主机主动发起 IN 事务,Hub 在有数据时响应。

GetStatus

GetStatus是USB集线器在枚举时,通过控制请求获取USB集线状态信息。详见:https://www.usbzh.com/article/detail-1163.html

GetPortStatus

通过中断只知道USB集线器或者端口发生了变化,可以通过GetPortStatus获取具体的变化。详见https://www.usbzh.com/article/detail-1162.html

本文链接为:http://www.usbzh.com/article/detail-1631.html ,欢迎转载,转载请附上本文链接。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936     USB技术交流3:1031974172

0 篇笔记 写笔记

Windows驱动中USB获取端口状态
Windows驱动中USB获取端口状态NTSTATUS HumGetPortStatus(IN PDEVICE_OBJECT DeviceObject, IN PULONG PortStatus){ NTSTATUS ntStatus; PIRP irp; KEVENT ......
USBIP 获取端口状态IOCTL_USBIP_VHCI_GET_PORTS_STATUS
IOCTL_USBIP_VHCI_GET_PORTS_STATUS用于返回各个端口的状态。 case IOCTL_USBIP_VHCI_GET_PORTS_STATUS: if (*poutlen == sizeof(ioctl_usbip_vhci_get_ports_st......
Windows-USB集线器HUB端口状态PortStatus
USB集线器驱动定义了几种状态用于标识下游端口及连接设备的状态信息。//// Hub and Port status defined below also apply to StatusChnage bits//#define HUB_STATUS_LOCAL_POWER 0x01......
USB 集线器端口状态处理方法
USB 集线器端口状态处理方法的,用于描述系统软件如何处理来自 USB 集线器的端口状态变化(如设备插拔、复位、过流等)。流程分析开始系统软件请求中断管道(Interrupt Pipe)通知状态变化信息。Hub NAKs 状态变化 IN 令牌如果当前没有状态变化数据,Hub 会回复 NAK。→......
USB 集线器状态信息上报
USB集线器上报三类信息给主机驱动:信息类型通信协议USB管道发起方典型场景/指令状态信息 (静态)标准设备请求默认控制管道 (Endpoint 0)主机 主动查询检测GetStatus (获取设备当前是否自供电)硬件改变信息中断传输状态改变端点 (中断I......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • USB资源
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!