【问题标题】:USB Runtime suspend and Resume implementation in DWC3 USB controllerDWC3 USB 控制器中的 USB 运行时挂起和恢复实现
【发布时间】:2017-06-30 09:07:03
【问题描述】:

我是 USB 电源管理的新手,我需要实现 USB 运行时挂起和恢复。 我的开发板有 DWC3 USB 控制器。根据规范,此 DWC3 控制器会产生 3.5 毫秒的 SUSPEND 中断。

我想知道如何配置这个控制器,以便它可以产生 SUSPEND/RESUME 中断。我提到了 Linux USB 驱动程序,但我找不到合适的信息。

如果可能,请提供详细信息。

【问题讨论】:

    标签: usb resume power-management suspend


    【解决方案1】:

    好的,让我修正一下你使用的一些术语。

    它称为暂停信令和恢复信令。

    根据规范,此 DWC3 控制器会产生 3.5 毫秒的 SUSPEND 中断。

    这是一般要求。任何连接到主机的 USB 设备或集线器都将在总线上看到 3 ms 的空闲信号/状态时开始转换到挂起状态。

    我想知道如何配置这个控制器,以便它可以产生 SUSPEND/RESUME 中断。

    再一次,它不是中断,而是它的信号。您无法生成这些信号。这些将由控制器生成。您必须告诉控制器开始挂起信号。
    这可以通过使用链接状态 U3 写入 PORTSC 寄存器来完成。

    我提到了 Linux USB 驱动程序,但我找不到合适的信息。

    正如我所说,您必须编写链接状态 U3 才能启动暂停信号,请查看 drivers/usb/core/hub.c 中的以下 API,了解如何启用暂停和恢复信号。

    usb_port_suspend()
    usb_port_resume()
    

    编辑 1- 要了解有关暂停和恢复信号的更多信息,请参阅 USB 3.0 规范。

    编辑 2 - 请记住,对于集线器,USB 3.0 规定不再支持全局挂起。所以它总是在集线器上挂起一个特定的端口。

    编辑 3 - 需要 3 毫秒才能挂起特定于 USB 2.0,它对 USB 3.0 端口无效。

    【讨论】:

    • 非常感谢。我会按照你的建议去做。
    • @user3267021 添加了一个我忘了提及的编辑
    • 嗨 Shaibal,即使我将控制器配置为暂停信号,我怎么会知道暂停信号已经到来?有什么回调方法吗?我对这个概念真的很陌生。
    • 挂起不会造成任何中断。当您开始任何 USB 传输时,链接将通过恢复链接来解除重置。要进行验证,您可以连接 USB 分析仪以查看链路状态,或者您可以连接万用表以查看电流消耗。在挂起模式下,设备会消耗微安电流。
    • 我在问代码实现。我怎么知道有来自控制器的 SUSPEND 信号?有回调函数吗?
    【解决方案2】:

    我的理解是错误的 w.r.t 要求。我必须实现 USB 休眠(L2 挂起)功能。为此,当主机挂起时,我们会收到一个事件“休眠事件”。现在功能已实现并且工作正常。需要从 DWC3 控制器的 DEVENT 寄存器注册休眠事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-16
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      相关资源
      最近更新 更多