SATA系列专题之四:4.0 Command Layer命令层概述
一、故事前传
在之前的文章中, 我们已经介绍了传输层(Transport Layer),链路层(Link Layer)以及物理层(Physical Layer)的相关内容。详见前期文章:
1,浅析SATA Physical Layer物理层OOB信号;
2,SATA Link Layer链路层解析2.0-2.3;
3,SATA Transport Layer传输层解析3.0-3.4;
我们这里主要解析Command layer命令层相关内容。
二、SATA Command Layer命令层概述
当Host要下发一个command时,步骤大致如下:
Host软件先初始化Shadow register;
软件下发cmd, 将payload content的资讯,先写到shadow command block register和shadow control block register里;
应用层将shadow register的内容发送传输层,并产生FIS,,
通过FIS传到device的command register block和control register block;
#shadow command block 映射到 command register block;
#shadow control block 映射到 control register block;
这里要先提一下Shadow register:
这其实是个和硬件有关的概念。有些register是2层的,第一层是供CPU访问,第二层供HW访问。
这是同一个Register,不是2个Register,只不过分了2层。形象的讲上层是下层的Shadow。
CPU在写Register的时候,会先写在上层的Shadow Register,硬件update之后才会在下层供HW访问的Register开始执行。
因为真正生效的执行HW动作的是下面这层,而上面这层只是将CPU(也就是将软件)的信息**到,等下个硬件周期才会执行。