• SATA系列专题之三:3.2 Transport Layer传输层FIS Retry机制解析


    一、故事前传

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

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

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

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

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

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

    二、FIS Retry机制解析

    上回说到,FIS是一种用于Host和device之间信息传输的机制,每个FIS的格式都是固定的,并且对应唯一的ID,SATA Spec定义了14类FIS ID。

    其实在很多场景下,FIS的传输会出现Error,那怎么办呢?

    不怕不怕,SATA协议给我们准备了Retry机制可以救场~

    Transport Layer在Host端和Device分别有一个Buffer: FIS Tx BufferFIS Rx Buffer(如下图)。

    1. 当Host端将FIS从Transport Layer传至Link layer的时候,FIS其实在Transport Layer的FIS Tx Buffer有一个备份。

    2. 当device Link layer解析到传过来的FIS有错误发生时,会返回一个Primitive基元“R_ERR”,告诉Host端:“您刚才传输的FIS出了点问题,麻烦您发送一遍”。

    3. Host端收到R_ERR反馈会再讲备份在FIS Tx Buffer的FIS重新发送一遍。

    但是,有一点需要注意,并不是所有的FIS都可以用Retry机制修复Error:

    1. DATA FIS最大长度为2049 DWs, 但是Transport layer并没有这么大Buffer,FIS Tx/Rx Buffer只要7 DWs,所以DATA FIS无法用Retry机制

    2. BIST只用在测试诊断场景,所以BIST也无法用Retry机制

    所有FIS Retry机制状态如下表:

  • 相关阅读:
    MFC 控制台打印,弹出对话框
    使用Idea连接Mysql以及基本的连接Mysql方式
    【JavaWeb】之Tomcat介绍、安装与使用
    接口幂等性
    [数据可视化] 词云(Word Cloud)
    element-plus-自定义Dialog样式
    Python并发编程:多进程-互斥锁
    关于[git reset]
    Machine Learning Pre-Basics
    Java面试笔试题大全
  • 原文地址:https://blog.csdn.net/zhuzongpeng/article/details/126807297