今天我们就通过4~5篇文章介绍FPGA与USB3.0通信的相关知识,其实是《FPGA和外围接口(继续更新)基于FPGA的网口通信设计》的后续。PCIe也在准备中。
完成后,也是《Xilinx 7系列FPGA入门级图像处理-完整版V1》初级和中级章节的开始。图像处理部分也将由摄像头前端算法(主ISP)和后端算法组成。最后,应形成初级工业UVC摄像机和IPC。平台还没选好(不知道有没有赞助,哈哈),算法基本验证完毕。
USB3.0简介
总线、接口和协议
首先,这里有几个概念,应该是大家都通用的:
USB3.0协议
USB3.0接口
USB3.0总线
是不是很蠢?
其实了解了这些概念,就可以针对USB的具体协议,不需要看整个复杂冗长的协议来选择自己的立场。
总线是一组传输通道,是由各种逻辑器件组成的传输数据的通道,一般由数据线、地址线、控制线等组成。接口是一种连接标准,通常称为物理接口。协议是数据传输的规则。
一般来说,USB可以是USB信号、USB接口、USB总线或USB协议。它如此复杂的主要原因是每个人对概念的理解不同。举个简单的例子,USB总线指的是一组传输通道,而USB接口是一个连接标准。两者的关系是所有带USB接口的设备都要通过USB总线进行通信,而USB总线上的设备并不都是USB接口。比如集成的USB声卡是USB总线,不是USB接口。这里,USB总线提供了一个通道,在这个通道上可以有不同的接口设备或信号(USB信号或Audio信号)满足这个通道的要求。
35306478-3b8a-11ec-82a9-dac502259ad0.png
USB板载声卡
对于USB声卡,安装外置声卡时使用USB接口,板载声卡始终使用没有USB接口的USB总线(物理层可以满足要求)。
所以总结一下:
即协议的整体框架,定义了接口设备、器件、信号、总线、通道之间要满足的关系,即要实现信号的传输,所有这些成员必须协同工作,满足协议所要求的各种必要条件。
对于USB,下图可以说明三者之间的关系:
3565e3be-3b8a-11ec-82a9-dac502259ad0.png
通过以上分析,后面将简要介绍USB3.0中规定的几个重要方面。
USB3.0的分层机制
大家都知道PCIe有三层结构(事务层、数据链路层和物理层)和TCP/IP五层结构(物理层、数据链路层、网络层、传输层和应用层)。为什么复杂的协议有层次结构?
这个起源主要来自于OSI五层参考模型(比如七层OSI参考模型)
即使是简单的RS232也遵循上面的层次结构,但是RS232只指定了物理层,所以现实中很少有人使用层次结构进行分析。
USB3.0的分层机制实际上类似于PCIe(协议层、链路层和物理层)。从某种意义上说,USB3.0可以看作是PCIe的变种。下图是分层通信结构:
36304a0a-3b8a-11ec-82a9-dac502259ad0.jpg
这种分层结构便于标准化和扩展,因此现在大多数协议都遵循OSI参考模型。希望大家能理解这个模型(推荐文章中有很多生动的解释)。
以上部分解释包含个人理解。为了通俗易懂,有些表达不太准确。希望大家留言交流。这是对官方文件的简单解释。
USB3.0和USB2.0的功能比较
366bd674-3b8a-11ec-82a9-dac502259ad0.jpg
硬件接口
368d22fc-3b8a-11ec-82a9-dac502259ad0.png
369da5f0-3b8a-11ec-82a9-dac502259ad0.png
物理层
突出显示部分:
36f20a28-3b8a-11ec-82a9-dac502259ad0.png
该层主要定义高速组件之间互操作所需的电气层参数。
37240398-3b8a-11ec-82a9-dac502259ad0.png
Tx物理层框图
3735cdf8-3b8a-11ec-82a9-dac502259ad0.png
物理层Rx框图
377764ca-3b8a-11ec-82a9-dac502259ad0.png
不带电缆(顶部)和带电缆(底部)的通道示意图
USB3.0使用8b/10b传输代码。该传输代码的定义与ANSI X3.230-1994(也称为ANSI INCITS 230-1994)第11条中规定的定义相同。
378bc7ee-3b8a-11ec-82a9-dac502259ad0.png
加扰功能由线性反馈移位寄存器(LFSR)实现。在发送端,在8b/10b编码之前对字符进行加扰。在接收端,对8b/10b解码字符进行解扰。每当发送或接收通信符号时,LFSR都会复位。
3798725a-3b8a-11ec-82a9-dac502259ad0.png
这些是物理层的一般规定。详见《USB3.0协议规范(英文完整版)(第六节)》。
链路层链路层
突出显示部分:
37cfd8f8-3b8a-11ec-82a9-dac502259ad0.png
链路层链路层主要包括:
分组帧
链接命令
链路管理和流量控制
链接错误规则/恢复
重置
链接状态机描述
37e5d9be-3b8a-11ec-82a9-dac502259ad0.png
带有帧符号、CRC-16和链路控制字的数据包报头
3823003c-3b8a-11ec-82a9-dac502259ad0.png
链接控制字
3833b10c-3b8a-11ec-82a9-dac502259ad0.png
指令结构
38625fa2-3b8a-11ec-82a9-dac502259ad0.png
命令字结构
387475de-3b8a-11ec-82a9-dac502259ad0.png
链路训练和状态机的状态图
协议层
突出显示部分:
38be6d24-3b8a-11ec-82a9-dac502259ad0.png
协议层主要包括:
数据包类型
数据包格式
对主机和设备发送的数据包的预期响应
描述了四种USB 3.0事务类型。
批量传输类型的流支持
设备/主机可以接收/发送的数据包的各种响应和定时参数。
整个协议层非常复杂,数据包的类型几乎有十几种,这里就不赘述了。