当前位置: 首页 > news >正文

【RK3576】【Android14】USB开发调试

获取更多相关的【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

http://www.lryc.cn/news/593333.html

相关文章:

  • 《Spring Boot 插件化架构实战:从 SPI 到热插拔的三级跳》
  • Android14 SystemUI 启动流程(2)
  • Verilog *2* SPI-立创逻辑派G1测试-1
  • 软件警告弹窗与兼容性问题
  • 当OT遇见IT:Apache IoTDB如何用“时序空间一体化“破解工业物联网数据孤岛困局
  • FMEA-CP-PFD三位一体数字化闭环:汽车部件质量管控的速效引擎
  • XSS漏洞----基于Dom的xss
  • 动态规划算法的欢乐密码(三):简单多状态DP问题(上)
  • GA-BP遗传算法优化BP神经网络数据生成,采用SVM分类模型评估
  • RabbitMQ面试精讲 Day 3:Exchange类型与路由策略详解
  • PostgreSQL常用命令与工具指南
  • 发明专利怎么写,与学术文章异同点与注意事项
  • 从0开始学习R语言--Day51--PH检验
  • HAMR硬盘高温写入的可靠性问题
  • 数字图像处理(三:图像如果当作矩阵,那加减乘除处理了矩阵,那图像咋变):从LED冬奥会、奥运会及春晚等等大屏,到手机小屏,快来挖一挖里面都有什么
  • 我用Cursor,1周上线了一个虚拟资料流量主小程序技术选型
  • 图解系统-小林coding笔记
  • view和pure的区别
  • 电脑windows系统深度维护指南
  • Validation - Spring Boot项目中参数检验的利器
  • 前端开发技巧:浏览器模拟弱网络环境
  • 中间件安全攻防全解:从Tomcat到Weblogic反序列化漏洞介绍
  • 暑假--作业3
  • Redis的持久化-RDB
  • 关于个人博客系统的测试报告
  • 【2025最新】使用neo4j实现GraphRAG所需的向量检索
  • BeanFactory 和 FactoryBean 的区别
  • Netty网络聊天室及扩展序列化算法
  • (后者可以节约内存/GPU显存)Pytorch中求逆torch.inverse和解线性方程组torch.linalg.solve有什么关系
  • 单调队列深度解析(下)