首页 > 其他分享 >Android Qcom USB Driver学习(一)

Android Qcom USB Driver学习(一)

时间:2024-08-07 23:06:29浏览次数:14  
标签:USB VBUS Driver TypeC Rd CC Qcom Role Android

该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零)

USB接口类型

Android终端上常用的USB接口:TypeC(现在的主流),MicroB(以前的设备)

一、TypeC

Hardware Interface

USB-C引脚和功能指南
一文读懂USB TypeC与USB-…TypeC引脚定义
USB-C(USB Type-C)规范的简单介绍和分析

USB-C接口具有三个主要功能:

(1)允许设备协商并选择通过接口的适当功率水平。

(2)具有可翻转的连接器。接口的设计使得插头可以相对于插座翻转。

(3)支持USB 2.0,USB 3.0和USB 3.1 Gen 2标准。

(4)TypeC基于CC1/CC2通讯支持USB PD协议,高通基于D+/D-通信支持高通快充HVDCP高通快充握手协议,前提是基于BC1.2协议

(5)Typec接口要支持视频输出,必须支持DP,这就要看高通芯片的usb feature,而TypeA单是纯粹的数据接口,无法传输视频信号,但也有displaylink的技术能通过TypeA进行传输,通过将显卡计算的结果转为usb,传输后再将usb转为视频输出。

24Pin全功能的TypeC接口的成本较高,很多MCU没有USB3.0,于是就有仅支持USB2.0的16Pin的TypeC,去除SS的R/TX。

TypeC Pin Hardware schematic Function
VBUS USB_VBUS_CONN 总线电源
D ± USB_HS_TYP_C_DP USB_HS_TYP_C_DM USB2.0 高速(High Speed)差分信号
CC1/2 USB_CC1/2_CONN Configuration channel用于连接检测
R/T X1/2 ± USBC_SS_R/T X 0/1_CONN_P
USBC_SS_R/T X 0/1_CONN_M
USB3.0 SuperSpeed差分信号
SBUS1/2 USB0_SBU1/2 Sideband use 适用于传输非USB信号

Channel Configure

在USB2.0应用中,无需考虑CC方向检测问题,但USB3.0或者USB3.1应用中,必须考虑CC方向检测问题。CC1/CC2内部相连,最好分别使用5.1k下拉电阻,而不是共用一颗5.1k的电阻下拉到地。USBC硬件接口设计失误

USB Type-C的连接检测包括3部分的内容:

(1)连接检测;

(2)连接方向检测;

(3)Power Role检测。

Power Role

Source,通过VBUS或者VCONN供电。
Sink,通过VBUS或者VCONN接受供电。
DRP(Dual-Role-Power),既可作为Source,也可作为Sink。角色由设备连接后的CC决定,以及后续的power role switch过程决定。

Data Role

在USB 2.0及以前的时代,根据功能的不同,USB端口分为Host、Device、OTG等。快充协议芯片按照应用场景的不同,Type C又可称为以下三类角色:

DFP(Downstream Facing Port),一般作为Host或者Hub,在初始配置下通过VBUS或者VCONN向device供电,典型的就是电源适配器。
UFP(Upstream Facing Port),一般作为Device或者Hub,初始配置下通过VBUS或者VCONN由Host供电,例如接口转接线等。
DRD(Dual-Role-Data),类似于以前的OTG,既可以作为DFP,也可以作为UFP。设备刚连接时作为哪一种角色,由端口的Power Role
决定;后续也可以通过data role switch过程更改(如果支持USB PD协议的话),例如支持PD快充的移动电源、手机、电脑。

上拉电阻Pull-up resistor (Rp) +下拉电阻Pull-down resistor (Rd) ,通过Rp-Rd路径确定电缆连接及其方向,以及传达有关源电流能力的信息。对插头来说,正常情况下只有一个CC,通过检测CC引脚上的电压,连接线上的电压会低于未连接线上的电压,以此就可以判断连接的方向。如果是可供电的USB cable(Powered cable,E-Marker芯片),一个用做CC,另一个用作Vconn,给电缆芯片内部供电,则需要注意下拉电阻Ra,由于Ra不同于Rd,因此DFP仍能够通过检查DFP CC1和CC2引脚上的电压来确定电缆的方向。对于插座来说则有CC1/CC2两个通道。

设备连接与分开检测:DFP需要检测到CC管脚上有某个电压时,判断UFP设备已插入或拔出,来提供和管理VBUS。当没有UFP设备插入时,必须关闭VBUS。因此所有的DFP设备需要CC逻辑检测与控制芯片以及VBUS开关电路。

标准下拉电阻为Rd=5.1k,上拉电阻Rp不确定。USB Type-C靠Rp的不同,从而在 CC pin检测到的电压就不一样,来控制DFP供电模式。

DFP Perspective

CC1 CC2 State Postion
Open Open Nothing Attched,没有连接的端口 N/A
Rd Open UFP attached,连接的方向由CC为Rd决定,通过VBUS供电而非VCONN
Open Rd
Open Ra Powered Cable/No UFP attached,检测Open状态等待UFP attached
Ra Open
Rd Ra Powered Cable/UFP attached,通过VCONN(插座)和VBUS进行供电
Ra Rd
Rd Rd Debug Accessory Mode attached 调试附件模式 N/A
Ra Ra Audio Adapter Accessory Mode attached 音频适配器模式 N/A

USB 主机和配件概览,是否支持 USB 主机和配件模式最终取决于设备的硬件。

USB OTG

NMOS or PMOS的功能介绍
  N-MOS,当VGS大于某个值会导通 ,若为导通的状态下,如果通路上有大电阻则电流接近0,实际电位则为低,P-MOS高端驱动,当VGS小于某个值以上,则会导通。高通4290上USB OTG的功能主要是基于PMI632 CC1_ID(OTG mode enable or CC1 pin for the USB Type-C connector (user programmable),若USB功能需要转为Host,与此同时Data Role以及Power Role的角色也就需要转变。

if (chg->typec_port) {
	typec_partner_register(chg);
	typec_set_data_role(chg->typec_port,TYPEC_HOST);   //Data  Role ↑↑↑
	typec_set_pwr_role(chg->typec_port, TYPEC_SOURCE); //Power Role ↑↑↑
	vote(chg->usb_icl_votable, USB_PSY_VOTER, true, chg->dcp_icl_ua);
	vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, false,0);
	power_supply_changed(chg->usb_psy);
}

二、MicroB

Android终端一般接口都是TypeC,MicroB 一般为标准的USB接口:VBUS、USB_D+、USB_D-、USB_ID、GND

标签:USB,VBUS,Driver,TypeC,Rd,CC,Qcom,Role,Android
From: https://www.cnblogs.com/linhaostudy/p/18348038

相关文章

  • Android 是如何进行内存管理的
    目录1.垃圾回收(GarbageCollection)2.内存分配3.内存泄漏检测4.内存优化5.内存抖动(MemoryChurn)6.内存警告(MemoryWarning)7.内存分页(MemoryPaging)8.内存分段(MemorySegmentation)9.内存压缩(MemoryCompaction)10.内存分区(MemoryPartitionin......
  • Android Qcom USB Driver学习(零)
    该系列文章总目录链接与各部分简介:AndroidQcomUSBDriver学习(零)文章标题文章链接文章简介AndroidQcomUSBDriver学习(零)https://blog.csdn.net/qq_40405527/article/details/125460598本章主要学习博客各个标题的链接与简介AndroidQcomUSBDriver学习(......
  • Android开发基础06-Android项目结构
    详细介绍Android项目结构Android开发过程中,高效、清晰的项目结构是成功的关键。理解并合理组织项目结构,有助于提高代码的可维护性和团队协作的效率。目录概览一个典型的Android项目目录结构如下:MyApplication/├──app/│├──build/│├──libs/│├......
  • Java计算机毕业设计基于Android的公交线路状态查询系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速,公共交通系统成为了城市居民日常出行不可或缺的一部分。然而,传统的公交线路查询方式往往依赖于纸质地图、公交站牌或电话查询,这......
  • Android开发基础04-Java 和 Kotlin
    引言Java和Kotlin是两种主要用于Android开发的编程语言。理解它们的基本概念、特点、优缺点及常见用法,对Android开发者来说非常重要。1.Java基本概念Java是一种面向对象、跨平台的编程语言,于1995年由SunMicrosystems(现为Oracle)发布。它的设计理念是“WriteOnce,Ru......
  • Android开发基础02-零基础学习Android指南
    学习路线1.理解Android开发基础1.1理解Android平台架构先从高层次上了解Android操作系统的架构,包括应用层、应用框架层、库和Android运行时、Linux内核。了解这些层次及其作用,会帮你更好地理解Android的工作原理。1.2学习Java乐Kotlin语言Java和Kotlin......
  • android源码编译
    搭建编译环境Ubuntu12.04更新源debhttp://old-releases.ubuntu.com/ubuntuprecisemainuniverserestrictedmultiversedebhttp://old-releases.ubuntu.com/ubuntuprecise-securityuniversemainmultiverserestricteddebhttp://old-releases.ubuntu.com/ubuntupre......
  • 记一次 Android 自定义相机拍照奔溃bug事件
    最近在开发一个美颜的相机功能,需要自定义抓取相机回调的数,生成照片并保存到相册,需要自定义保存照片。相机开始使用时没有任何问题,测试拍照几次后突然奔溃,跟踪代码日志发现是图片保存失败,同样的代码,同样的逻辑,正常使用很多次以后才奔溃报错,根据日志找到报错的位置,ContentValue......
  • DriverManager.getConnection的底层如何实现(非机器级别)
    前言DriverManager.getConnection的目标是获得一个Connection,而Connection的关键部分在于QueryExecutor顺序DriverManager的getConnection的实现方法,实际上是对其存储的每个"Driver"(实际并非直接存储Driver类型引用)尝试执行Driver.connect(url,info);Driver.connect(url,info)......
  • Windows 和 MacOS 上安装配置ADB(安卓调试桥)_android adb工具安装 mac
    一、Android调试桥(ADB)Android调试桥(ADB)是一款多功能命令行工具,它让你能够更便捷地访问和管理Android设备。使用ADB命令,你可以轻松执行以下操作网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!在设备上安装、复制和删除文件;安装应用程序;录制设备屏幕或截......