RK3568 Android 13 板载驱动适配-USB

📅 2026/8/24 13:59:50
RK3568 Android 13 板载驱动适配-USB
目录前言一、USB基础知识快速回顾1. USB 主机与设备2. USB接口与传输速率3. USB软件架构二、RK3568 USB控制器与PHY简介1. 控制器资源概览2. PHY资源与复用关系三、USB硬件原理图分析1. 电源5V供电USB接口的“生命线”1.1 Host 5V供电1.2 OTG 5V供电2. 其他关键硬件信号四、设备树适配1. 电源5V供电Regulator节点1.1 主USB电源1.2 Host 5V供电1.3 OTG 5V供电2. USB 2.0 PHY节点2.1 usb2phy0OTG USB 3.0 Host共用2.2 usb2phy1USB 2.0 Host0 Host1共用3. USB 2.0 Host控制器节点3.1 EHCI控制器USB 2.0高速3.2 OHCI控制器USB 1.1全速/低速4. USB 3.0控制器节点4.1 USB 3.0 OTG控制器4.2 USB 3.0 Host控制器5. GPIO复用配置总结前言USB作为嵌入式产品中最基础、最常用的外设接口其功能适配的稳定性直接影响产品的用户体验。RK3568作为瑞芯微出品的一款高性能、低功耗的国产SoC广泛应用于AIoT、边缘计算、工业控制等领域其USB控制器资源丰富支持USB 3.0 OTG、USB 2.0 Host等多种接口类型。近期我在基于RK3568的Android 13 SDK上完成了全部USB接口的适配工作。本文将从硬件原理图分析入手深入解析设备树中每一个USB相关节点及其关键属性的作用并结合实际的调试验证过程分享一套完整的USB适配思路和方法。无论你是刚接触RK3568平台还是在调试USB功能时遇到了困难希望这篇文章都能为你提供一些参考。一、USB基础知识快速回顾在深入适配工作之前我们先来简单回顾几个USB相关的核心概念。1. USB 主机与设备角色说明USB Host主设备控制和管理USB总线是数据传输的发起方。常见如电脑、开发板上的USB-A口。USB Slave/Device从设备受主机控制的设备响应主机的请求。常见如U盘、鼠标、键盘。USB OTGOn-The-Go允许设备在主设备和从设备之间动态切换角色实现“即插即用”的设备互联。2. USB接口与传输速率接口版本别名最高速率备注USB 1.1Full Speed / Low Speed12 Mbps / 1.5 Mbps已逐步淘汰USB 2.0High Speed480 Mbps目前最主流的USB标准USB 3.0 / 3.1 Gen1Super Speed5 Gbps向下兼容USB 2.03. USB软件架构在Linux/Android系统中USB软件栈采用分层架构USB PHY驱动负责底层物理层信号的控制和调整。USB控制器驱动负责与硬件寄存器交互管理数据传输如DWC2、DWC3驱动。USB Core提供核心框架和协议处理。USB Gadget驱动当设备作为Device端时实现ADB、MTP、RNDIS等功能。二、RK3568 USB控制器与PHY简介1. 控制器资源概览RK3568内置了丰富的USB控制器资源具体如下表所示控制器类型控制器名称数量说明USB 3.0 OTGDWC31个支持OTG 3.0最高速率5GbpsUSB 3.0 HostDWC31个仅支持Host模式最高速率5GbpsUSB 2.0 HostEHCI/OHCI2个兼容USB 1.1和USB 2.0每个控制器包含EHCI和OHCI两个子控制器2. PHY资源与复用关系RK3568的USB PHY与控制器之间存在明确的对应关系PHY名称类型连接的控制器说明usb2phy0USB 2.0 Combo PHYOTG控制器 USB 3.0 Host包含OTG Port和Host Port两个子端口usb2phy1USB 2.0 Combo PHYUSB 2.0 Host0 USB 2.0 Host1包含OTG Port和Host Port两个子端口combphy0/combphy1USB 3.0/SATA Combo PHYOTG控制器 / USB 3.0 Host与SATA功能复用同一时刻仅能支持一种工作模式这里有一个关键的硬件设计点需要注意USB 3.0 PHY与SATA功能是复用的。也就是说如果你在项目中需要使用SATA接口那么对应的USB 3.0端口就只能工作在USB 2.0模式下。三、USB硬件原理图分析拿到板卡的硬件原理图后我们首先关注USB接口的供电部分——这是USB功能是否能够正常工作的前提。1. 电源5V供电USB接口的“生命线”USB接口的5V供电至关重要。无论是Host模式对外设供电还是Device模式下检测VBUS都需要可靠的5V电源控制。1.1 Host 5V供电原理图上VCC5V0_HOST由VCC5V0_USB通过一个负载开关转换而来使能信号由GPIO0_A6控制VCC5V0_USB → 负载开关EN: GPIO0_A6→ VCC5V0_HOST → USB HOST接口当GPIO0_A6输出高电平时VCC5V0_HOST输出5V为USB外设供电。当GPIO为低电平时关闭5V输出。1.2 OTG 5V供电VCC5V0_OTG的控制逻辑与Host类似但使用的GPIO为GPIO0_A5VCC5V0_USB → 负载开关EN: GPIO0_A5→ VCC5V0_OTG → USB OTG接口在实际应用中OTG接口的Vbus供电通常需要在软件层面进行动态控制Device模式由外部Host供电板卡本身不输出5V。Host模式板卡自身输出5V为外设供电。2. 其他关键硬件信号USB2.0的接口只有一组差分信号线USB3.0有3组差分信号线在rk3568上这些通信线都是固定的引脚没有复用。信号线的节点定义可参考rk3568-pinctrl.dtsi文件官方的芯片级设备树文件rk3568.dtsi信号线都已经配置好了。四、设备树适配RK3568 Android 13 SDK中的设备树文件已经提供了完整的USB节点定义我们只需要根据实际硬件设计在参考评估板设备树文件rk3568-evb.dtsi中使能对应的节点并配置好电源控制即可。1. 电源5V供电Regulator节点设备树中首先定义了5V供电的regulator节点1.1 主USB电源vcc5v0_usb: vcc5v0-usb { compatible regulator-fixed; regulator-name vcc5v0_usb; regulator-always-on; regulator-boot-on; regulator-min-microvolt 5000000; regulator-max-microvolt 5000000; vin-supply dc_12v; };节点作用定义USB 5V供电的源头。regulator-always-on和regulator-boot-on确保系统启动后VCC5V0_USB一直有电。1.2 Host 5V供电vcc5v0_host: vcc5v0-host-regulator { compatible regulator-fixed; regulator-name vcc5v0_host; regulator-boot-on; regulator-always-on; regulator-min-microvolt 5000000; regulator-max-microvolt 5000000; enable-active-high; gpio gpio0 RK_PA6 GPIO_ACTIVE_HIGH; vin-supply vcc5v0_usb; pinctrl-names default; pinctrl-0 vcc5v0_host_en; };节点作用控制Host接口的5V输出。GPIO0_A6为高电平时VCC5V0_HOST输出5V。enable-active-high属性表明GPIO为高电平有效。1.3 OTG 5V供电vcc5v0_otg: vcc5v0-otg-regulator { compatible regulator-fixed; regulator-name vcc5v0_otg; regulator-min-microvolt 5000000; regulator-max-microvolt 5000000; enable-active-high; gpio gpio0 RK_PA5 GPIO_ACTIVE_HIGH; vin-supply vcc5v0_usb; pinctrl-names default; pinctrl-0 vcc5v0_otg_en; };节点作用控制OTG接口的5V输出。与Host不同的是OTG的VBUS在Device模式下需要关闭因此此处不添加regulator-always-on和regulator-boot-on属性而是由PHY驱动根据OTG模式动态控制。2. USB 2.0 PHY节点2.1 usb2phy0OTG USB 3.0 Host共用usb2phy0 { status okay; };usb2phy0是USB 2.0 Combo PHY_0它包含两个子端口OTG端口u2phy0_otg { vbus-supply vcc5v0_otg; // VBUS供电由vcc5v0_otg提供 status okay; };关键属性vbus-supply指定OTG VBUS的供电regulator。在OTG模式切换时PHY驱动会动态控制该regulator的开关。Host端口u2phy0_host { phy-supply vcc5v0_host; // PHY的电源由vcc5v0_host提供 status okay; };关键属性phy-supply指定PHY的供电regulator。与vbus-supply不同phy-supply在系统启动后一直保持开启。2.2 usb2phy1USB 2.0 Host0 Host1共用usb2phy1 { status okay; }; u2phy1_host { phy-supply vcc5v0_host; status okay; }; u2phy1_otg { phy-supply vcc5v0_host; status okay; };usb2phy1负责两个独立的USB 2.0 Host接口。这里u2phy1_otg虽然名字叫“otg”但在Host模式下被用作普通的Host端口因此也使用phy-supply控制电源。3. USB 2.0 Host控制器节点3.1 EHCI控制器USB 2.0高速usb_host0_ehci { status okay; }; usb_host1_ehci { status okay; };节点作用ehciEnhanced Host Controller Interface负责USB 2.0高速480Mbps传输。每个USB 2.0 Host控制器由一个EHCI和一个OHCI子控制器组成它们共用同一个PHY。3.2 OHCI控制器USB 1.1全速/低速usb_host0_ohci { status okay; }; usb_host1_ohci { status okay; };节点作用ohciOpen Host Controller Interface负责USB 1.1全速12Mbps和低速1.5Mbps传输用于兼容老旧或低速的USB设备。4. USB 3.0控制器节点4.1 USB 3.0 OTG控制器usbdrd30 { status okay; }; usbdrd_dwc3 { dr_mode otg; // 模式otg/host/peripheral extcon usb2phy0; // 外接连接器检测 status okay; };关键属性dr_mode控制器的角色模式。otg根据OTG ID引脚自动切换或软件手动切换。host只作为主机。peripheral只作为设备。extcon指定外接连接器extcon设备用于检测USB连接状态。节点关系usbdrd30是控制器父节点usbdrd_dwc3是子节点。这种设计是为了在芯片级设备树配置公共资源如时钟、电源域在板级设备树配置具体的工作模式和属性。4.2 USB 3.0 Host控制器usbhost30 { status okay; }; usbhost_dwc3 { status okay; };节点作用USB 3.0 Host控制器只工作在Host模式不支持OTG功能结构比OTG控制器简单。5. GPIO复用配置pinctrl { usb { vcc5v0_host_en: vcc5v0-host-en { rockchip,pins 0 RK_PA6 RK_FUNC_GPIO pcfg_pull_none; }; vcc5v0_otg_en: vcc5v0-otg-en { rockchip,pins 0 RK_PA5 RK_FUNC_GPIO pcfg_pull_none; }; }; };节点作用pinctrl将GPIO0_A6和GPIO0_A5配置为普通的GPIO功能RK_FUNC_GPIO并设置为无上拉/下拉pcfg_pull_none使它们能够作为电源控制信号。总结本文介绍了在RK3568 Android 13平台上如何适配USB大部分的工作官方都已经适配好了一般就是核对电源控制部分让其和自己的原理图匹配。希望本文能为大家提供一些参考。