獲取更多相關的【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