----------------------------------------------------------------------------------------------------------------------------
开发板 :NanoPC-T4
开发板eMMC
:16GB
LPDDR3
:4GB
显示屏 :15.6
英寸HDMI
接口显示屏u-boot
:2023.04
linux
:6.3
----------------------------------------------------------------------------------------------------------------------------
一、USB
基础知识回顾
在linux
驱动移植-usb
驱动基础我们对USB
总线进行了简单的介绍,其中包括:
USB
协议版本介绍:USB1.0
、USB1.1
、USB2.0
、USB3.0
、USB3.1
、USB3.2
、USB4.0
;USB
接口:伴随着USB
版本迭代,USB
产生了多种连接器类型规范,比如Type-A
、Type-B
、Mini-A
、Mini-B
、Micro-A
、Micro-B
、Type-C
等。
1.1 USB
协议版本
从USB
协议诞生至今,出现了多个USB
协议版本,如USB1.0
、USB1.1
、USB2.0
、USB3.0
、USB3.1
、USB3.2
。最新的是USB4.0
协议,可直连CPU
的PCIe
总线,最大速度可达40Gbps
,使用Type-C
接口,兼容DP
视频协议、PD
快充协议等,最高支持100W
供电。
USB协议版本 | 速率称号 | 最大速率 | 电源 | 类型 | 推出时间 |
---|---|---|---|---|---|
USB1.0 | 低速(Low-Speed) | 1.5Mbps | 5V/500mA | 半双工 | 1996年1月 |
USB1.1 | 全速(Full-Speed) | 12Mbps | 5V/500mA | 半双工 | 1998年9月 |
USB2.0 | 高速(High-Speed) | 480Mbps | 5V/500mA | 半双工 | 2000年4月 |
USB3.0(USB3.2 Gen1) | 超高速(SuperSpeed USB) | 5Gbps | 5V/900mA | 全双工(两对数据线和一根屏蔽地线,以及2.0的四根线) | 2008年月11月 |
USB3.1(USB3.2 Gen2) | SuperSpeed USB 10Gbps | 10Gbps | 20V/5A | 全双工(两对数据线和一根屏蔽地线) | 2013年月7月 |
USB3.2(USB3.2 Gen2×2) | SuperSpeed USB 20Gps | 20Gbps | 20V/5A | dual-lane(2线,每条lane都是一对差分线) | 2017年月9月 |
USB4.0(Gen3×2) | ---- | 40Gbps | 100瓦 | single-lane或dual-lane,兼容Thunderbolt3 | 2019年月8月 |
为了支持更高的传输速度,正常而言,越高版本的USB
协议,定义的传输信号线会越多。
USB3.0
包括USB2.0
的引脚,USB3.1
和3.0
引脚相同;
-
USB2.0
:一共有4根引脚,一对差分线D+
/D-
,还有地线GND
、电源线VBUS
; -
USB3.0
:一共有9根引脚,为了兼容USB2.0
除了拥有USB2.0
的一对差分线D+
/D-
、以及地线GND
、电源线VBUS
外,还会拥有两对差分线(SSTX+
和SSTX-
及SSRX+
和SSRX-
)和一根屏蔽地线;
USB3.0
和USB2.0
使用不同的差分线传输数据,两者互不干扰,可同时工作。USB3.0
线缆中保留了USB2.0
的数据传输通道,实现了对USB2.0
的兼容,另外加了5根线来进行全双工的高速传输。
USB
是主从模式的总线,主机称为Host
,丛机称为Device
(设备)。从机与从机之间、主机与主机之间(不包括USB4.0
),不能互联。每次通信都是由主机发起,从机不能主动发起通信,只能被动的应答主机的请求。
为了增加灵活性,又出现了USB OTG
(On The Go
),USB OTG
支持主从切换,同一个设备,在不同场合下,可以在主机和从机之间切换。
USB2.0 OTG
线中增加了一根USB ID
线,当USB ID
线上拉时,处于从机模式,当USB ID
线接地时,处于主机模式。更多相关内容参考:《Rockchip RK3399 - USB OTG
和extcon
驱动 》。
1.2 USB
框图
这里我们需要补充一些USB
相关的硬件知识,因为RK3399
驱动编写中会涉及到。
USB
芯片内部实现的功能就是接受软件的控制,进而从内存搬运数据并按照USB
协议进行数据打包,并串转换后输出到芯片外部。或者从芯片外部接收差分数据信号,串并转换后进行数据打包并写到内存中。
USB
芯片一般分为Controller
和PHY
,以Controller
和 PHY
都被封装到SoC
为例,如图:
图中绘制的是USB 2.0
芯片,其中:
VBUS
:电压线,主机利用VBUS
给USB
设备提供工作电压;D+
: 正向传送数据 数据线;D-
: 反向传送数据 数据线;GND
:地线;
一般来说如果芯片的USB PHY
封装在芯片内,基本采用UTMI+
的接口。不封装到芯片内的一般采用ULPI
接口,这样可以降低pin
的数量。
1.2.1 Controller
控制器部分(Controller
):主要实现USB
协议和控制,内部逻辑主要由MAC
层、CSR
层、FIFO
层,还有其他低功耗管理之类层次;
MAC
实现按USB
协议进行数据包打包和解包,并把数据按照UTMI
/ULPI
总线格式发送给PHY
;CSR
层进行寄存器控制,软件对USB
芯片的控制就是通过CSR
寄存器,这部分和