链路电源管理中的 L2 状态
Posted
技术标签:
【中文标题】链路电源管理中的 L2 状态【英文标题】:L2 state in Link Power Management 【发布时间】:2017-07-11 06:31:01 【问题描述】:我有一项任务需要在链路电源管理中实现 L2 挂起状态。我使用一个开发板,它具有与 PHY 接口的 DWC3 usb 控制器。基本上我们的板子使用Linux usb DWC3驱动并连接到主机。
我的理解是 USB 控制器在总线不活动 3.125 毫秒后产生 SUSPEND 信号。 谁能告诉我如何配置这个控制器来实现 L2 挂起状态?
【问题讨论】:
【参考方案1】:在您当前的设置中,您的开发板处于设备/小工具模式,并且您已连接到主机。 请记住,USB 设备不能驱动挂起信号。它应该由Host启动。
USB 2.0 设备的挂起过程 -
1 - USB 主机没有数据要发送,当前它正在发送 SOF 帧 2 - 主机软件通过在 EHCI/XHCI 控制器中设置挂起/U3 来挂起设备 3 - 现在 USB 设备在没有 SOF 的总线中看到空闲状态 4 - 大约 3 ms 后,设备硬件通过移除其接地端并连接内部上拉寄存器开始自行挂起 5 - 然后设备再次轮询线路以查看主机是否已删除其终止。 6 - 由于主机已删除终止,设备将进入挂起
USB 3.0 设备的挂起过程 -
1 - USB 主机没有数据要发送 2 - 主机软件通过在 XHCI 控制器中设置 U3 来挂起设备 3 - 主机开始发送 LGO_U3 链接命令以启动挂起信号 4 - 设备收到 LGO_U3 命令后,将确认并开始挂起
因此,总而言之,您无法从 USB 设备启动挂起信号。您只能设置设备堆栈的内部状态。
EDIT 1 - 此挂起过程适用于 USB 2.0 / 高速设备。如果您的开发板是通过 SS 端口连接到主机的超高速/USB 3.0 设备,则该过程在链路级别上略有不同,但从用户的角度来看没有区别。 编辑 2 - 我现在已经用 USB 2.0 和 USB 3.0 设备的挂起过程更新了答案
【讨论】:
感谢谢巴尔的回复。所以你的意思是说我不必配置控制器?它会自己产生挂起信号吗?如果是,它会在 3 毫秒后设置任何特定的寄存器位吗?或者 ISR 会被执行? 再一次,您的控制器正在设备模式下运行。 DWC 控制器可以在主机模式和设备模式下工作。在设备模式下运行时,它不会驱动任何信号。挂起信号应该来自您连接电路板的主机。是的,暂停后,PORTSC 将在您的控制器中设置为 U3,您将收到事件/中断。 ISR 将被执行。 非常感谢您的支持。最后一个问题,我在哪里可以找到关于这个被执行的 ISR 的信息?或者当中断或事件发生时,代码的哪一部分会被执行? 您需要查看 dwc 控制器设备模式驱动程序 (udc) 是否可用。如果没有,那么您需要实施它。检查内核/驱动程序/usb/gadget 文件夹。如果它可用,它应该在这里。小工具/设备控制器驱动程序代码将实现中断处理程序。以上是关于链路电源管理中的 L2 状态的主要内容,如果未能解决你的问题,请参考以下文章