c - 使用 usbd_core.c 检测 USB 设备何时断开连接

标签 c embedded usb

因此,在嵌入式系统上工作时,我有一个 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/

相关文章:

ubuntu - 如何在 ubuntu 下使用 adb usb 连接 android 设备

embedded - 开发套件建议

c - dcgettext 的目的是什么?

c - 结构填充

database - 嵌入式数据库的选择?

assembly - 典型的嵌入式引导加载程序如何结束?

c++ - 使用 C/C++ 和 openssl 处理单个 AES-128-ECB block

c - 读取文件时 "bypass"如何控制字符?

c - 验证嵌入式应用程序的时间戳字符串

c++ - 如何在 MAC OS c/c++ 中阻止 USB 存储设备