linux usb枚举分析2----(host软件流程)

USB host软件流程

       USB主机侧枚举软件关键流程如下:

下面围绕上面两个图对USB枚举过程进行代码跟踪。

1.usb otg检测

        DWC3是一个USB 3.0 Dual-Role-Device(DRD)设备。USB设备分为HOST(主设备)和SLAVE(从设备),只有当一台HOST与一台SLAVE连接时才能实现数据的传输,而OTG设备既能充当HOST,亦能充当SLAVE,也即DRD(Dual-role-devices).我现在只分析当主设备的情况。

        在kernel_platform/qcom/proprietary/devicetree/qcom/lahaina-usb.dtsi中

        在/drivers/usb/dwc3/core.c中:

        dwc3_probe-> dwc3_core_init_mode

        dwc3_core_init_mode里面会进行不同模式的初始化,包括otg、host或者peripheral。

        只做从设备的情况比较少,只做host或者otg的情况比较多。看一下host的情况:

        cat /sys/bus/platform/devices/a600000.ssusb/mode,如果手机是主机会显示host,如果手机连电脑会显示peripheral,如果什么都没连会显示none。

        通过向/sys/class/typec/port0/data_role写host或devcie可更改当前手机的data_role,写完后会通过PD通信发对对端。

        插入OTG线后会在/sys/devices/platform/soc/a600000.ssusb/a600000.dwc3多出来xhci-hcd.2.auto目录

        platform总线下,a600000.dwc3是USB主机控制器

        在/drivers/usb/core/usb.c中,在开机初始化时,usb core注册了USB总线,USB文件系统,USB hub以及USB中的唯一设备驱动usb generic driver等。

2.usb主机控制器驱动

        Xhci是USB3.0的host规范,同时兼容USB2.0

代码位于/drivers/usb/host/xhci-plat.c

        Xhci控制器的ops在/drivers/usb/host/xhci.c

        xhci_init_driver( )将控制的xhci_hc_driver赋给xhci_plat_hc_driver,主要内容如下:

        而控制器的驱动xhci_hc_driver描述如下:

        再讨论usb_xhci_driver->xhci_plat_probe

3.usb root hub加载

        接上一节,usb_add_hcd注册分配roothub, 还有初始化usb phy,把usb总线加入到系统:

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值