一、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. Python学习的个人笔记

    python基础知识 目录: Python基础语法: (1)打印出hello world (2)注释 (3)数据类型 (4)运算 (5)输入 (6)输出 (7)序列 (8)相等比较 (9)选择 (10 ...

  2. ubuntu禁止内核自动更新

    ubuntu禁止内核自动更新 查看已安装内核dpkg --get-selections |grep linux-image 查看正在使用的内核uname -a 禁止内核更新sudo apt-mark ...

  3. Mysql函数1-IFNULL

    IFNULL函数用于判断参数值是null时则返回指定内容. 原本 select goods_base_name,goods_id from goods where goods_id in (6,7,8 ...

  4. 9、SpringMVC之处理静态资源

    9.1.环境搭建 9.1.1.在project创建新module 9.1.2.选择maven 9.1.3.设置module名称和路径 9.1.4.module初始状态 9.1.5.配置打包方式和引入依 ...

  5. 【Mybatis】04 官方文档指北阅读 vol2 配置 其一

    https://mybatis.org/mybatis-3/zh/configuration.html 配置 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息. 配置文 ...

  6. MyBatis-Plus文件上传方法

    网站的文件上传方法 本地存储上传 // 本地存储方式 MultipartFile接受文件 @PostMapping("/save") public Result save(Stri ...

  7. 机器人操作系统ROS (学习视频)—— 学习ROS,安装Ubuntu,虚拟机和双系统如何选择

    分享一个ROS入门视频: https://www.bilibili.com/video/BV1BP4y1o7pw/

  8. (续)signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library) —— 强化学习ppo算法库sample-factory的多进程包装器,实现类似Qt的多进程编程模式(信号与槽机制) —— python3.12版本下成功通过测试

    前文: signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library) -- 强化学习ppo算法库sample-factory的多进程包装器,实现类似Qt的多进程 ...

  9. NVRM: Xid (PCI:0000:b1:00): 13, pid=1375637, Graphics SM Global Exception on (GPC 0, TPC 1, SM 1): Multiple Warp Errors

    显卡服务器中一个显卡崩溃了: May 16 05:38:58 dell kernel: [14244871.006970] NVRM: Xid (PCI:0000:b1:00): 13, pid=13 ...

  10. 【转载】 机器学习的高维数据可视化技术(t-SNE 介绍) 外文博客原文:How t-SNE works and Dimensionality Reduction

    原文地址: https://www.displayr.com/using-t-sne-to-visualize-data-before-prediction/ 该文是网上传的比较多的一个 t-SNE ...