AHCI-SATA协议是一种用于连接计算机主板与SATA硬盘等设备的标准接口规范,支持NCQ等功能,提升数据传输效率。
### SATA-AHCI协议详解
#### 一、引言
SATA-AHCI(Serial ATA Advanced Host Controller Interface)是一种新型硬盘控制技术,为了解决传统IDE接口无法满足日益增长的数据传输需求而诞生。它通过标准化的方法定义了主机与存储设备之间的交互方式,极大地提高了数据传输速度并简化了系统设计。本段落将基于《Serial ATA AHCI 1.3 Specification》这一文档,详细介绍SATA-AHCI协议的主要特性、架构以及关键寄存器的配置。
#### 二、概述
SATA-AHCI是一种用于串行ATA(SATA)硬盘的高级主机控制器接口标准,该标准定义了一种新的硬件和软件接口,旨在提高性能和兼容性。与传统的IDE或PATA相比,SATA-AHCI提供了更好的性能和更低的功耗,并支持热插拔等功能。
#### 三、范围
SATA-AHCI协议规范涵盖了主机控制器的硬件接口、寄存器配置、命令集等方面,旨在提供一个统一的标准,使不同制造商生产的SATA设备能够相互兼容。此外,该标准还定义了一系列高级功能,如端口多路复用和端口电源管理等。
#### 四、不在范围内
本规范不涉及具体的硬件实现细节(例如电路设计和布线规则);也不包括特定操作系统下的驱动程序实现细节。
#### 五、框图
SATA-AHCI的基本架构包括以下几个部分:
- **主机控制器**:负责与CPU通信,并管理所有SATA设备。
- **端口**:每个端口可以连接一个SATA设备。
- **命令队列**:用于处理来自操作系统的读写请求。
- **任务文件结构**:存储命令和状态信息。
- **命令表**:包含一系列待执行的操作指令。
#### 六、约定
文档中的术语和缩写遵循一定的命名规则,以确保读者能够准确理解其含义。例如,“command slot”表示命令槽位,“command list”表示命令列表。
#### 七、定义
- **Command List (命令列表)**:一组待处理的命令集合。
- **Command Slot (命令槽位)**:每个命令槽位包含一个独立的任务文件结构。
- **CS**:指代命令槽位。
- **D2H (Device to Host)**:设备到主机方向的数据流。
- **Device (设备)**:任何连接到主机控制器的存储设备。
- **FIS (Frame Information Structure)**:帧信息结构,用于传输命令和数据。
- **H2D (Host to Device)**:主机到设备方向的数据流。
- **HBA (Host Bus Adapter)**:主机总线适配器,即主机控制器。
- **na**:不适用的情况。
- **Port (端口)**:物理连接点,每个端口可连接一个设备。
- **PRD (Physical Region Descriptor)**:物理区域描述符,用于指示数据传输的位置。
- **Queue (队列)**:用来组织待处理命令的结构。
- **Register Memory (寄存器内存)**:用于存储控制器状态和配置信息的内存区域。
- **Task File (任务文件)**:包含命令参数和状态信息的结构体。
- **System Memory (系统内存)**:计算机中用于运行应用程序的主内存。
#### 八、工作原理
SATA-AHCI的工作流程主要包括以下几个步骤:
1. **初始化**:系统启动时,BIOS或UEFI检测到AHCI控制器,并对其进行基本的初始化配置。
2. **驱动加载**:操作系统加载相应的驱动程序来管理控制器。
3. **命令处理**:当操作系统需要访问磁盘时,会向控制器发送读写命令。
4. **数据传输**:控制器解析命令并将数据发送到或从磁盘中读取。
5. **状态报告**:完成操作后,控制器会向操作系统报告结果。
#### 九、与传统软件的交互
SATA-AHCI协议的一个重要特点是它能够与传统软件环境(如旧版操作系统)兼容。通过使用AHCI模式,在没有专门支持AHCI的驱动程序的情况下,大多数操作系统也能识别和支持SATA设备。
#### 十、参考文献
本段落档参考了Intel公司发布的《Serial ATA AHCI 1.3 Specification》规范,该文档详细介绍了SATA-AHCI协议的技术细节。
#### 十一、寄存器配置
SATA-AHCI协议中定义了一系列寄存器用于配置和监控控制器的状态。这些寄存器主要位于PCI头部空间中,包括但不限于以下几种:
- **ID - Identifiers (标识符)**:用于识别控制器的信息。
- **CMD - Command (命令)**:控制AHCI控制器的操作。
- **STS - Device Status (设备状态)**:报告设备当前的状态。
- **RID - Revision ID (修订版本)**:控制器的版本信息。
- **CC - Class Code (