因此,在嵌入式系统上工作时,我有一个 USB 驱动器,用于为设备充电以及读取一些数据。
使用 usbd_core.c
我可以检查状态,
- 当没有任何连接时,状态为
4
(USBD_STATE_SUSPENDED
)。 - 只要我连接上某些东西,状态就会更改为
1
(USBD_STATE_DEFAULT
)。 - 但是当我断开它时,状态没有改变,它仍然是
1
(USBD_STATE_DEFAULT
)。
它应该是这样的还是我遗漏了什么?
我也尝试了 USBD_Stop()
和 USBD_Start()
看看它是否有任何不同,但当我断开连接时状态仍然没有改变。
有什么想法吗?
最佳答案
USB 规范定义了六种 USB 设备状态:
已连接:设备已连接到 USB,但未由 USB 供电。
已上电:设备已连接到 USB 并已上电,但尚未收到任何重置请求。
默认:设备连接到 USB。它已通电并已重置,但尚未为其分配唯一地址。
地址:设备已连接到 USB,已通电和重置,并分配有唯一地址。
已配置:设备已处于地址状态并已配置。它不处于挂起状态。
已暂停:设备已连接并已配置,但至少 3 毫秒未检测到总线上有任何事件。
如您所见,suspended 需要连接和配置的设备,但还要注意,所有这些状态都需要连接的设备,并且显然不能用于暗示物理上的分离设备。
断开连接是来自 USB Controller 的低级事件 - 您的 API 可能会为此类事件提供回调。
关于c - 使用 usbd_core.c 检测 USB 设备何时断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30910824/