【问题标题】:Detect when USB device was disconnected using usbd_core.c使用 usbd_core.c 检测 USB 设备何时断开连接
【发布时间】:2015-09-03 19:46:50
【问题描述】:

所以在嵌入式系统上工作时,我有一个 USB 驱动器,用于为设备充电以及读取一些数据。

使用usbd_core.c我可以查看状态,

  • 当没有任何连接时,状态为4 (USBD_STATE_SUSPENDED)。
  • 只要我连接某些东西,状态就会更改为1 (USBD_STATE_DEFAULT)。
  • 但是当我断开它时,状态并没有改变,它仍然是1 (USBD_STATE_DEFAULT)。

应该是这样还是我遗漏了什么?

我也试过USBD_Stop()USBD_Start() 看看是否有任何区别,但当我断开连接时状态仍然没有改变。

有什么想法吗?

【问题讨论】:

  • "usbd_core.c" 从哪里来?该文件绝不是通用的或标准的,并且可以在多个实现中使用相同的文件名。

标签: c embedded usb


【解决方案1】:

USB 规范定义了六种 USB 设备状态:

  • 已连接:设备已连接到 USB,但未由 USB 供电。

  • 已通电:设备已连接到 USB 并已通电,但尚未收到任何重置请求。

  • 默认:设备已连接到 USB。它已通电并重置,但尚未为其分配唯一地址。

  • 地址:设备已连接到 USB,已通电并重置,并已分配了唯一地址。

  • 已配置:设备已处于地址状态并已配置。它没有处于挂起状态。

  • 挂起:设备已连接并配置,但在至少 3 毫秒内未检测到总线上的任何活动。

如您所见,suspended 需要附加和配置的设备,但也请注意,所有这些状态都需要附加设备,并且显然不能用于暗示物理分离的设备。

断开连接是来自 USB 控制器的低级事件 - 您的 API 可能会为此类事件提供回调。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多