SATA 学习笔记2 - Shadow Register和FIS的传输

在上一篇笔记SATA学习笔记1 - Link Layer初认识中,我们简单了解了FIS是如何在不同的layer中进行传输和接收的,在这篇笔记中,我将进一步讲解FIS的相关知识。

在讲FIS前,我们先来看看SATA中的registers。SATA规定了一系列的registers,其中包括command register, control register和SATA registers。其中我们将command register和control register统称为shadow register,FIS的产生、传输、接收都和shadow register有很大的关系(在Device端是task file,它们的结构是一样的)。下图是一个简化的SATA shadow register的示意图:

SATA Shadow Register

从图中我们可以看出,HOST和Device之间的信号传输,在硬件层面和shadow register和task file有很大的关系。除了shadow register包含的command和control register,我们可以看到还有一个SATA registers,SATA registers其实是一系列的registers。在SATA 2中,一共有5个SATA register,下图是这五个register:

SATA Register

这5个register的详细介绍请参看SATA Specification 3.2 P764.

有了这些register的介绍后,我们就可以来看看如何使用shadow register了。
在application layer,当我们要发送一个命令时,application会根据命令的类型来给shadow register赋值,这其中也包含了给command register写入我们需要发送的命令。一旦我们对command或者control register进行了写操作后,shadow register中的内容就会被送到transport layer,transport layer再根据接收到的内容生成FIS(FIS中元素的值都来自于shadow register或者task file),然后通过Link Layer, Physical Layer将FIS发送给Device。当Device接收到该FIS后,它会进行一系列的操作,包括1) 在task file中更新command register;2) 根据command的运行情况更新task file;3) 将更新后的task file作为数据源产生一个新的FIS用于发送给HOST等。当HOST接收到Device发送过来的FIS后,它会根据FIS的值更新shadow register,并对Error等异常情况作出相应的处理。

下面是一个简化版的command sequence:

Command Sequence
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容