SATA-AHCI规范学习

SATA-AHCI规范学习

目录

参考文献

基本概念

HBA

AHCI HBA

OOB(Out of Band)信号解析

PIO

FPDMA

TAG

FIS(Frame Information Structure)

PRD

PIO

Port Multiplier

NCQ

sht

SATA

Shadow Register

SATA Registers

SStatus register (SCR0)

SError register (SCR1)

SControl register (SCR2)

SActive register (SCR3)

SNotification register (可选) (SCR4)

NCQ

SATA FIS

Register Host to Device FIS 0x27,主机 -> 设备

Register Device to Host FIS 0x34,设备 -> 主机

Set Device Bits FIS 0xA1,设备 -> 主机

DMA Activate FIS 0x39,设备 -> 主机

DMA Setup FIS 0x41,设备 <-> 主

BIST FIS 0x58,设备 <-> 主机

PIO Setup FIS 0x5F,设备 -> 主机

​编辑

Data FIS 0x46,设备 <-> 主机

ATA Comannd

CFA ERASE SECTORS - C0h, Non-Data

IDENTIFY DEVICE - ECh, PIO Data-In​编辑

PACKET - A0h, Packet​编辑

READ DMA - C8h, DMA​编辑

WRITE DMA - CAh, DMA

READ FPDMA QUEUED - 60h

SATA DMA Read 流程

SATA DMA Write 流程

AHCI

HBA Configuration Registers

HBA Memory Registers - HBA通用寄存器(Generic Host Control)

Offset 00h: CAP – HBA Capabilities --HBA能力寄存器

Offset 04h: GHC – Global HBA Control --全局HBA控制寄存器

Offset 08h: IS – Interrupt Status Register --中断状态寄存器

Offset 0Ch: PI – Ports Implemented --端口实现寄存器

Offset 10h: VS – AHCI Version --AHCI版本

HBA Memory Registers - HBA端口寄存器(Port)

System Memory Structures

Data Transfer Operation

PRD中DBC字段更新规则

PRD中断规则

系统软件规则

参考文献

《SerialATA_Revision_3_1_Gold.pdf》SerialATA_Revision_3_1_Gold (kdocs.cn) 《serial-ata-ahci-spec-rev1-3-1.pdf》serial-ata-ahci-spec-rev1-3-1 (kdocs.cn) 《ATA8-ACS Draft Rev.6a__T13.pdf》ATA8-ACS Draft Rev.6a__T13 (kdocs.cn)

《pcie_3.0_总线规范.pdf》pcie_3.0_总线规范 (kdocs.cn)

文章:【转载】SATA专题文章 - 知乎 (zhihu.com)

规范文件放在WPS的在线文档中,可申请访问权限,若长时间未同意,可评论区提醒

百度网盘:百度网盘 请输入提取码

提取码:iunf

基本概念

HBA

Host Bus Adapter,即AHCI HBA(AHCI的主机控制器),可以集成在SOC芯片中,也可以是单独的AHCI主机控制器芯片。

AHCI HBA

独立于SOC芯片以外的AHCI HBA是一个PCI类设备。集成在SOC芯片中的AHCI HBA则使用内部总线访问,只是AHCI寄存器偏移量和功能复合AHCI规范标准。

OOB(Out of Band)信号解析

SATA信号链结的建立主要是靠OOB(Out Of Band)的检测实现的,并且向上层Link Layer提供了物理层的链结情况。

OOB主要的作用包括以下几点:

初始化(initialization),传输速率的协商与对接(Speed negotiation),---透过OOB handshake,host与device可以决定要在Gen1,Gen2或Gen3做data传输。重置(Reset),从省电状态(Slumer/Partial)的唤醒。

PIO

Programmed Input/Output,SATA的一种传输模式。

FPDMA

First Party DMA引擎

TAG

NCQ中最多32个命令的标签,用于指示使用哪个命令队列或命令队列状态。

FIS(Frame Information Structure)

FIS是SATA规范中的概念,SATA规范的传输层使用FIS进行通信。传输层不必关心需要传输或接收资讯的多少,只需把要传输的资料封装成FIS 格式,发送到Link Layer,或者把收到的FIS去除封装,提交给Application Layer。

参考《SerialATA_Revision_3_1_Gold.pdf》10 Transport Layer章节。每个FIS的格式都是固定的,并且对应唯一的ID,SATA Spec定义了14类FIS ID,真正被使用到的只有前面8类。

PRD

Physical Region Descriptor 物理区域描述符,PRD表是DMA引擎使用的数据结构,符合ATA/ATAPI主机适配器标准。PRD描述了在DMA传输期间用作数据来源或目标的内存区域。PRD表通常称为散/聚集列表(scatter/gather list)。

PIO

PIO模式是一种通过CPU执行I/O端口指令来进行数据的读写的数据交换模式。是最早先的硬盘数据传输模式,数据传输速率低下。分PIO mode0-6,速率从3.3MB/s到16.6MB/s不等。

Port Multiplier

端口倍增器。SATA 1.0的一个缺点就是可连接性不好,即连接多个硬盘的扩展性不好。因为在SATA 1.0规范中,一个SATA接口只能连接一个设备。SATA的制定者们显然也意识到了这个问题,于是他们在SATA2.0中引入了Port Multiplier的概念。Port Multiplier是一种可以在一个控制器上扩展多个SATA设备的技术,它采用4位(bit)宽度的Port Multiplier端口字段,其中控制端口占用一个地址,因此最多能输出15个设备连接----与并行SCSI相当。

NCQ

Native Command Queuing 原生指令序列,对多个命令进行重新排序,减少机械硬盘磁头切换耗时。

sht

scsi_host_template

SATA

Shadow Register

SATA Host 和Device之间有一组相同的寄存器,在Host端叫Shadow Registers,在Device端叫Task File。Host的Shadow Registers与Device的Task File通过Register FIS来进行同步。

Shadow Registers包括如下内容。

Command filed 要执行的command的编码,当被写入后,Device开始解析,并执行相应的Command的操作Status

"#"号代表和command耦和,不同的command,该filed代表的含义不同 如果bit0为1,则代表有Error,才需要去看Error field中8个bit 的情况Features 和command field耦合,不同的command,feature指代的含义也不同Error

与具体命令有关

Alternate Status 和Status field中的内容完全相同Device Control

允许Host去软复位Device

下图更加详细的描述了Shadow Regs和Sata Regs。

SATA Registers

又称为Status and Control Registers,即SCRs,小端字节序。《SerialATA_Revision_3_1_Gold.pdf》14.1章节。

Sata Registers为SATA专属寄存器(相对于PATA),称为SCR(Status and Control register),包括SCR[0 ~ 15],但只用了SCR0~4。基地址SATA规范不做规定,但在AHCI规范中,该基地址在AHCI的端口寄存器表中是确定的,如果不支持AHCI,芯片厂商自由发挥。

AHCI中规定了SCR寄存器地址,如下。

SStatus register (SCR0)

32bit只读寄存器,指示接口和HOST的状态。

DET Detection,表示接口设备检测和Phy状态。 0000b 未检测到设备且未建立Phy通信 0001b 检测到设备存在,但Phy通信未建立 0011b 检测到设备存在并建立Phy通信 0100b 由于接口被禁用或运行在BIST环回模式下,导致Phy处于离线模式SPD Speed,表示协商建立的接口通信速率

0000b 未协商速度(设备不存在或通信未建立) 0001b 协商为Gen1通信速率(1.5 Gbps) 0010b 协商为Gen2通信速率(3 Gbps) 0011b 协商为Gen3通信速率 (6 Gbps)IPM interface power management,显示当前接口电源管理状态 0000b 设备不存在或通信未建立 0001b 接口处于Active状态 0010b 接口处于Partial状态 0110b 接口处于Slumber状态

SError register (SCR1)

32bit只读写寄存器,用于补充Shadow Registers中的错误及诊断信息。对应位写1清0。

R 保留位

DIAG 诊断

A 检测到端口选择器存在

X 设备的存在发生改变

F 无法识别的FIS类型

T 传输状态转换错误

S 链路序列错误

H 握手错误

C CRC错误

D Disparity错误

B 10b到8b解码错误

W 检测到COMWAKE信号

I Phy内部错误

N PHYRDY信号变化

ERR 错误

E 内部错误

P 协议错误

C 不可恢复的通信或数据完整性错误

T 不可恢复的瞬态数据完整性错误

M 可恢复的通信错误

I 可恢复的数据完整性错误

SControl register (SCR2)

32bit读写寄存器,软件通过此寄存器控制HBA

DET 控制HOST适配器设备检测和接口初始化。

0000b 不检测设备和初始化接口

0001b 执行接口通信初始化顺序来建立通信

0100b 关闭Serial ATA接口,将Phy置于离线模式

SPD 配置速率协商时支持的最高速率

0000b 无速率限制 0001b 限制最大协商为Gen1通信速率(1.5 Gbps) 0010b 限制最大协商为Gen2通信速率(3 Gbps) 0011b 限制最大协商为Gen3通信速率 (6 Gbps)

IPM IPM字段表示可以通过串行ATA接口电源管理功能调用的已启用的接口电源管理状态 0000b 无接口电源管理状态限制 0001b 不允许转换到 Partial(部分睡眠) 电源管理状态 0010b 不允许转换到 Slumber(完全睡眠) 电源管理状态 0011b 不允许转换到 Partial和Slumber 电源管理状态

SPM 用于选择电源管理状态

0000b 没有请求电源管理状态转换 0001b 进入Partial电源管理状态 0010b 进入Slumber电源管理状态 0100b 进入活跃电源管理状态

PMP Port Multiplier Port 端口扩展端口,所有传输FISes的PM Port字段中的4位将用该字段替代。如果不支持PMP,HBA可忽略该字段。

SActive register (SCR3)

32bit读写寄存器,用于传达收到的Set Device Bits FIS中的SActive字段(即Protocol Specific字段)。如果不支持NCQ,该寄存器可不实现。

主机可以通过对SActive寄存器的写操作来设置SActive寄存器中的位,但不能清零,只能通过Set Device Bits FIS的SActive字段来清零

SActive 对于NCQ协议,SActive值表示尚未成功完成的未完成命令队列集合。

Set Device Bits FIS如下:

SNotification register (可选) (SCR4)

32bit读写寄存器,当Host收到了设置Notification位的Set Device Bits FIS时,需要将该FIS中的PM Port字段值反映到本寄存器的Notify字段中,如FIS中PM Port字段为7,则本寄存器的Notify字段的bit7为1,且如果该FIS中的‘I’为置位了,还应该产生一个中断

NCQ

Native Command Queuing 命令队列,使得设备支持最大32个命令队列的同时处理,设备可根据情况自己决定先执行命令队列中的哪个命令,以此提高执行效率。HHD的磁头运动、SSD的擦除动作都会影响执行时间,有效的重新命令排序能提高命令执行效率。

《SerialATA_Revision_3_1_Gold.pdf》13.6.8章节介绍了NCQ使用的PFDMA引擎(First-party DMA),并定义了如何组织DMA集散列表,使用PRD表,但没具体介绍细节。

SATA FIS

8个FIS的结构都不相同,每个FIS都有几个bit控制位。如: I :Interrupt 是否让Host产生中断,只会出现在设备 -> 主机的FIS中; D:Direction 方向。 N:Notification 位

Register Host to Device FIS 0x27,主机 -> 设备

用来传输主机的Shadow Register(可以理解为CPU的传达室)的内容到设备,与ATA/ATAPI指令字和寄存器相容。 当Device接收到一个有效的Register FIS - H2D,检查C bit的内容,然后更新命令寄存器 / 控制寄存器中的内容中,

C bit为‘1’,Device按照Command Register中的命令执行命令,

C bit为‘0’,Device按照Control Register中的内容执行控制请求。

相关推荐

笔记本电脑的硬盘接口型号如何查看
bst365老牌体育

笔记本电脑的硬盘接口型号如何查看

📅 09-16 👁️ 379
坦克世界什么服务器好用
bst365老牌体育

坦克世界什么服务器好用

📅 09-13 👁️ 5926
世界火炉是哪个城市(八大火炉是哪四个城市)
beat365官网备用

世界火炉是哪个城市(八大火炉是哪四个城市)

📅 08-07 👁️ 8687