1. Command Protocol
- SATA有很多种Command,总体可以分为12类。每一类中的所有Command执行时的FIS的交互过程时一致的。
- 下表的统计不是最新的,具体看
ATA8-ACS
1.1 Command的传播过程
- 软件在shadow register中填好对应的Command block(除command field)、Control block;最后在command field中填入要发送的command的编码。
- HBA会去发送一个H2D给Device
- Device收到后,解析得到command编码,然后再执行相应的操作
1.2 数据相关Command总结
- 用于数据传输的主要有4中:PIO、DMA、DMA Queued、FPDMA
- PIO:传输速率慢,需要CPU参与,现在一般不使用
- DMA:代表普通的DMA,一次只能执行一个命令,命令执行完到下一个命令传给Device会有一段空窗期。
- DMA Queued:代表可以outstanding的DMA,最多支持32个(【疑问】命令间不支持乱序返回?)一般的device也不支持这个,而是直接使用FPDMA(NCQ)。
- FPDMA:用于支持NCQ特性Device的命令。最多支持32个命令outstanding,Device调整收到的命令的优先级,以最快的速度完成command。反回的Data(不同命令的)可能时乱序的(不同TAG间不保序,但是一旦该TAG的命令开始执行