Rockchip RK3399 - USB OTG和extcon驱动
目录
----------------------------------------------------------------------------------------------------------------------------
开发板 :NanoPC-T4
开发板
eMMC
:16GB
LPDDR3
:4GB
显示屏 :15.6
英寸HDMI
接口显示屏
u-boot
:2023.04
linux
:6.3
----------------------------------------------------------------------------------------------------------------------------
一、USB OTG
USB
是主从模式的总线,主机称为Host
,丛机称为Device
(设备)。从机与从机之间、主机与主机之间(不包括USB4.0
),不能互联。每次通信都是由主机发起,从机不能主动发起通信,只能被动的应答主机的请求。
USB OTG
(On-The-Go
)是一个扩展的USB
标准,允许USB
设备之间直接进行通信,而无需通过主机。这意味着设备可以在作为主机和从机之间切换角色,实现了更灵活的连接方式。例如,两台智能手机之间可以通过USB OTG
直接连接并共享文件,而无需依赖计算机作为中介。
1.1 概述
对于标准USB2.0
来说,一共有4根引脚,一对差分线D+
/D-
,还有地线GND
、电源线VBUS
。
对于标准USB3.0
来说:一共有9根引脚,为了兼容USB2.0
除了拥有USB2.0
的一对差分线D+
/D-
、以及地线GND
、电源线VBUS
外,还会拥有两对差分线(SSTX+
和SSTX-
及SSRX+
和SSRX-
)和一根屏蔽地线;
USB2.0 OTG
在标准USB2.0
基础上增加了一根USB ID
线,使用USB2.0 OTG
的设备是可以通过ID
脚位来判断其做为主机或是从机用途;
引脚 | 名称 | 线缆颜色 | 描述 |
---|---|---|---|
1 | VBUS | 红色 | +5V供电 |
2 | D- | 白色 | 差分数据- |
3 | D+ | 绿色 | 差分数据+ |
4 | ID | N/A | ID引脚为低电平时,则作为主机,此时VBUS需要为连接的USB设备供电 ID引脚悬空(高电平),则作为从机,此时VSBUS由连接的USB主机供电 |
5 | GND | 黑色 | 地 |
对于支持OTG
功能的USB
控制器,我们称之为USB OTG
控制器。USB OTG
控制器的工作模式有三种(通过程序控制):OTG
、Device
、Host
;
OTG
:同时支持主机/从机,工作在这种模式时,我们可以通过ID
和VBUS
两个脚的状态来识别是否接入了USB
主机或USB
设备;Device
:作为USB
从机使用,由连接的USB
主机提供VBUS
电源;Host
:作为USB
主机使用,可以外接USB
设备,比如鼠标,键盘,并为所连接的USB
设备提供VBUS
电源;
USB
常见的接口有USB Type-A/B/C
三种,其中Type-A/B
又有标准A/B
、Mini-A/B
和Micro-A/B
三种。无论是 Type-A
、Type-B
还是Type-C
接口,只要设备支持USB OTG
功能,就可以在两个设备之间实现直接连接和数据传输。实物图如下图所示:

接下来我们介绍一下这三种不同的接口是如何识别接入的是USB
主机还是USB
设备。
1.2 Type-A/B
接口
1.2.1 Type-A
Type-A
接口主要包括:标准Type-A
、Mini-A
、Micro-A
三种,每种接口有多少引脚呢?
接口 | 协议 | 引脚 |
---|---|---|
Type-A(标准) | USB1.0/2.0 | VBUS、D+/D-、GND |
Type-A(标准) | USB3.0 | VBUS、D+/D-、GND 两对差分线(SSTX+和SSTX以及SSRX+和SSRX-)和一根屏蔽地线 |
Mini-A | USB1.0/2.0 | VBUS、D+/D-、GND、ID |
Mini-A | USB3.0 | 未定义 |
Micro-A | USB1.0/2.0 | VBUS、D+/D-、GND、ID |
Micro-A | USB3.0 | 未定义 |
1.2.1 Type-B
Type-B
接口主要包括:标准Type-B
、Mini-B
、Micro-B
三种,每种接口有多少引脚呢?
接口 | 协议 | 引脚 |
---|---|---|
Type-B(标准) | USB1.0/2.0 | VBUS、D+/D-、GND |
Type-B(标准) | USB3.0 | VBUS、D+/D-、GND 两对差分线(SSTX+和SSTX以及SSRX+和SSRX-)和一根屏蔽地线 |
Mini-B | USB1.0/2.0 | VBUS、D+/D-、GND、ID |
Mini-B | USB3.0 | VBUS、D+/D-、GND、ID 两对差分线(SSTX+和SSTX以及SSRX+和SSRX-)和一根屏蔽地线 |
Micro-B | USB1.0/2.0 | VBUS、D+/D-、GND、ID |
Micro-B | USB3.0 | VBUS、D+/D-、GND、ID 两对差分线(SSTX+和SSTX以及SSRX+和SSRX-)和一根屏蔽地线 |
这里不做过多展开介绍,更多可以参考:《USB2.0、USB3.0和typec
引脚定义》。
1.2.3 角色识别
对于有ID
引脚的USB
接口,可通过VBUS
和ID
两个脚的状态来识别是否接入了USB
主机或USB
设备;
(1) 当OTG
设备(SoC USB OTG
端口)插入USB
主机(比如PC
的Type-A
),USB
主机会给USB
从机VUSB
供电,VBUS_ON
引脚检测到上升沿,触发中断。OTG
设备会对ID
引脚进行状态检测,当检测到高电平时,OTG
设备切换成从机模式;

切换成从机模式后,USB DP
(高速设备为DP
,低速设备为DM
)上产生一个高电平脉冲,此时PC
识别到一个USB
设备插入,windows
会提示用户。
(2) 当USB
从设备(OTG
连接线+U
盘,micro USB
的第4脚是直接连到GND
的)插入OTG
设备(SoC USB OTG
端口)时。SoC USB OTG
端口的ID
引脚检测到下降沿,OTG
设备切换成主机模式。
切换成主机模式后,主设备通常会将VBUS_DRV
拉高,然后通过限流电路给从设备供电,这时候USB DP
(高速设备为DP
,低速设备为DM
)上可以测试到高电平脉冲。

于是软件可以通过主动读取这两个脚的电平或者异步响应这两个脚的中断来获知状态的变化。从而控制USB OTG
控制器工作在主机/从机模式。
需要注意的是:上图绘制只有5根接线,如果是USB3.0
通信协议,还会有两对差分线(SSTX+和SSTX以及SSRX+和SSRX-)和一根屏蔽地线。
1.3 Type-C
1.3.1 介绍
Type-C
接口又叫USB-C
接口。Type-C
接口尺寸为8.3×2.5毫米,小于当前PC
的Type-A
接口,但略大于Micro-B
接口。Type-C
相对于其它接口的优势:
- 可选集成
DisplayPort
、HDMI
,用于视频传输; - 通过
USB Power Delivery
技术,可用于3C
产品(如笔记本电脑、智能手机)的充电; - 它无需区分正反;
Type-C
规格所定义的插座及缆线可让使用者在插入其产品与缆线时,毋须考虑连接器的位置(正反皆可)。缆线两端皆可使用Type-C
插头,如有需要亦可在缆线一端使用旧型Type-A/B
插头。
为了满足更高频宽的应用,Type-C
规格在连接器中加入了多组USB3.0TX/RX
差分线。
1.3.2 引脚
(1) Type-C
母头

(2)Type-C
公头

Type-C
接口比Type-A/B
接口的引脚多多了,标准的Type-C
接口有24个引脚,共有有4对TX
/RX
差分线,2对USBD+
/D-
,一对SBU
,2个CC
,另外还有4个VBUS
和4个地线;
针 | 名 | 描述 | 针 | 名 | 描述 |
---|---|---|---|---|---|
A1 | GND | 接地 | B12 | GND | 接地 |
A2 | SSTXp1 | SuperSpeed差分信号#1,TX,正 | B11 | SSRXp1 | SuperSpeed差分信号#1,RX,正 |
A3 | SSTXn1 | SuperSpeed差分信号#1,TX,负 | B10 | SSRXn1 | SuperSpeed差分信号#1,RX,负 |
A4 | VBUS | 总线电源 | B9 | VBUS | 总线电源 |
A5 | CC1 | Configuration channel | B8 | SBU2 | Sideband use (SBU) |
A6 | Dp1 | USB 2.0差分信号,position 1,正 | B7 | Dn2 | USB 2.0差分信号,position 2,负 |
A7 | Dn1 | USB 2.0差分信号,position 1,负 | B6 | Dp2 | USB 2.0差分信号,position 2,正 |
A8 | SBU1 | Sideband use (SBU) | B5 | CC2 | Configuration channel |
A9 | VBUS | 总线电源 | B4 | VBUS | 总线电源 |
A10 | SSRXn2 | SuperSpeed差分信号#2,RX,负 | B3 | SSTXn2 | SuperSpeed差分信号#2,TX,负 |
A11 | SSRXp2 | SuperSpeed差分信号#2,RX,正 | B2 | SSTXp2 | SuperSpeed差分信号#2,TX,正 |
A12 | GND | 接地 | B1 | GND | 接地 |
引脚功能描述如下:
功能 | 引脚 | 描述 |
---|---|---|
USB3 | A2,A3,B2,B3,A10,A11,B10,B11 | USB3数据传输 |
USB2.0 | A6/B6(D+),A7/B7(D-) | USB2.0数据传输 |
配置 | CC1,CC2 | 配置功能接口,插拔检测,供电协议信息传输,VCONN功能 |
辅助信号 | SBU1,SBU2 | 辅助信号 |
供电 | VBUS,VCONN,GND | 供电 |
Type-C
插座中明显消失的是之前Type-A
和Type-B
接头的ID
引脚。在Type-C
中,使用配置通道 (CC
) 引脚这种不同的处理方式来决定设备是作为主机,还是作为外设。CC
引脚所执行的功能与ID
引脚之前执行的功能一样;它们表明了设备是作为主机、设备,还是兼具二者的功能。接下来我们重点介绍CC
引脚的功能。
1.3.3 DFP
/UFP
/DRP
在USB
规范中为主机、从机定义了两个专业术语:
DFP
(Downstream Facing Port
):Source
,下行端口,可以理解为一个主机,DFP
作为source
给VBUS
和VCCON
供电的,简单理解为一个提供电源的设备,如:电源适配器;UFP
(Upstream Facing Port
):Sink
,上行端口,可以理解为从机,UFP
可以理解为受电端口,DFP
为供电端口,UFP
从VBUS
中取电,并可提供数据。典型设备如:U
盘、移动硬盘;
在USB
规范中如果一个设备的接口是DFP
,则其必然是主机或者说具有主机的功能,一个接口是UFP
,则其必然是从设备或者说其具有从设备的功能。
而在Type-C
规范中,对原有的两种角色进行了扩充和重定义等,在Type-C
规范中定义了DRP
(Dual Role port
),DRP
可以做为DFP
也可以做为UFP
,可以供电,也可以受电;典型设备是:笔记本电脑、充电宝;
- 当
DPR
接到UFP
装置,DRP
会转换为DFP
; - 当
DRP
接到DFP
装置,DRP
会转换为UFP
; - 当两个
DRP
装置接在一起,两个装置会Random
地,一方为DFP
,一方为UFP
;
充电宝为UFP
(Sink
)的应用:电源适配器给充电宝充电。
充电宝为DFP
(Source
)的应用:充电宝给手机或其他设备充电。
1.3.4 角色识别
Type-C
的接口双方角色的识别其实是通过Type-C
接口中的两根CC
线进行检测设置的。如下图所示:

注:这里的线缆器件是指有eMark
芯片的线缆会用到VCONN
供电,当一个CC
确认方向后Source
端的另一个CC
会切换成VCONN
为eMark
供电,带有eMark
芯片的线缆能通过CC
与设备进行通信,反馈此线缆的温度,承受电流能信息,对于大功率充电的安全性还是有很大帮助的。
上图中左侧为DFP
,右侧为UFP
:
亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。
日期 | 姓名 | 金额 |
---|---|---|
2023-09-06 | *源 | 19 |
2023-09-11 | *朝科 | 88 |
2023-09-21 | *号 | 5 |
2023-09-16 | *真 | 60 |
2023-10-26 | *通 | 9.9 |
2023-11-04 | *慎 | 0.66 |
2023-11-24 | *恩 | 0.01 |
2023-12-30 | I*B | 1 |
2024-01-28 | *兴 | 20 |
2024-02-01 | QYing | 20 |
2024-02-11 | *督 | 6 |
2024-02-18 | 一*x | 1 |
2024-02-20 | c*l | 18.88 |
2024-01-01 | *I | 5 |
2024-04-08 | *程 | 150 |
2024-04-18 | *超 | 20 |
2024-04-26 | .*V | 30 |
2024-05-08 | D*W | 5 |
2024-05-29 | *辉 | 20 |
2024-05-30 | *雄 | 10 |
2024-06-08 | *: | 10 |
2024-06-23 | 小狮子 | 666 |
2024-06-28 | *s | 6.66 |
2024-06-29 | *炼 | 1 |
2024-06-30 | *! | 1 |
2024-07-08 | *方 | 20 |
2024-07-18 | A*1 | 6.66 |
2024-07-31 | *北 | 12 |
2024-08-13 | *基 | 1 |
2024-08-23 | n*s | 2 |
2024-09-02 | *源 | 50 |
2024-09-04 | *J | 2 |
2024-09-06 | *强 | 8.8 |
2024-09-09 | *波 | 1 |
2024-09-10 | *口 | 1 |
2024-09-10 | *波 | 1 |
2024-09-12 | *波 | 10 |
2024-09-18 | *明 | 1.68 |
2024-09-26 | B*h | 10 |
2024-09-30 | 岁 | 10 |
2024-10-02 | M*i | 1 |
2024-10-14 | *朋 | 10 |
2024-10-22 | *海 | 10 |
2024-10-23 | *南 | 10 |
2024-10-26 | *节 | 6.66 |
2024-10-27 | *o | 5 |
2024-10-28 | W*F | 6.66 |
2024-10-29 | R*n | 6.66 |
2024-11-02 | *球 | 6 |
2024-11-021 | *鑫 | 6.66 |
2024-11-25 | *沙 | 5 |
2024-11-29 | C*n | 2.88 |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了