获取更多相关的【RK3576】【Android14】驱动开发,可收藏系列博文,持续更新中:
【RK3576】Android 14 驱动开发实战指南
硬件接口
RK3576支持两个USB3.0控制器
驱动开发
dts配置
在“Android14/kernel-6.1/arch/arm64/boot/dts/rockchip/rk3576.dtsi”中包含USB相关dts配置
usb_drd0_dwc3: usb@23000000 {
compatible = "rockchip,rk3576-dwc3", "snps,dwc3";
reg = <0x0 0x23000000 0x0 0x400000>;
clocks = <&cru CLK_REF_USB3OTG0>,
<&cru CLK_SUSPEND_USB3OTG0>,
<&cru ACLK_USB3OTG0>;
clock-names = "ref", "suspend", "bus_clk";
interrupts = <GIC_SPI 261 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&power RK3576_PD_USB>;
resets = <&cru SRST_A_USB3OTG0>;
reset-names = "usb3-otg";
dr_mode = "otg";
phys = <&u2phy0_otg>, <&usbdp_phy_u3>;
phy-names = "usb2-phy", "usb3-phy";
phy_type = "utmi_wide";
snps,dis_enblslpm_quirk;
snps,dis-u1-entry-quirk;
snps,dis-u2-entry-quirk;
snps,dis-u2-freeclk-exists-quirk;
snps,dis-del-phy-power-chg-quirk;
snps,dis-tx-ipgap-linecheck-quirk;
snps,parkmode-disable-hs-quirk;
snps,parkmode-disable-ss-quirk;
status = "disabled";
};usb_drd1_dwc3: usb@23400000 {
compatible = "rockchip,rk3576-dwc3", "snps,dwc3";
reg = <0x0 0x23400000 0x0 0x400000>;
clocks = <&cru CLK_REF_USB3OTG1>,
<&cru CLK_SUSPEND_USB3OTG1>,
<&cru ACLK_USB3OTG1>;
clock-names = "ref", "suspend", "bus_clk";
interrupts = <GIC_SPI 260 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&power RK3576_PD_PHP>;
resets = <&cru SRST_A_USB3OTG1>;
reset-names = "usb3-otg";
dr_mode = "otg";
phys = <&u2phy1_otg>, <&combphy1_psu PHY_TYPE_USB3>;
phy-names = "usb2-phy", "usb3-phy";
phy_type = "utmi_wide";
snps,dis_enblslpm_quirk;
snps,dis-u1-entry-quirk;
snps,dis-u2-entry-quirk;
snps,dis-u2-freeclk-exists-quirk;
snps,dis-del-phy-power-chg-quirk;
snps,dis-tx-ipgap-linecheck-quirk;
snps,dis_rxdet_inp3_quirk;
snps,parkmode-disable-hs-quirk;
snps,parkmode-disable-ss-quirk;
dma-coherent;
status = "disabled";
};
在“kernel-6.1/arch/arm64/boot/dts/rockchip/rk3576-evb1.dtsi”设备配置端又对USB的dts配置做了一次覆盖:
&usb_drd0_dwc3 {
dr_mode = "otg";
usb-role-switch;
port {
usb_drd0_role_switch: endpoint {
remote-endpoint = <&usbc0_role_sw>;
};
};
};&usb_drd1_dwc3 {
dr_mode = "host"; //强制将USB0配置为host
status = "okay";
};
USB 实现虚拟串口通信
在 Android 开发板上通过 USB 实现虚拟串口通信(CDC/ACM),两个 RK3576 开发板可以直接通过 USB 线连接,不需要额外芯片。
内核配置
(确保启用 USB Host 支持和 CDC ACM 驱动:)
CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_ACM=y
连接检测
# 查看连接的 USB 设备
lsusb
# 应显示:ID 2207:0410 Fuzhou Rockchip Electronics CDC ACM# 查看生成的串口设备
ls /dev/ttyACM*
# 应显示:/dev/ttyACM0
USB实现UVC功能
在 RK3576 作为 USB Host 并连接 UVC 设备(如摄像头)的场景下,配置重点在于 内核驱动加载 和 V4L2 框架支持。
内核配置
# USB Host 支持
CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y # XHCI 控制器驱动
CONFIG_USB_XHCI_PLATFORM=y # 平台专用XHCI
CONFIG_USB_EHCI_HCD=y # EHCI 兼容模式# UVC 设备支持
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_USB_VIDEO_CLASS=y # UVC 驱动核心
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y # 支持事件上报# 视频格式(根据实际需求选择)
CONFIG_V4L2_JPEG_HELPER=y
CONFIG_VIDEO_H264=y
USB复合设备功能
在 RK3576 上实现 单路 USB Host 同时支持 UVC 摄像头、USB CDC-ACM 串口和 USB 网卡(RNDIS/ECM) 需要通过 USB Multifunction Composite Gadget 技术实现。
内核配置
# USB Gadget 基础
CONFIG_USB_CONFIGFS=y
CONFIG_USB_LIBCOMPOSITE=y //支持USB复合设备# 功能模块
CONFIG_USB_CONFIGFS_F_UVC=y # UVC摄像头
CONFIG_USB_CONFIGFS_ACM=y # CDC-ACM串口
CONFIG_USB_CONFIGFS_RNDIS=y # RNDIS网卡
# 或 CONFIG_USB_CONFIGFS_ECM # ECM网卡(二选一)# 视频/网络支持
CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_NET_DRIVERS=y