Platform: RK3399
OS: Android 7.1
Kernel: v4.4.83
声明: 这里的内容基本上是从RK提供的文档引用整理过来的。
RK3399平台上有两个Type-C USB3.0和两个USB2.0 Host。
两个Type-C USB3.0控制器都可以⽀持OTG(USB2.0 OTG功能是通过连接到USB2.0 PHY实现),并且向下兼容USB2.0/1.1/1.0。但由于Kernel同一时间只能使用一个OTG,所以RK3399 SDK DTS的默认配置是⽀持Type-C0 USB3.0 OTG功能,Type-C1 USB3.0 Host功能。
Type-C USB3.0可以根据需求,将物理接⼝设计为Type-A USB3.0 Host,Micro USB3.0 OTG,Micro USB2.0 OTG等类型(在我们板子上其中一个就接成了Type-A USB3.0 Host),内核USB 驱动已经兼容这⼏种不同类型的USB接⼝,只需要修改DTS配置,就可以使能相应的USB接⼝。
接下来分解各个模块。
EHCI和OHCI Rockchip采用Linux 内核Generic驱动,一般开发 时只需要对DT作相应配置,即可正常工作。
Driver代码路径:
drivers/usb/host/ehci*
drivers/usb/host/ohci*
USB2.0 PHY使用的是Innosilicon IP。
Innosilicon PHY对应的文档:
Documentation/devicetree/bindings/phy/phy-rockchip-inno-usb2.txt
Driver代码路径:
drivers/phy/phy-rockchip-inno-usb2.c
RK3399没有独立的USB2.0 OTG控制器,但有独立的USB3.0 OTG控制器,并且可以向下兼容USB2.0 OTG的完整功能。
USB2.0 OTG对应的控制器是DWC2。
USB2.0 OTG使用的是Synopsys 方案,即使用DWC2控制器同时实现Host和Device功能,DWC2控制器通过检测 OTG口上ID脚的电平判断切换为何种模式,ID脚的电平变化触发控制器ID脚中断,然后由软件切换到对应模式。
目前使用两种驱动版本,一个是upstream 版,驱动在dwc2目录下,主要从upstream开源项目更新代码,另一个 是内部版,驱动在dwc_otg_310目录下,由RK内部自行维护,还未upstream。
配置说明:
Documentation/devicetree/bindings/usb/dwc2.txt
Driver代码路径:
upstream 版:drivers/usb/dwc2/* (没编译进去使用)
内部版:drivers/usb/dwc_otg_310/*
接到TypeC PHY实现USB3.0 OTG。
xHCI Host Controller实现Host功能
USB3.0 OTG具有USB3.0 OTG功能,且向下兼容USB2.0 OTG功能,大传输速率为5Gbps。
USB3.0 HOST控制器为XHCI,集成于DWC3 OTG IP中,所以不用单独配置dts,只需要配置DWC3,并且设置 DWC3的dr_mode属性为dr_mode = “otg”或者dr_mode = “host”,即可以enable XHCI控制器。
目前USB3.0 OTG使用Synopsys 方案,即XHCI扩展的DWC3控制器,Host功能在XHCI框架下实现,而Device功能 由DWC3扩展部分实现。
配置说明:
Documentation/devicetree/bindings/usb/dwc3-rockchip.txt
Driver代码路径:
drivers/usb/dwc3/*
drivers/usb/host/xhci*
drivers/usb/dwc3 目录下的文件主要包括厂商引导驱动,Host Device通用DWC3控制器驱动和Device驱动,其中 文件名带厂商名字的为产商引导驱动,RK驱动文件名为dwc3-rockchip.c,core.c是DWC3控制器核心驱动,负责 加载XHCI驱动初始化XHCI控制器、加载Device驱动和初始化DWC3 Device控制器,gadget.c是DWC3 Device驱动 文件,主要实现控制器相关的Device初始化、中断处理和数据传输等功能。
由 USB3.0 SuperSpeed PHY和DisplayPort Transmit PHY组成。
USB3.0 PHY 为Cadence IP。
配置说明路径:
Documentation/devicetree/bindings/phy/phy-rockchip-typec.txt
代码路径:
drivers/phy/rockchip/phy-rockchip-typec.c
Rockchip-Developer-Guide-linux4.4-USB.pdf
RK3399 USB DTS Configuration Instruction.pdf
Rockchip RK3399TRM V1.3 Part2.pdf