AHCI协议阅读笔记

作者

QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118

AHCI HBA位于系统中的位置

AHCI,即高级主机控制器接口(Advanced Host Controller Interface),是一种基于串行 ATA(SATA)接口的通信协议。AHCI 由英特尔提出,并由多家硬盘厂商和主板厂商共同参与制定。2004 年,AHCI 1.0 规范发布,此后不断更新完善,以适应技术的发展和需求的变化。
AHCI HBA,即主机总线适配器,支持1到32个端口。HBA必须支持ATA和ATAPI设备,并且必须同时支持PIO和DMA协议。HBA可能可选地在每个端口上支持命令列表以减少开销,并支持串行ATA本机通过FPDMA排队命令协议为每个设备排队,最多32个条目。HBA可以可选地支持64位寻址。
AHCI HBA在系统中的位置如下图所示,一个HBA被集成在主板芯片组内,提供2个SATA端口,一个HBA位于第一级PCI/PCI-X总线下,提供4个SATA端口,最后一个HBA位于一个P2P Bridge扩展出来的第二级PCI/PCI-X总线,并通过一个端口多路复用器(Port Multiplier)芯片对外提供2个端口。
532

PCI信息

AHCI HBA

BAR寄存器

AHCI描述了一种系统内存结构,其中包含一个用于控制和状态的通用区域,以及一个描述命令列表的条目表。每个命令列表条目都包含编程所需的信息,SATA设备以及指向描述符表的指针,用于在系统内存和设备。AHCI不包含SATA的传输层、链路层或物理层相关的信息,因为这在SATA规范中有完整的描述。

SCRx Port Register

SCR0~SCR4寄存器,可判断端口Link状态,是否Link Up,端口速度等
299

系统内存分配

HBA寄存器指向系统内存空间,最多32个端口,每个端口包含Command ListReceived FIS Structure
300
Command List最多32个,
301
Received FIS Structure大小是256字节,

  1. DMA setup FIS被拷贝到DSFIS
  2. PIO setup FIS被拷贝到PSFIS
  3. D2H Register FIS被拷贝到RFIS
  4. Set Device Bits FIS被拷贝到SDBFIS
  5. When an unknown FIS arrives from the device, the HBA copies it to the UFIS area in this structure, and
    sets PxSERR.DIAG.F, which is reflected in PxIS.UFS when the FIS is posted to memory. A maximum of
    64-bytes of an unknown FIS type may be sent to an HBA. If an unknown FIS arrives that is longer than
    64-bytes, the FIS is considered illegal and is handled as described in section 6.1.2. While the length of
    the FIS is unknown to the HBA, it is expected to be known by system software, and therefore only the
    valid bytes shall be processed by software. The HBA is not required to tolerate receiving an unknown FIS
    when the HBA is expecting a Data FIS from the device or when the HBA is about to transfer a Data FIS to
    the device based on the command protocol being used.

302
Command List的每一项Command Header的结构,每一个Command Header都指向一个Command TablePRDTL指示Command Table里有多少项(第二级了),16bit,最多65535个,W指示数据方向,A指示这是一个ATAPI命令,CFL指示Command FIS的长度,PRDBC指示读写长度,32bit,所以单个Command Header最大传输2GB数据,每页4KB,则最大0xFFFF000,256MB-4KB。
303
304
305
Command Table结构如下,CFIS长度由CFL决定,最大64字节,ACMD只有在ATAPI命令时才用到,PRDT的每一项最大指向一片4MB的内存。
306
307
CFIS内容参考SATA协议,下面是类型0x27的FIS,
308
309

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值