• USB协议学习(一)帧格式以及协议抓取


    笔者来聊聊USB协议的理解.

    1、USB的认识

    1.1 USB(Universal Serial Bus)通用串行总线:

    是一个外部总线标准,用于规范主机和外部设备的连接和通讯。

    1.2 USB的版本发展历史:

    USB版本理论带宽(理论速度)编码方式速率称号最大输出电流推出时间
    USB1.01.5Mbps(153LB/s)8b/10b低速 (Low-Speed)5V/500mA1996年
    USB1.112Mbps(1.2MB/s)8b/10b全速 (Full-Speed)5V/500mA1998年
    USB2.0480Mbps(48M/s)8b/10b高速(High-Speed)5V/500mA2000年
    USB3.05Gbps(512M/s)8b/10b超速(Super-Speed)5V/900mA2008年
    USB3.110Gbps(1.21GB/s)128b/132b超速+(Super-Speed)5V/3000mA2013年
    USB3.220Gbps(2.42GB/s)128b/132b超速+(Super-Speed5V/3000mA2017年

    说明:
    USB 3.2是USB协议的一个版本,它引入了多通道技术,可以通过同时使用两个5 Gbps或10 Gbps通道来实现传输速度的增加。具体而言,USB 3.2规范定义了以下三种速度级别:

    • USB 3.2 Gen 1x1: 这是USB 3.2的基本速度级别,也就是之前的USB 3.0/3.1 Gen 1。它支持传输速度达到5 Gbps。
    • USB 3.2 Gen 2x1: 这是USB 3.2的中间速度级别,也就是之前的USB 3.1 Gen 2。它支持传输速度达到10 Gbps。
    • USB 3.2 Gen 2x2: 这是USB 3.2的最高速度级别,它支持传输速度达到20 Gbps。它利用了USB 3.2的多通道技术,同时使用两个10 Gbps通道来实现更高的传输速度。

    1.3 USB接口类型

    下图依次为Mini-USB、Micro-USB、USB TypeA、USB TypeB、USBTypeC
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1.4 USB电气特性

    2.0之前是只有4根线,差分信号,抗干扰信号,但是不支持全双工。
    在这里插入图片描述

    引脚颜色描述
    VBus红色电源
    D-白色数据线
    D+绿色数据线
    GND黑色电源地

    3.0之后变成了9根线,D+、D-,支持2.0之前的协议数据,增加的TX+、TX-、RX+、RX-,可以支持全双工通信,且是差分信号。有点像422和485。
    在这里插入图片描述

    引脚颜色描述
    VBus红色电源
    D-白色数据线
    D+绿色数据线
    SSTX+蓝色高速数据
    SSTX-黄色高速数据
    GND_DRAIN信号地
    SSRX+紫色高速数据
    SSRX-橙色高速数据
    GND黑色电源地

    A链接器和B链接器 TX+与RX+链接。

    1.5 物理层

    8b/10b编码,不做具体说明。

    1.6链路层

    链路层:进行链路连接,保证双端链路稳定,可以正常通信。
    传输方式:小端模式

    在这里插入图片描述
    链路层包格式:20个Byte组成,由包头帧、包头和链路控制字组成。
    在这里插入图片描述
    链路控制字:头部序列数字,hub 深度,Delayed bit(延迟位),Deferred bit(推迟位)

    • Delayed bit通常用于同步数据包的传输。它在数据包的头部中,用于指示接收方是否应该等待一段时间再开始接收数据包的DF(Data Field)字段。当发送方发送一个数据包时,如果接收方无法立即准备好接收数据,则可以将Delayed bit置为1,这将告诉发送方需要延迟一段时间再发送数据。在接收方准备好接收数据后,可以向发送方发出ACK信号,以指示可以开始传输数据。

    • Deferred bit通常用于控制数据包的优先级。在USB总线上,多个设备可能同时请求访问主机,因此必须使用一些机制来确定哪个设备具有更高的优先级并可以获得访问权。在这种情况下,可以使用Deferred bit来指示数据包的优先级。当设备发送一个数据包时,如果其Deferred bit被置为1,则表示它暂时放弃了对总线的访问权,并将让其他设备先进行数据传输。

    • hub index 总共有3位,最大为7,则不超过7级深度,直连深度则为0。集线器深度对于USB系统的性能和可靠性非常重要。每个集线器级别都会引入延迟和信号损失,因此过多的集线器深度可能会导致性能下降和通信问题。USB规范对集线器的级数有限制,通常建议不超过5级。
      在这里插入图片描述
      数据包结构:最大1024Byte,4位CRC校验。
      在这里插入图片描述
      例如下图,Host读取8K数据,Device端每次返回1024Byte,多次拆分数据并返回数据。序列号一直递增(增长到255然后归0)。同时有ACK响应。
      在这里插入图片描述
      链路训练和状态机(LTSSM):链路链接和链接电源管理的状态机。包括四个状态链接:U0,U1,U2和U3。
      U0:链路空闲或者数据正在传输状态,属于正常状态,超速链接使能。
      U1:低功耗链接状态,空闲状态,没有数据包传输,超速链接禁止来节约电能
      U2:也是低功耗状态,空闲状态,没有数据包传输,相对U1,U2更深层次的节约电能,但是延迟退出,U1快速退出
      U3:链路挂起状态,有可能会节约电能。
      在这里插入图片描述
      其次,有四种链路状态,Rx检测、轮询、恢复和热重置,这些都是为链路初始化和训练而引入的。

    • RxDetect表示初始通电链路状态,其目的是确定超高速链路伙伴是否存在。在检测到增强型超高速链路伙伴的存在后,将启动链路训练过程。

    • 轮询是一种链路状态,它是为两个链路伙伴定义的,以使其增强型超高速发射机和接收机经过训练、同步,并为数据包传输做好准备。

    • 恢复是为重新培训定义的链接状态当两个链路伙伴退出低功率链路状态时或者当链路伙伴已经检测到链路没有正确地在U0中操作并且链路需要重新训练时,或者当链路伙伴决定改变链路操作的模式时。

    • 热重置是一种定义为允许下游端口重置其上游端口的状态

    • 环回和顺应模式,用于误码测试和发送测试。

    • 定义了另外两个链接状态。eSS Inactive的是一种链路错误状态,其中链路处于不可操作状态并且需要软件干预。

    • eSS Disabled是一种链路状态,其中Enhanced SuperSpeed连接被禁用,并且链路可以在USB 2.0模式下运行

    2、USB协议帧格式的理解

    在这里插入图片描述
    协议层管理设备与其主机之间的端到端数据流。该层建立在这样的假设之上,即链路层保证报头分组的传递,然后该层根据传输类型增加了其余分组的端到端可靠性。

    2.1 协议层

    USB3.0协议之后才有的如下各自包:
    主要的包格式有:LMP(链路层管理包)、TP(事务包)、时间戳同步包(ITP)和数据包(DP)
    LMP(链路层管理包):一段链路之间传输,用来管理链路,单个链路之间,不带地址,不能路由。
    TP(事务包):遍历主机所有直接设备的所有链接。它们用于控制数据流、配置和集线器等。事务数据包没有数据内容。
    数据包(DP):遍历主机所有直接设备的所有链接。数据包有两个部分,数据包Header和数据包内容。
    时间戳同步包(ITP):同步时间。
    在这里插入图片描述
    LMP(链路层管理包):通过LMP在两个连接设备之间交换端口特性信息。该信息包括但不限于可接受的电压范围、电流需求、传输速率等,以确保连接的稳定性和可靠性。
    在这里插入图片描述
    在这里插入图片描述
    TP(事务包):遍历主机和设备之间的直接路径,控制数据流和管理端到端连接

    • “类型”字段中的值应设置为“事务数据包”。集线器使用路由字符串字段将出现在其上游端口上的数据包路由到正确的下游端口。
    • 对于设备发送的TP,路由字符串设置为零。当主机发送TP时,设备地址字段包含预期收件人的地址。
    • 当设备向主机发送TP时,它会将设备地址字段设置为自己的地址。主机使用此字段来识别TP的来源。
    • TP中的SubType字段由收件人用于确定TP的格式和用法
    类型描述
    ACK对于 IN 端点,主机发送此TP以向设备请求数据以及确认先前接收到的数据包。对于 OUT 端点,该TP由设备发送以确认接收到主机发送的前一个数据包,并通知主机在收到此包后它可用的数据包缓冲区的数量。
    NRDY此 TP 只能由非同步端点的设备发送。 如果 OUT 端点 没有可用的数据包缓冲区空间来接受主机发送的 DP,则该端点会将此 TP 发送到 主机。 如果IN 端点无法返回 DP 以响应主机发送的 ACK TP,则 IN 端点会将此 TP 发送给主机
    ERDY此 TP 只能由非同步端点的设备发送。 它用于通知主机端点已准备好发送或接收数据包。
    STATUS此 TP 只能由主机发送。 它用于通知控制端点主机已启动控制传输的状态阶段
    ping此TP只能由主机发送,它被主机用来在传输之前将到设备的路径中的所有链路转换回U0。

    例如ACK包。
    在这里插入图片描述
    TT:四种传输类型。
    在这里插入图片描述
    Seq Number:序列号,最大32。
    在这里插入图片描述
    Device Address:设备地址,7bit,最大128个设备。
    在这里插入图片描述
    数据包(DP):数据头包和内容包。头部当中的Length指明了内容Byte的个数。
    在这里插入图片描述

    3、USB 3.2 协议帧的抓取。

    3.1 LMP 链路层管理包

    在这里插入图片描述
    可以看到subType,Port Capability、Port Config。

    3.2 TP/DP 事务包

    • TP事务包主要是传输ACK或者状态,管理传输的一些流程控制和状态等。
    • 一个TP包和一个DP包组成一个Transaction,叫一次交易,DP包用来传数据,TP包用来传输状态。(图一)
    • 一个DP包最大传输的Byte是1024,如果超过1024,则需要拆包,一个TP包对应一个DP包,SeqNumber可以看到顺序,(图二)
    • 多个交易可以组成一个transfer,叫传输,有控制传输,大量传输(Bulk),控制传输只是传输一些命令或者状态,比如SET_ADDRESS,设置USB 设备地址,然后第一个交易是SETUP,发送数据下去,第二个是获取状态,设置完成。又比如Get Description,获取描述符,通过SetUp吧命令发下来,然后通过IN,把数据读回去,IN和OUT处于交易类型的一种。(图三)
    • 一个SCSI 命令又由好多个Transfer组成,一个传输负责OUT事务,把命令发下去,通过CBW命令,31个字节。另外一个transfer,负责IN事务,把数据读上来,最后一个命令,通过走CSW命令, 获取状态。(图四)
    • 在SCSI获取数据的时候,有时候数据可能还没好,主机就来问,此时从机返回的是NO Ready的状态,等ready之后,主动上报一个Ready状态,然主机通过TP和DP包把数据读上来。(图五)。
      在这里插入图片描述
    图一

    在这里插入图片描述

    图二

    在这里插入图片描述
    在这里插入图片描述

    图三

    在这里插入图片描述
    在这里插入图片描述

    图四

    在这里插入图片描述

    图五

    3.4 ITP

    待续

    4、参考

    USB 3.2 Revision 1.0
    USB 2.0 Specification

  • 相关阅读:
    计算机毕设(附源码)JAVA-SSM基于的在线怀旧电影歌曲听歌系统
    移动端1px-从基本原理到开源解决方案介绍
    对标金九银十:各大厂最新Java面试真题整理+简历模板,吃透offer拿到手软
    Android 开发学习(三)
    Apache Doris 2.1.2 版本正式发布!
    leetcode 135. 分发糖果
    CSS中的圆角和阴影
    题目地址(834. 树中距离之和)
    虹科分享 | 近距离接触最新的3个勒索软件
    需求放缓、价格战升级、利润率持续恶化对小鹏汽车造成了严重影响
  • 原文地址:https://blog.csdn.net/qq_34430371/article/details/133848811