将TypeC的adb切换到USB3.0口

rk3399调试usb支持u盘鼠标等 调试支持usb功能 阅读详情
AI摘要

本文介绍在Rockchip RK3399平台上,如何通过修改设备树和内核配置,将ADB调试接口从Type-C切换至USB3.0端口。此方法适用于Android 7.1版本,涉及设备树修改、内核编译及系统设置。

前言

目前大多数Android的嵌入式系统都会使用TypeC做为adb的调试口,这样很方便。但是在有的时候,迫不得已必须将adb功能切换到USB3.0口,但由于当前的内核USB框架只能支持一个USB口作为Peripheral
功能,所以RK3399 SDK默认配置Type-C0作为OTG mode 支持USB Peripheral功能,而Type-C1只支持Hostmode。

注意: 下面介绍的方法只在rk3399的Industry的7.1版本上实现成功并测试过,其他版本仅做参考,但也大同小异。

Kernel: v4.4.126
Device: rk3399
Platform Version: Android 7.1

硬件

首先,参考原理图如下:

1

Device Tree

RK提供的dts中默认的rk3399.dtsi,默认

 usbdrd3_0: usb@fe800000 {
  	...
    usbdrd_dwc3_0: dwc3@fe800000 {
        compatible = "snps,dwc3";
        dr_mode = "otg";
    };
...
};
usbdrd3_1: usb@fe900000 {
    ...
    usbdrd_dwc3_1: dwc3@fe900000 {
        compatible = "snps,dwc3";
        dr_mode = "host";
    };
...
};

我们需要在自己的dts中修改usbdrd_dwc3_1的dr_mode模式为otg,将usbdrd_dwc3_0的模式修改为host

&usbdrd_dwc3_0 {
	status = "okay";
	dr_mode = "host";
};

&usbdrd_dwc3_1 {
	status = "okay";
	dr_mode = "otg";
};

Drivers

  1. kernel/include/linux/phy/phy.h

     diff --git a/kernel/include/linux/phy/phy.h b/kernel/include/linux/phy/phy.h
     index a3965c3..c0daa66 100644
     --- a/kernel/include/linux/phy/phy.h
     +++ b/kernel/include/linux/phy/phy.h
     @@ -36,6 +36,7 @@ enum phy_mode {
       * @power_on: powering on the phy
       * @power_off: powering off the phy
       * @set_mode: set the mode of the phy
     + * @set_vbusdet: usb disconnect of the phy
       * @reset: resetting the phy
       * @cp_test: prepare for the phy compliance test
       * @owner: the module owner containing the ops
     @@ -46,6 +47,7 @@ struct phy_ops {
     	    int     (*power_on)(struct phy *phy);
     		int     (*power_off)(struct phy *phy);
     		int     (*set_mode)(struct phy *phy, enum phy_mode mode);
     +    int (*set_vbusdet)(struct phy *phy, bool level);
     		int     (*reset)(struct phy *phy);
     		int     (*cp_test)(struct phy *phy);
     		struct module *owner;
     @@ -133,6 +135,7 @@ int phy_exit(struct phy *phy);
      int phy_power_on(struct phy *phy);
      int phy_power_off(struct phy *phy);
      int phy_set_mode(struct phy *phy, enum phy_mode mode);
     +int phy_set_vbusdet(struct phy *phy, bool level);
      int phy_reset(struct phy *phy);
      int phy_cp_test(struct phy *phy);
      static inline int phy_get_bus_width(struct phy *p
设备树总结-基于rk3588 关于设备树的一些总结 阅读详情

相关推荐

[RK3399]解决type-c无法连接adb

Platform: ROCKCHIP Chip: RK3399 OS: Android7.1.2 Kernel: 4.4.126 现象 正常的板子接入type-c的打印如下 手上调试的板子接入type-c的打印如下 RK3399的type-c原理 RK3399 SoC 内部 4 个 USB 控制器与 USB PHY 的连接如下图 。 DP 是指 Display Port 控制器,DP 与 USB 3.0 共用 Type-C PHY。一个完整的type-C 功能,是由 Type-C USB 3.0 PHY

但行前路 无问西东 5465

【RK3399 android10 W3S 二合一 typeC OTG切换HOST和DEVICE 】

文章目录【RK3399 android10 W3S 二合一 typeC OTG切换HOST和DEVICE 】 【RK3399 android10 W3S 二合一 typeC OTG切换HOST和DEVICE 】

A08118139的博客 1942

USB typec to adb

在移植dwc3驱动时,实现adb功能,记录该功能的实现以及相关驱动的流程

changcheng00的博客 2008

RK3399 Android10 TypeC OTG模式切换:从硬件缺陷到软件驱动的解决方案

本文深入探讨了RK3399 Android10开发板TypeC OTG模式切换的硬件缺陷及软件驱动解决方案。通过分析TypeC接口电路设计问题,提出绕过TypeC协议栈直接操作USB2.0链路的创新方法,实现100% U盘识别率和稳定模式切换,显著提升设备兼容性和工作效率。

weixin_30352645的博客 467

Type-C线竟能调试车机?揭秘ADB连接中的接口冷知识

本文深入探讨了车载测试中ADB连接的核心难点,揭示了Type-C线缆无法调试车机的根本原因。文章从硬件接口协议、车机工程模式开启、授权问题破解及线材选购等多维度,提供了针对不同品牌车型的ADB连接实战解决方案与排错指南,帮助测试工程师高效完成调试工作。

k8s6orchestrator的博客 898

RK平台USB调试全链路诊断:从硬件接口到ADB识别的深度解析

本文深入解析RK平台USB调试全链路问题,从硬件接口到ADB识别的完整排查流程。针对RK开发板连接电脑时常见的ADB识别失败问题,提供从Type-C线材选择、USB接口检查到驱动配置、内核调试的全面解决方案,帮助开发者快速定位并解决USB调试难题。

weixin_29184075的博客 159

RK3399安卓10 TypeC OTG模式切换实战:手把手教你解决U盘识别问题

本文针对RK3399开发板在Android 10系统下,因Type-C接口CC引脚缺失导致OTG模式无法自动切换、U盘无法识别的问题,提供了从硬件原理分析到内核驱动修改的完整实战解决方案。文章深入剖析了FUSB302芯片角色检测机制,并最终通过修改USB PHY驱动,实现手动强制切换HOST/DEVICE模式,成功解决了U盘识别难题。

weixin_29165465的博客 276

RK3399 Android10 TypeC OTG模式手动切换方案解析与实现

本文针对RK3399 Android10平台Type-C接口OTG功能失效问题,提供了深度解析与手动切换实现方案。通过分析硬件原理图缺陷(FUSB302 CC引脚悬空),并深入RK3399 USB架构,最终提出绕过自动检测、直接强制切换USB控制器角色的软件方案。文章详细阐述了通过修改设备树、操作USB Gadget与Host控制器驱动,并封装为系统服务,实现稳定可靠的HOST/DEVICE模式手动切换,解决了因硬件设计导致的OTG功能不可用问题。

prometheus9mon的博客 257

Android10 TypeC外设识别失败?手把手教你排查RK3399 OTG功能问题

本文详细解析了RK3399开发板在Android10系统下TypeC接口OTG功能失效的排查与解决方法。从硬件原理图检查到Linux内核驱动调试,再到Android系统层配置优化,提供了一套完整的故障排查指南。特别针对TypeC外设识别失败问题,给出了硬件修改和软件适配两种解决方案,并分享了实用的调试命令集锦。

weixin_30352645的博客 459

Jetson Xavier NX USB OTG功能实现:手把手教程

详解Jetson Xavier NX如何启用和配置USB OTG功能,实现设备模式切换与数据传输,适用于嵌入式开发场景,提升jetson xavier nx的扩展能力与应用灵活性。

weixin_42418754的博客 1019

TypeC转USB识别不了U盘?RK3399的fusb302驱动修改实战记录

本文记录了在RK3399平台上,因Type-C接口缺少CC引脚导致无法识别U盘的问题分析与解决过程。通过深入剖析FUSB302驱动状态机,提供了强制切换USB HOST模式的实战方案,包括修改内核驱动、创建sysfs控制接口以及底层USB控制器配置,为嵌入式开发中类似硬件限制问题提供了有效解决路径。

weixin_29188997的博客 112

Android14 USB子系统动态配置机制解析:从传统模式到Configfs的演进

本文深入解析Android14 USB子系统的动态配置机制,重点介绍从传统模式到Configfs架构的演进。通过对比分析传统硬编码方式与Configfs的动态配置优势,揭示Android14在USB功能切换灵活性、开发效率等方面的重大改进,并分享高通平台实现差异及Type-C角色控制等实战经验。

weixin_42632434的博客 443

深入浅出:高通USB驱动与充电协议的那些事儿(含Type-C接口详解)

本文深入解析高通USB驱动与充电协议的技术细节,涵盖Type-C接口设计、充电协议栈层级、PMIC电流管理及眼图调试实战。特别探讨USB Type-C的24针物理连接和CC引脚动态角色切换,以及QC4.0和PD3.0协议的协商机制,为开发者提供全面的技术参考和实践指南。

weixin_29165725的博客 426

RK3588平台开发系列讲解(硬件篇-功能外设2)

RK3588 芯片内置两个USB3.0 OTG控制器(内嵌2个USB2.0 OTG,下图绿色处),1个USB3.0 HOST 控制器,2个USB2.0 HOST控制器。这些控制器与PHY的内部复用图如下:USB3.0 OTG0 控制器支持SS/HS/FS/LS, 内嵌的USB2.0(HS/FS/LS)信号采用USB2.0 OTG PHY, 信号名见下图的红色方框内;RK3588目前仅此接口支持做Fireware的Download,应用中请务必要预留出。

whm128的博客 2508

rk3568 适配USB

USB(通用串行总线)是一种常见的电脑外部设备连接标准。它是一种用于连接计算机和外部设备的通信接口。USB接口是一种热插拔技术,能够在计算机运行时插拔设备而无需重启系统。

weixin_35723192的博客 1876

VFIO框架源码分析(二十二)- IOMMUFD 的脏页跟踪与 Dirty Bits 读取

在虚拟化热迁移(Live Migration)的场景中,脏页追踪(Dirty Page Tracking)是最具挑战性的环节之一。它的核心任务是实时捕获设备(DMA)对内存的写操作,以便 VMM(如 QEMU)知道哪些内存页需要被重新传输到目标主机。在强耦合与粗粒度:脏页追踪是绑定在 Container 上的。这意味着,如果一个 Container 内有多个设备,哪怕只有一个设备在写内存,脏页追踪也会影响 Container 内的所有设备。软件模拟开销大。

qq_36071928的博客 1042

博客系统 - 系统简介与首页设计

用Bootstrap实现手机端的博客导航栏效果。

m0_53450409的博客 1237

分离与合体题解(区间DP)

题目: 经过在机房里数日的切磁,LYD从社神牛那里学会了分离与合体,出关前,杜神牛给了他一个测试 杜神牛造了个区域,它们紧邻着排成了一行,编号1-n。在这經个区域里都放着一把OI界 的金钥匙,每一把都有一定的价值,LYD当然想得到它们了。然而杜神牛规定LYD不可以一下子 把它们全部拿走,而是每次只可以拿一把。为了尽快地拿到所有的金钥匙,LYD自然就用上了刚学的分离与合体特技。 开始LYD可以选择从1~n-11~n-11~n-1的任何一个区域(记为K)进入,进入后LYD会在K区域发 生分离,从而分离为两个小L

cqbz_lipengcheng的博客 370

思科模拟器实战:MQTT协议实现物联网设备通信全流程解析

本文详细解析了如何在思科模拟器中利用MQTT协议实现物联网设备通信的全流程。通过搭建网络拓扑、配置MQTT Broker与客户端,并编写发布/订阅逻辑,手把手指导读者完成一个“开关控制电灯”的经典物联网场景实验,帮助零成本掌握物联网通信核心。

weixin_29294975的博客 381

NXOpenC#-通用NX对象操作Tag,Handle,TaggedObject介绍

NXOpenC#-通用NX对象操作Tag,Handle,TaggedObject介绍

阿飞2018 1184

node: /lib64/libstdc++.so.6: version `CXXABI_1.3.11‘ not found (required by node) 解决方案

本文主要介绍了node: /lib64/libstdc++.so.6: version `CXXABI_1.3.11’ not found (required by node) ,希望能对使用nodejs的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

【数字孪生与仿真技术】14:数据驱动+机理模型:工业级混合建模实战(附MATLAB完整代码+案例解析)

摘要 本文针对工业建模中机理模型精度不足和数据驱动模型缺乏物理约束的痛点,提出混合建模技术作为解决方案。文章系统阐述了混合建模的3种主流架构(参数校正型、残差补偿型、组件替换型),结合清华大学催化裂化装置的实际案例,分析混合建模的工业应用价值。同时以连续搅拌反应釜(CSTR)为例,提供MATLAB环境下残差补偿型混合模型的完整实现代码,详细展示从机理模型构建到数据驱动补偿的全流程,并给出工程实践中的应对策略,为工业建模提供可落地的技术方案。 关键词 混合建模、机理模型、数据驱动、工业建模、MATLAB

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 622

智慧加油站小程序数据库设计文档

【代码】智慧加油站小程序数据库设计文档。

低代码布道师的博客 1402

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: frameworks中增加自定义服务使其也成为系统服务
下一篇: uboot命令行从U盘升级kernel
lostnx
博客等级 码龄10年 45粉丝 43原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值