1. USB发展
1996年,由英特尔、微软、IBM等多家公司联合设计的usb标准问世,键盘、鼠标、智能手机以及打印机等大多使用usb标准来实现供电和数据传输。
Universal Serial Bus是连接外部装置的一个串口总线标准,目前USB IF推出的USB各个版本的传输特性如下:
1.1 USB物理接口
USB Type C不仅支持正反插,还支持数据传输、视频输出,更有PD快充,通过USB PD标准,输出功率最高可达100W(20V/5A)。
1.2 Thunderbolt
Thunderbolt是Intel在2009年所研发的一种高速I/O接口,主要目的是希望能替代并统一计算机上数量繁多的各种接口。
雷电协议从雷电三开始使用Type C接口,在支持usb协议的基础上增加了对雷电协议的支持,雷电协议的传输速率极快,可以达到40Gbps。
它不仅可以拓展出相当多的接口,还能连接高速固态硬盘、高分辨率的显示器,甚至是外接一张显卡。
不过雷电是英特尔牵头的协议,需要收取授权费用。支持雷电协议的设备价格比同类USB设备就要贵很多,好在英特尔将雷电的相关技术贡献给了USB标准,使得usb4开始拥有与雷电几乎一致的特性。
支援带宽
虽然两者的最高支持带宽都是40Gbps,但USB4有20Gbps和40GbpS,因此最低规格只需要20Gbps,Thunderbolt 4则只有40Gbps一种规格。
充电功率
从充电功率上来看,虽然最高都支持240W,但USB4的最低标准降至7.5W,而Thunderbolt 4则在15W。
支持显示器
USB4支持一个显示器,但没有最低支持分辨率的要求;Thunderbolt 4则必须能够支持两个4K 60Hz屏幕或一个8K 30Hz屏幕。
1.3 USB PD
由于越来越多的电子设备使用usb线缆供电,各家也纷纷基于usb标准之上研发自己的快速充电方案。
比如高通的qc,联发科的pe、oppo的vooc、华为的super charge。
在最新的pd3.0规范中,将市面上大多数的快充协议进行收编和规范,包含在了pd协议中。
目前出厂的新设备几乎全部支持使用pd协议充电,只需要搭配合适瓦数的pd充电器和支持pd的线材就可以实现快充,不用考虑设备是否兼容的问题。
2. USB拓扑
USB以差分信号进行数据传输。USB2.0规定最多为6层。一个USB主控制器可以由集线器负责端口扩展,连接更多的设备。
理论上,一个USB主控制器最多可接127个设备,这是因为协议规定每个USB设备具有一个7bt的地址(取值范围为0~127,而地址0是保留给未初始化的设备使用的)。
结构框图,USB包含USB控制器+USB PHY两个部分。
3. USB Controller
USB Controller部分主要实现USB的协议和控制。内部逻辑主要有MAC层、CSR层和FIFO控制层,还有其他低功耗管理之类层次。
MAC层实现按USB协议进行数据包打包和解包,并把数据按照UTMI总线格式发送给PHY(USB3.0为PIPE接口)。
CSR层进行寄存器控制,软件对USB芯片的控制就是通过CSR寄存器,这部分和CPU进行交互访问,主要作为Slave通过AXI或者AHB进行交互。
FIFO控制层主要是和DDR进行数据交互,控制USB从DDR搬运数据的通道,主要作为Master通过AXI/AHB进行交互。
4. USB PHY
USB PHY部分功能主要实现并转串的功能,把UTMI或者PIPE口的并行数据转换成串行数据,再通过差分数据线输出到芯片外部。
USB PHY和USB Controller之间,一般可以使用UTMI和ULPl两种interface进行连接。
UTMI
USB Transceiver Macrocell Interface。最初其研发目的是为了减少开发商的工作量,缩短产品的设计周期从而降低风险。
UTMl模块主要负责USB协议中最底层的物理电信号转换。UTMl接口可与SIE整合设计成一专用ASlC芯片,也可独立作为PHY的收发器芯片。
UTMl接口pin脚多,一般内置芯片内部。大部分ASIC芯片内置USB PHY基本都是使用UTMI接口,部分专用USB PHY芯片也会使用UTMI接口,比如USB3500等。
目前集成USB1.1全速接口MCU大多数将收发器一并设计了进去,但到了USB2.0接口,因为传输速度提升到了480Mbps,可能是因为设计难度,或者IP授权成本的增加,大部分MCU厂家选择了分立方案。
MCU只集成USB2.0控制器,通过外加PHY(比如USB3320, USB3300, CH132)收发器芯片来实现通讯接口,比如ST的F407,也有一些USB接口专注度比较高的厂家将USB2.0PHY内置,比如Cypress的68013,沁恒的CH32V307等
STM32H7系列,既有在内部集成高速PHY,又可以通过ULPI接口支持外部扩展PHY。
这种策略使得集成在IC中的UTMI+PHY发生任何问题时,在电路板层面上添加外部ULPI PHY。
5. USB OTG
USB最初的设计是为了提供一种便捷的接口连接PC和外设,但是伴随着设备功能越来越多样化的发展,很多不是传统意义上的PC设备,需要作为主机直接连接其他外围设备使用,或者作为device连接PC使用。OTG(On The Go)应运而生。
若是ID管脚接地,则该设备为A设备;若ID管脚悬空,则该设备是B设备,其中A设备是initial host,B设备是initial peripheral。即系统刚启动时,A设备是主设备,B设备是从设备。
在系统运行的过程中,USB设备的主从角色可能会变化,但是A设备B设备的名称不会变化。
也就是说,在系统运行过程中,A设备有可能从主设备变成从设备,但是A设备仍然叫做A设备;B设备类似。
另外,A设备始终是供电设备,而与A设备扮演的角色无关。即使A设备变成了从设备,仍然由A设备供电。
5.1 ADP
Attach Detection Protocol(ADP) is a protocol that allows a local device to detect when a remote device has been attached or detached.
The device doing ADP probing can be either an OTG A-device, OTG B-device,EH or SRP-capable peripheral-only B-device.
The remote device can be any USB device.
5.2 SRP
协议允许A device(供电)在总线未使用时通过切断Vbus来节省电源消耗,也为B device启动总线活动提供了一种方法。
5.3 HNP
两个OTG设备连接在一起后,A设备默认是USB主机,B设备默认是USB设备。
在支持HNP的条件下,B设备可以通HNP转换为USB主机。而此时A设备就变成 USB设备。相反,A设备可以再次切回USB主机模式。
HNP主要用于两个直接连接的OTG设备之间在无用户修改USB线缆方向的情况下进行USB主机角色切换。
典型的HNP应用是应用程序或者用户在OTG功能的B设备主动发起的。不论A设备是否是USB主机,它始终为USB接口供电(VBUS)。
6. USB高速握手原理
全速设备在其D+线上有一个上拉电阻Rpu。
而低速设备的上拉电阻Rpu在D-上。
设备上的上拉电阻Rpu的阻值是1.5kQ±5%,主机或hub的端口上的下拉电阻Rpd是15kQ±5%。
6.1 全速设备和低速设备识别
当USB主机与全速或者低速设备连接后,因为上拉电阻的存在,D+或D-的电压会上拉到3V左右。
USB主机根据哪根差分线上有上拉来判断接入USB设备的类型,如果D+上有上拉,主机就把USB设备识别为全速设备;如果D-上有上拉,主机就把USB设备识别为低速设备。
6.2 全速设备和高速设备识别
在高速模式下,不管是USB设备还是USB主机,在D+和D-数据线上都要有一个45Ω等效对地电阻。
高速设备在初始连接时,是以全速模式连接到主机的,即高速设备的D+上挂载了上拉电阻,主机检测到全速模式的设备连接后,会对该设备进行复位(RESET)。
工作在全速模式下的USB设备收到复位信号后,会主动发起高速模式握手协议进行速度识别。
如果主机支持高速设备,会和该设备交互完成高速模式握手协议,此时USB主机和USB设备都工作在高速模式下;
如果主机不支持高速设备,握手协议会失败,该设备也不会切换到高速模式,此时USB主机和USB设备都工作在全速模式下。
同样,一个全速设备连接到一个高速主机,由于设备无法发起高速模式握手协议,最终主机和设备都会工作在全速模式下。
USB设备连接到主机后,主机必须在第一时间对USB设备进行复位,复位信号至少持续10ms,整个高速握手协议是在复位过程中完成的,且在复位信号结束之前完成。USB主机和USB设备在复位结束后,都必须确定自己的速度模式。
7. 描述符Descriptor
USB有非常丰富的设备子协议,如CDC/HID/BOT等。USB设备的类型,主机可以通过获取设备描述符、配置描述符、接口描述符和端点描述符来获取细节。
设备描述符
接口描述符
端点描述符
8. 传输类型
USB不论是作为device还是host,底层硬件传输是根据端点传输类型完成的。
由于USB支持四种传输类型,且每种传输类型均有自己的特性。此外,USB所有的协议中关于IN/OUT的描述,均是站在hos的角度而言的。
8.1 Control传输
所有的USB设备均存在一个枚举的过程,即host从设备端获取对应的描述符信息,来确定设备的类型、传输类型,硬件的占用资源情况等等。
枚举过程就是通过控制传输来完成的。
主机会给所有连接的设备分配个确定的地址用于通信,在控制阶段,设备地址固定是0。
除了枚举外,USB2.0的控制传输还可以在以下几个应用场景中使用:
1. 固件升级:控制传输可以用于固件升级,通过发送控制命令和数据,将新的固件加载到设备中。
2.设备配置:一些USB设备需要进行配置参数的设置,例如摄像头的分辨率、音频设备的采样率等,通过USB2.0的控制传输可以发送相关命令和数据进行配置。
3.设备状态查询:通过USB2.0的控制传输可以查询设备的状态信息,例如设备是否连接、设备是否正常工作等,可以用于设备的诊断和监控。
8.2 Bulk传输
批量传输的端点,支持每次传输的最大字节数为512byte,且是可靠传输,协议层会根据host-device的状态进行出错校验和重传。
通过利用USB总线的空闲带宽进行数据传输的,可以在不确定的时间内传输大量数据,适合于数据量大,而对时间和传输速率要求不高的场合。
批量传输时,有数据错误检查机制,如果数据包传输过程出错,则会重新发出数据包。在一个空闲的总线中,批量传输是速度最快的传输类型。
只有全速与高速设备,才支持批量传输。通常打印机、扫描仪、USB硬盘、电子盘等设备都使用批量传输模式。
8.3 Interrupt传输
中断传输一般用于小批量的和非连续的数据传输,主要用于数据量小的数据不连续的但实时性高的场合的一种传输方式,如:人机交互设备(HID)中的 USB鼠标和USB键盘等。
8.4 Isochronous传输
同步传输用在数据量大、对实时性要求高的场合,例如音频设备、视频设备等。
对于音频或者视频设备来说,对数据的100%正确性要求不高,少量数据的错误还是能够容忍的,主要是要保证不能停顿。
所以同步传输是不保证数据100%正确的。当数据错误时,并不进行重传操作。数据是否正确,可以由数据包的CRC校验来确认。至于出错的数据如何处理,由软件决定。
9. Feature验证
在USB Pre-silicon验证初期,设备是否能被识别至关重要,只有识别成功,才能完成后面的数据传输或者协议层级的验证。
识别过程主要着手点在于USB的高速握手,在FPGA上,USB的PHY子板最终是通过UTMI信号连接到平台。
UTMI总共有几十个信号,且因USB高速传输对信号完整性的要求,一般不会特意保留test point对各个信号进行确认。
USB的高速握手过程,在软件设置控制器的速度寄存器和模块初始化后,均是由收发器以及主机硬件完成的。因比如果测量到的握手波形不符合协议标准时,需要重点检查各个信号是否有准确MAP到FPGA。

