USB框架
先看一下瑞芯微官方的USB系统的框架图。
从这张图上看,RK3588对外提供的USB接口,最多有3个USB3.0,2个USB2.0。
其中USB3.0有2种情况:
USB+DP复用,共有2个,其中USB3.0向下兼容USB2.0
USB+PCIE复用,共有1个,其中USB3.0只支持Host模式,且不兼容USB2.0
整体分类
USB3.0 OTG0:USB3&DP CombPHY_0+USB2 PHY_0
USB3.0 OTG1:USB3&DP CombPHY_1+USB2 PHY_1
USB3.0 HOST2:USB3&PCIE&SATA CombPHY_2
USB2.0 HOST0:USB2 PHY_2
USB2.0 HOST1:USB2 PHY_3
重要概念
linux管理USB设备时,使用了控制器+物理层的概念。
就是说要使用USB功能,它得先有1个USB控制器,用来处理事务数据,
还需要有1个USB物理层,用来传输USB物理电信号。
设备树
USB3.0 OTG0的设备树。
芯片级配置
USB控制器
usbdrd3_0: usbdrd3_0 {
compatible = "rockchip,rk3588-dwc3", "rockchip,rk3399-dwc3";
status = "disabled";
usbdrd_dwc3_0: usb@fc000000 {
compatible = "snps,dwc3";
reg = <0x0 0xfc000000 0x0 0x400000>;
phys = <&u2phy0_otg>, <&usbdp_phy0_u3>;
phy-names = "usb2-phy", "usb3-phy";
status = "disabled";
};
};
USB物理层
usb2phy0_grf: syscon@fd5d0000 {
compatible = "rockchip,rk3588-usb2phy-grf", "syscon", "simple-mfd";
reg = <0x0 0xfd5d0000 0x0 0x4000>;
u2phy0: usb2-phy@0 {
compatible = "rockchip,rk3588-usb2phy";
reg = <0x0 0x10>;
status = "disabled";
u2phy0_otg: otg-port {
status = "disabled";
};};
};
usbdp_phy0: phy@fed80000 {
compatible = "rockchip,rk3588-usbdp-phy";
reg = <0x0 0xfed80000 0x0 0x10000>;
status = "disabled";
usbdp_phy0_u3: u3-port {
status = "disabled";
};};
板级配置
USB控制器
&usbdrd3_0 {
status = "okay";
};&usbdrd_dwc3_0 {
dr_mode = "host";maximum-speed = "super-speed";
status = "okay";
};
USB物理层
&u2phy0 {
status = "okay";
};&u2phy0_otg {
vbus-supply = <&vcc5v0_otg>;
status = "okay";
};&usbdp_phy0 {
rockchip,dp-lane-mux = < 2 3 >;
status = "okay";
};&usbdp_phy0_u3 {
status = "okay";
};