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机制状态如下表:

图片

posted @ 2024-11-05 15:48  咸鱼书生  阅读(20)  评论(0编辑  收藏  举报