USB主机控制器驱动的整体结构?

前面写了一些SPI/I2C/RS-485之类的文章,有朋友留言希望能分享一些USB方面的梳理总结,今天就从系统标准层面先来梳理一下。看看有没有朋友喜欢。先从系统层面来梳理。个人学习,习惯于先从整体上摸个大概,然后再对感兴趣的细节逐渐深入。

USB是比较复杂的协议栈,如果发现文章中有错误,请帮忙指正。

注:本文主要参考USB2.0规范第4章,将标准中个人认为比较重要的一些点尽量条理清晰的总结出来。我感觉很多朋友可能对于阅读英文标准有点轻度抗拒,所以整理此文这也是一个起因,希望对朋友们有所帮助。

总线拓扑

说到总线拓扑,这张图大家一定都见过:

USB标准上说USB总线拓扑是一种分层星形结构,这张拓扑图延申出来的一些要点:

所谓星型是针对Hub而言的,一个Hub下面可以挂Hub或者设备,最顶层就是USB主机控制器USB主机控制器一般都伴随有一个根集线器Root Hub。Hub级联最多5层总线上理论最大允许连接127个设备。Hub级联遵循向下兼容,USB2.0主机或者高速Hub可以连接USB1.1Hub。一个USB分层星型结构有且仅有一个USB主机控制器线缆最长不超过5米这个最大7层星形结构,代表的是一条USB总线,一个USB分层星型结构有且仅有一个USB主机控制器,但并不是说一台计算机就只有一个USB总线,比如我的计算机内部就是2个USB主控制器+Root Hub,从Windows设备管理器可以看到:

7层拓扑图中的第2层只画了一个Hub,并不意味真正的第2层就只能有一个Hub,但这个图无法显示出更为详细的总线连接关系,用USBTrace软件来看看:

第1条总线有4个端口,第2条总线的根集线器具有18个端口,其中8、9、10为计算机内部的USB设备占用了。我这台笔记本对外有两个USB接口,通过分别将U盘插入这两个端口,再利用USBTrace探测可以推断出这两个端口都属于第2条总线的Port

3以及Port 4:

那么Hub长什么样呢?比如下面是一个7口的USB Hub示意图,来源于USB2.0标准:

物理接口

电气概览

USB 通过四线电缆传输信号和电源。信令发生在每个点对点网段上的两条线上。

VBUS/GND:供电D+/D-:USB差分信号线。具有三种数据速率:

高速模式 high-speed:480 Mb/s,常缩写为HS模式全速模式 full-speed:12 Mb/s,常缩写为FS模式低速模式 low-speed:1.5 Mb/s,常缩写为LS模式至于数据编码模式,这里先不管它。

机械概览

机械部分主要定义USB采用什么尺寸的接插件,线缆的颜色定义、线号。线缆的抗拉强度等。主要从以下几个方面去标准化:

主要连接器类型规范,主要分A、B系列。定义了公头、母头。

线缆规范。高速/全速电缆由信号双绞线、VBUS、GND 和整体屏蔽组成。当高速/全速电缆与低速设备一起使用时,电缆必须满足所有低速设备要求。低速设备可以不使用双绞线。双绞线可有效抵抗***模噪声。连接器机械尺寸及材料要求。

A/B系列插座规范A/B系列插头规范电缆尺寸材料规范,这里就不罗列了,知道在哪里查就可以了。电气、机械和环境合规性标准接地规范,屏蔽层一定要焊接在插头的外壳接地点。插座PCB尺寸规范。所以对于有绘制接插件需要的,可以参考6.9节的尺寸。Logo位置线芯颜色规范。USB Logo尺寸规范。协议概述

USB采用主从通讯模式,是一种轮询总线。所有数据传输都由主机控制器发起。这是USB标准中最难啃的部分,这里先不总结。

健壮设计

标准关于协议健壮性,又称鲁棒性,做了这几个方面的设计:

从信号完整性角度:使用差分驱动器、差分接收器和以及对信号线缆的屏蔽处理。差分收发策略主要在抵抗***模干扰方面效果显著,而屏蔽层则有两方面的作用:其一,有效降低USB线通过无线电波对外界干扰;其二、能有效隔断外界无线干扰对USB信号线、电源线的干扰。CRC报文校验。报文中数据如果出错,可以检测出来,可以做相应的处置。热插拔检测及对相应硬件设备的系统配置管理。这个设计有助于提升用户体验,用户随用随插,而无需关机插拔。利用对数据丢失或数据损坏超时检测实现通讯自恢复机制,以增强协议的健壮性。对流数据的进行流量控制以确保同步以及底层收发硬件缓冲区管理。数据管道和控制管道分离