首页 > 其他分享 >SATA系列专题之三:3.3 Transport Layer传输层Flow Control机制解析

SATA系列专题之三:3.3 Transport Layer传输层Flow Control机制解析

时间:2024-11-05 15:41:53浏览次数:1  
标签:Control Layer 接收端 Buffer Rx 发送 传输 传输层 HOLD

一、故事前传

在之前的文章中,已经解析了SATA协议的部分相关内容。

较为详细解释请见之前的文章:

1,浅析SATA Physical Layer物理层OOB信号;

2,SATA Link layer链路层解析2.0-2.3;

3,SATA Transport layer链路层解析3.0-3.2;

我们这里主要解析Transport layer Flow Control机制相关内容。

二、Flow Control

我们前面有提到传输层中Tx/Rx buffer只有7 DWs,也就是28 Bytes,  而我们Data FIS的最大长度是2049 DWs(8196 Bytes)。在Data传输过程中,如果不加管理和控制的话,就会出现欠载(UnderRuns)和过载(OverRuns)的情况。

在Data flow control的过程中,主要用了两个Primitive基元:HOLD和HOLDA。

  1. HOLD的作用是告知对方中止FIS传输;

  2. HOLDA的作用是告知HOLD发送者:“您的HOLD中止指令已收到,并且已中止FIS传输”。

发送端(Tranmitter)和接收端(Reciver)均可以启动Data flow control机制,主要分为以下四种情况:

  1. 发送端Tx Buffer接近空的时候;

  2. 发送端Tx Buffer接近满的时候;

  3. 接收端Rx Buffer接近满的时候;

  4. 接收端Rx Buffer接近空的时候;

 

(1)发送端Tx Buffer接近空的时候

Data FIS传输过程中,首先是接收端检测到FIS并且回复Primitive基元"R_IP"(Reception in Progress)给发送端(如下图)。

  • 当发送端Tx buffer接近空的时候,发送端会给接收端发送Primitive基元“HOLD”,告知接收端,data传输将会被暂停;

    注:发送端会一直发送HOLD,直到data传输被恢复。

  • 当接收端接收到HOLD之后,会反馈HOLDA给发送端。

图片

(2)发送端Tx Buffer接近满的时候

前面提到发送端会一直发送HOLD,直到data传输被恢复。一旦发送端Tx Buffer快满了,就会取消HOLD,并恢复data传输。接收端也会在HOLD之后立马检测到数据的传输,并且释放HOLDA。

图片

(3)接收端Rx Buffer接近满的时候

当接收端Rx buffer快满的时候,发送HOLD给接收端,告知发送端"先不要发送数据了,我快承受不来了,呜呜~"。

当发送端接到HOLD之后,会立马发送HOLDA安抚接收端"遵命~传输已中止~"。

图片

(4)接收端Rx Buffer接近空的时候

当接收端Rx  buffer快空的时候,会释放HOLD,欢快的告知发送端“快发送数据啦,我现在很空呢~”,同时会发送R_IP。发送端收到接收端R_IP的指示,恢复data传输。图片

标签:Control,Layer,接收端,Buffer,Rx,发送,传输,传输层,HOLD
From: https://www.cnblogs.com/FireLife-Cheng/p/18528145

相关文章

  • SATA系列专题之一《1.0 Physical Layer物理层OOB信号》
    文章目录前言一、SATA物理层概述二、OOB(OutofBand)信号解析三、实例解析总结前言一、SATA物理层概述说OOB之前,首先得了解一下SATA结构以及物理层的含义。SATA主要包括:应用层(ApplicationLayer), 传输层(TransportLayer),链路层(LinkLayer)、物理层(P......
  • Pinctrl子系统中Pincontroller和client驱动程序的编写
    往期内容本专栏往期内容:Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析inctrl子系统中Pincontroller构造过程驱动分析:imx_pinctrl_soc_info结构体Pinctrl子系统中client端使用pinctrl过......
  • WPF Button Setter Template Setter.Value ControlTemplate Border ContentPresenter
    <StackPanel.Resources><Stylex:Key="btnStyle"TargetType="{x:TypeButton}"><SetterProperty="Button.FontSize"Value="50"/><SetterProperty="Button.Background"Va......
  • ComfyUI | FLUX-ControlNet,FLUX-LoRA和FLUX-IPAdapter等工作流【附下载】
    本文重点提要本文将介绍Flux模型及安装指引,文末附所有工作流下载方式ComfyUIFLUX工作流分享:包含FLUXTxt2Img、FLUXImg2Img、FLUXLoRA、FLUXControlNet、FLUXInpainting、FLUXNF4和Upscale、FLUXIPAdapter、FluxLoRA训练器、FluxLatentUpscalerFLUX简介1.1前......
  • Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
    本示例演示在vue+openlayers项目中通过WebGLVectorLayerRenderer方式加载海量多边形数据。这里相当于将海量的数据放在同一个层的source中,然后通过webglTile的方式渲染出这一层。本示例数据为5000个多边形,加载速度超级快。一、示例效果专栏名称内容介绍Openlay......
  • Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
    本示例演示在vue+openlayers中实现轨迹动画,这里设置了小汽车开始,暂停,结束等的控制键,采用了线段步长位置获取坐标来定位点的方式来显示小车的动态。效果图专栏名称内容介绍Openlayers基础实战(72篇)专栏提供73篇文章,为小白群体提供基础知识及示例演示,能解决基础......
  • 【Unity移动端触控插件】Control Freak 2 - Touch Input Made Easy!
    ControlFreak2是一款专为Unity开发的插件,旨在简化触控输入的处理,特别适用于移动设备游戏。它提供了一整套易于使用的界面和控件,使开发者能够快速创建响应式的触摸输入系统,提升用户体验。主要功能多种控件支持:提供虚拟摇杆、按钮、滑块等多种触控控件,方便开发者根据......
  • LE Controller commands(低功耗控制器命令)速览
    目录一、基础设置与管理命令(15个)1.1.事件控制与状态查询1.2.设备配置与特性查询1.3.性能优化与资源管理1.4.安全与隐私设置1.5.信道与特性1.6.数据长度相关二、广播与扫描(36个)2.1.广播参数设置2.2. 广播数据设置2.3.扫描响应数据设置2.4.设置随机地址2.......
  • 15. NSView 视图与 NSViewController 视图控制器
    NSView视图对象视图与窗口NSViewController视图控制器负责管理NSView的生命周期,同时也会管理所有子视图控制器,以便实现不同视图的切换,同时需要区分下NSWindow和NSView的区别,视图这东西比较复杂。NSViewController不能独立显示,必须做为NSWindow(view)的子视图或NSWindowCont......
  • ingress controller openresty lua脚本的开发
    接上篇博客:https://blog.csdn.net/weixin_34542632/article/details/143405219?spm=1001.2014.3001.5501,我们接下来一起看一下ingress网关的lua脚本开发。一些基础信息:ingresscontroller其实就是openresty,官方话术:ThismoduleisacorecomponentofOpenResty.Ifyouar......