一、USB3.0 Hub的单播(非广播)机制

Hub通过解析下行packet header中的Route String字段识别packet要传递的终点,其中4'b0000代表hub本身,4'b0001-4'b1111分别代表hub的各downstream port,由于USB3.0规定Host Controller最多级联5级hub,所以每个packet header中的Route String字段共有4x5=20bit。Packet中Route String字段位于Downstream Packet Header的DW0中,如图1所示。

对于上行Packet,由于都是传递给Host Controller的Packet,因此没有Route String字段,如图2所示。

图3是Hub的链接拓扑和Route String的映射关系,通过Route String可以明确指定该Packet要传递到的位置。

二、USB3.0 Hub的存储转发机制

Hub的两种下行数据包:

Hub本身可以作为一个device,其在usb的拓扑结构中也拥有地址,所以host传递给hub的包分两种情况:

1. host传递给Hub本身的数据包。例如 SetHubAddress或者GetPortStatus操作,这些数据包的终点就是Hub本身,这种是会牵扯到hub的protocol layer。如图4所示,host传递了一个packet给hub,hub的协议层对数据包处理后对downstream port0进行了设置

2. host通过hub透传给device的数据包。这些包是link to link级别传递的,不会牵扯到hub的protocol layer;

Hub的buffer需求

Hub中分为两类buffer:Header buffer和Data Buffer,前者用于缓存packet header,后者用于缓存data payload。Header 的大小是16Bytes,hub的每个downstream port和upstream port都分别有4个tx buffer和4个rx buffer(每个buffer只存一个packet header)。一个hub只有一个下行data buffer和一个上行data buffer,如图6所示。

关于上图的解释:

1.payload很大,所有payload全部存下来浪费资源,因此hub收到payload的第一时间就会传递,但是前提是header已经传递了(因为header必须在payload之前发送)。在header还没传递之前的小部分Data payload会被data buffer缓存下来。

2.左边downstream port1的Data15的header还在buffer中没有传递,所以Date15的payload会在hub的downstream data buffer中先缓存住,直到DATA15的header传给了对应的device,则Date15的payload往下传递;

3.右边同理,DATA31的header在upstream port的header buffer里还没传递,在upstream Data Buffer中会缓存住Data30的payload;

注意:Hub往device发的packet顺序必须和host给hub发的packet顺序一致

三、Hub的Deferred(推迟机制)

上图是一个deferred的示意图,解释如下:

  1. Host起初试图发起In Transfer,于是给Device B发送了ACK。此时Downstream Port4的LTSSM状态机处于U1状态,不能立马传递信息,对应步骤①②;
  2. Downstream port4给Host传回ACK(将Deferred bit,Delayed Bit和Hub Depth在ACK packet的Link Control Word中进行了设置,如下图所示),对应步骤③;

  1. Host收到该消息后,暂时将该任务放一边,并发起Device A的传输任务,对应步骤④;

  2. Hub的Downstream Port4把之前deferred的ACK存下来了,等到LTSSM状态机恢复到U0状态后再把ACK传递给Device B,然后Device B传回ERDY,对应步骤⑤⑥;

  3. 该ERDY收到后,Host会重新给Device B发起ACK,完成之前被推迟的传输。

四、Hub的错误检测和重传机制

Hub的错误检测是通过对packet中的CRC进行校验完成的:

  1. 对于header错误会执行链路级的重传,并丢弃掉对应的data payload。例如,Hub的downstream port发送了header后,该header仍然会存在对应port的header buffer中,直到收到device传回的LGOOD_n。这个机制跟host和device的链路重传是一样的)
  2. 若header没错,但payload错误则hub不会进行处理(它把该packet继续传下去,因为payload没有链路级别的重传机制)

【USB3.0协议学习】Topic1·USB3.0Hub的一些机制的更多相关文章

  1. USB2.0协议学习笔记---描述符

     USB设备描述符 字段名 长  度(字节)  地址偏移 含           义 bLenth   1  0  描述符长度 bDescriptorType   1  1 描述符类型 (这里为 1) ...

  2. USB2.0协议学习笔记---USB工作过程(类的方法)

    前面学习了那么多的概念,这里需要记住一点分层概念即设备 ---> 配置 ---> 接口 ---> 端点,这种分层的概念结构 . 也可以理解为端点构成接口,接口组成配置,配置组成设备. ...

  3. USB2.0协议学习笔记---USB数据包结构

    USB包类型和传输过程  USB是一种串行总线,因此数据都是一位一位传输的,如同串口那样,但是USB在真实物理电路上却不是TTL电平,而是一种差分信号采用NRZI编码,就是用变化表示0,不变表示1,同 ...

  4. USB2.0协议学习笔记---基本概念

    概念  USB是一种串行通信总线(Universal Serial Bus),经历的版本有USB1.0,USB1.1.USB2.0等.USB是一种主从模式的结构,因此它无法在设备与设备.主机与主机之间 ...

  5. USB3.0 图像视频传输 开发 CYUSB3014开发基础(导入官方例程) 转

    CYPREE提供的FX3_SDK开发包里面有很多基础的内容,除了前面提到的几个pdf文件外,还有三个文件夹,是官方提供的基础例程.学习CYUSB3014应该就从这里开始,从这几个例程开始.例程共有三个 ...

  6. AC6102开发板USB3.0测试和使用说明

    AC6102开发板USB3.0测试和使用说明 概述 AC6102上集成了一颗Cypress 推出的高性能USB3.0传输芯片CYUSB3014,Cypress称之为EZ-USBFX3.该芯片性能强劲, ...

  7. USB3.0测试和使用说明

    概述 AC6102上集成了一颗Cypress 推出的高性能USB3.0传输芯片CYUSB3014,Cypress称之为EZ-USBFX3.该芯片性能强劲,功能强大,接口简单,非常适合用于各种需要高速数 ...

  8. 硕盟SM-T54(TYPE C转HDMI+VGA+USB3.0+PD3.0)

    硕盟SM-T54是一款TYPE C转HDMI+VGA+USB3.0+PD3.0四口扩展坞,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显示器.电视机或其他显示设备. ...

  9. 硕盟SM-T54| TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

  10. 硕盟type-c转接头HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞

    硕盟SM-T54是一款 TYPE C转HDMI+VGA+USB3.0+PD3.0四合一多功能扩展坞,支持四口同时使用,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显 ...

随机推荐

  1. 概述C#中各种类型集合的特点

    在C#中,集合是用于存储和操作一组数据项的数据结构.这些集合通常位于 System.Collections 和 System.Collections.Generic 命名空间中.下面我将概述C#中几种 ...

  2. java 使用openoffice将doc、docx、ppt、pptx等转换pdf格式文件

    软件的安装与配置 链接: 官网 / C**N / 毒盘:提取码k47b 有能力的大佬可以选择c**n下载支持支持,官网下载可能有点慢 Windows下安装配置 下载安装包,安装到硬盘(这个就不截图了吧 ...

  3. 【C】Re05 指针

    一.变量 & 指针 变量 = 内存地址 + 存储值 指针变量 = 内存地址 + 存储值[变量的内存地址] 作用: 间接访问内存地址 内存地址 = 地址编号 地址编号:内存中的每个字节唯一的编号 ...

  4. 《Python数据可视化之matplotlib实践》 源码 第一篇 入门 第四章

    图 4.1 import matplotlib import matplotlib.pyplot as plt import numpy as np # 设置matplotlib正常显示中文和负号 m ...

  5. NVIDIA中的cupti的作用及设置: CUDA profiling tools interface —— Could not load dynamic library 'libcupti.so.10.1' —— failed with error CUPTI_ERROR_INSUFFICIENT_PRIVILEGES

    NVIDIA官方给出的说明: 可以知道,这个组件的作用是对NVIDIA的CUDA进程进行性能分析的,通过对这个组件的调用可以实现对CUDA进程的性能监测. 在使用深度学习框架时有时需要对运行的代码的C ...

  6. PowerShell快速修改多个文件的名称

      本文介绍基于PowerShell语言,对文件夹中全部文件的名称加以批量替换.修改的方法.   在之前的文章中,我们介绍了基于Python语言,批量修改大量文件的名称的方法.当时我们修改文件名的需求 ...

  7. MySQL编译安装-麒麟V10 x86

    环境信息 操作系统: Kylin Linux Advanced Server V10 (Sword) 架构:X86 MySQL版本:5.7.44 编译 安装必要的依赖库和编译工具 sudo yum g ...

  8. ubuntu 安装psycopg2包

    psycopg2 库是 python 用来操作 postgreSQL 数据库的第三方库. 执行:pip3 install psycopg2==2.8.4 有可能会报错: Collecting psyc ...

  9. 我的微服务项目之IdentityServer4

     2021,祝大家新年快乐!!! 2021年了,新的一年应该有新的计划,我的计划是准备去学习微服务,所以我将我自己的博客项目拆分成了一个微服务项目,用来给自己学习,项目地址:http://www.tt ...

  10. SQLserver 数据库自定义函数

    起源 最近项目开发上使用的SQLserver数据库是2008版本,由于08版本的数据是没有字符串合并(STRING_AGG)这个函数(2017版本及以上支持)的,只有用stuff +for xml p ...