SATA Host 使用说明¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.0 | 01/06/2026 | |
| 1.1 | 05/11/2026 |
1. 概述¶
本文档介绍 Mhera 平台 SATA Host 控制器的使用方法,包括 U-Boot 和 Kernel 两个阶段的配置说明。
SATA 控制器包含以下两个主要模块:
-
AHCI Controller:高级主机控制器接口,负责 SATA 协议处理
-
SATA PHY:物理层接口,负责信号传输和电气特性控制
💡 提示:Mhera 平台支持两路独立的 SATA Port,可同时连接两个 SATA 设备。
2. 关键词说明¶
| 术语 | 全称 | 说明 |
|---|---|---|
| AHCI | Advanced Host Controller Interface | 进阶主机控制器接口,定义了主机控制器与 SATA 设备之间的通信规范 |
| ATA | Advanced Technology Attachment | 连接 HDD 等存储设备的接口标准 |
| SATA | Serial ATA | 串行 ATA,采用串行方式传输数据的总线接口 |
| PHY | Physical Layer | 物理层,负责信号的编码、解码和传输 |
| PMP | Port Multiplier | 端口倍增器,用于扩展 SATA 接口数量 |
| FBS | FIS-Based Switching | 基于 FIS 的切换机制,提高 PMP 性能 |
3. 功能特性¶
✅ 设备支持
- 支持 HDD(机械硬盘)、SSD(固态硬盘)、CD-ROM 等标准 SATA 设备
- 支持端口倍增器(PMP),可扩展单个 SATA 接口连接多个设备
✅ 传输速率
- 支持 SATA GEN1(1.5 Gbps)
- 支持 SATA GEN2(3.0 Gbps)
- 支持 SATA GEN3(6.0 Gbps)
✅ 硬件规格
- Mhera 平台提供 2 路 独立的 SATA Port
- 每路 Port 配备独立的 PHY 和 AHCI 控制器
- 支持 DMA 一致性(dma-coherent)优化
4. U-Boot 用法介绍¶
本节介绍 U-Boot 阶段的 SATA Host 驱动配置和使用方法。
4.1 驱动配置¶
4.1.1 menuconfig 配置¶
在 U-Boot 源码目录下执行 make menuconfig,按照以下路径启用 SATA 驱动:
Device Drivers
└── [*] Sgs drivers --->
├── [*] Sgs ACP Bridge driver
└── [*] Sgs SATA HOST
├── [*] Sgs sata apply hd link
└── [*] Sgs sata apply hd link vote
⚠️ 注意:必须选中所有上述选项才能完整启用 SATA Host 功能。
4.1.2 DTS 节点配置¶
在 U-Boot 设备树文件中添加以下节点配置。注意:U-Boot 和 Kernel 的 DTS 配置略有不同。
4.1.2.1 SATA Port0 配置¶
/* SATA Port0 PHY 配置 */
sgs_sataphy: sgs-sata-phy {
compatible = "sgs,sataphy";
reg-names = "phyd", "phya", "ahci_misc", "phya2";
reg = <0x1F287600 0x200>, <0x1F287800 0x200>, <0x1F287400 0x200>, <0x1F287a00 0x200>;
phy_mode = <2>; /* PHY 速率模式:0=GEN1, 1=GEN2, 2=GEN3 */
tx_ssc_mode = <0>; /* 扩频时钟:0=关闭, 1=开启 */
tx_gen1_gen2_Vpp = <0xFF>,<0xFF>; /* GEN1/GEN2 发送电压摆幅(0xFF=默认值) */
tx_gen3_de_emphasis = <0xFF>,<0xFF>,<0xFF>; /* GEN3 去加重参数 */
rx_eq_rs1 = <0xFF>,<0xFF>,<0xFF>; /* 接收均衡参数 RS1 */
rx_eq_rs2 = <0xFF>,<0xFF>,<0xFF>; /* 接收均衡参数 RS2 */
rx_eq_ctle = <0xFF>; /* 接收均衡参数 CTLE */
port_id = <0>; /* Port 编号:0 表示第一路 SATA */
#phy-cells = <0>;
status = "okay";
};
/* SATA Port0 AHCI 控制器配置 */
sata {
compatible = "sgs,sata";
reg-names = "ahci", "ahci_port0";
reg = <0x1F346800 0x100>, <0x1F346900 0x100>;
phy-names = "sataphy";
phys = <&sgs_sataphy>; /* 引用对应的 PHY 节点 */
fbs_mode; /* 启用 FIS-Based Switching 模式 */
sata_acp; /* 启用 ACP 模式 */
dma-coherent; /* 启用 DMA 一致性优化 */
status = "okay";
};
4.1.2.2 SATA Port1 配置¶
/* SATA Port1 PHY 配置 */
sgs_sata1phy: sgs-sata1-phy {
compatible = "sgs,sataphy";
reg-names = "phyd", "phya", "ahci_misc", "phya2";
reg = <0x1F288400 0x200>, <0x1F288600 0x200>, <0x1F288200 0x200>, <0x1F288800 0x200>;
phy_mode = <2>;
tx_ssc_mode = <0>;
tx_gen1_gen2_Vpp = <0xFF>,<0xFF>;
tx_gen3_de_emphasis = <0xFF>,<0xFF>,<0xFF>;
rx_eq_rs1 = <0xFF>,<0xFF>,<0xFF>;
rx_eq_rs2 = <0xFF>,<0xFF>,<0xFF>;
rx_eq_ctle = <0xFF>;
port_id = <1>; /* Port 编号:1 表示第二路 SATA */
#phy-cells = <0>;
status = "okay";
};
/* SATA Port1 AHCI 控制器配置 */
sata1 {
compatible = "sgs,sata";
reg-names = "ahci", "ahci_port0";
reg = <0x1F346A00 0x100>, <0x1F346B00 0x100>;
phy-names = "sataphy";
phys = <&sgs_sata1phy>; /* 引用对应的 PHY 节点 */
fbs_mode;
sata_acp;
dma-coherent;
status = "okay";
};
4.1.3 DTS 参数说明¶
4.1.3.1 AHCI 控制器参数¶
| 属性 | 说明 | 是否需要修改 |
|---|---|---|
compatible |
用于驱动匹配,标识设备类型 | ❌ 禁止修改 |
reg-names |
寄存器区域名称列表 | ❌ 不需要修改 |
reg |
寄存器地址和大小 | ❌ 不需要修改 |
phy-names |
PHY 名称列表 | ❌ 不需要修改 |
phys |
引用的 PHY 节点 | ❌ 不需要修改 |
fbs_mode |
启用 FIS-Based Switching 模式 | ❌ 不需要修改 |
sata_acp |
启用 ACP 模式 | ❌ 不需要修改 |
dma-coherent |
启用 DMA 一致性优化 | ❌ 不需要修改 |
status |
设备状态("okay"/"disabled") | ✅ 可选修改 |
4.1.3.2 PHY 参数¶
| 属性 | 说明 | 可配置值 | 是否需要修改 |
|---|---|---|---|
compatible |
用于驱动匹配 | "sgs,sataphy" | ❌ 禁止修改 |
reg |
寄存器地址和大小 | 固定地址 | ❌ 不需要修改 |
reg-names |
寄存器区域名称列表 | "phyd","phya","ahci_misc","phya2" | ❌ 不需要修改 |
phy_mode |
PHY 速率模式 | 0=GEN1, 1=GEN2, 2=GEN3 | ✅ 根据需求修改 |
tx_ssc_mode |
扩频时钟模式 | 0=关闭, 1=开启 | ✅ 根据需求修改 |
tx_gen1_gen2_Vpp |
GEN1/GEN2 发送电压摆幅 | 0xFF=默认值 | ✅ 根据信号质量调整 |
tx_gen3_de_emphasis |
GEN3 去加重参数 | 详见第 6 节 CTS 设定 | ✅ 根据信号质量调整 |
rx_eq_rs1 |
接收均衡参数 RS1 | 详见第 6 节 CTS 设定 | ✅ 根据信号质量调整 |
rx_eq_rs2 |
接收均衡参数 RS2 | 详见第 6 节 CTS 设定 | ✅ 根据信号质量调整 |
rx_eq_ctle |
接收均衡参数 CTLE | 详见第 6 节 CTS 设定 | ✅ 根据信号质量调整 |
port_id |
Port 编号 | 0=Port0, 1=Port1 | ❌ 不需要修改 |
status |
PHY 使能状态 | "okay" / "disabled" | ✅ 可选修改 |
💡 提示:PHY 参数中的
0xFF值表示使用默认配置。如需优化信号质量,请参考第 6 节 HW CTS 设定流程。
4.1.4 命令行使用实例¶
U-Boot 提供了 scsi 命令集来操作 SATA 设备(SATA 设备在 U-Boot 中被识别为 SCSI 设备)。
4.1.4.1 设备扫描与信息查询¶
# 重置并扫描 SCSI 总线,检测新设备或变化的设备
scsi reset
scsi scan
# 显示所有可用的 SCSI 设备信息
scsi info
# 选择或显示当前 SCSI 设备([dev] 为设备编号)
scsi device [dev]
# 显示指定设备的分区表(不指定 dev 则显示所有设备)
scsi part [dev]
4.1.4.2 数据读写操作¶
# 从 SCSI 设备读取数据到内存
# 用法:scsi read <内存地址> <起始块号> <块数量>
scsi read addr blk# cnt
# 从内存写入数据到 SCSI 设备
# 用法:scsi write <内存地址> <起始块号> <块数量>
scsi write addr blk# cnt
4.1.4.3 FAT 文件系统操作¶
# 列出 SCSI 设备根目录文件(设备编号 0)
fatls scsi 0
# 从 FAT 文件系统加载文件到内存
# 用法:fatload scsi <设备号> <内存地址> <文件名> <字节数> <位置>
fatload scsi 0 addr filename bytes pos
# 写入文件到 FAT 文件系统
# 用法:fatwrite scsi <设备号> <内存地址> <文件名> <字节数> <偏移量>
fatwrite scsi 0 addr filename bytes offset
4.1.4.4 使用示例¶
# 完整的 U-Boot SATA 启动流程示例
=> scsi reset
=> scsi scan
=> scsi info
=> scsi part 0
=> fatls scsi 0:1
=> fatload scsi 0:1 0x23000000 kernel.bin
=> bootm 0x23000000
⚠️ 注意:
- SATA 设备在 U-Boot 中通过 SCSI 子系统访问
- 使用前必须先执行
scsi reset和scsi scan- 设备编号通常从 0 开始
5. Kernel 用法介绍¶
本节介绍 Linux Kernel 阶段的 SATA Host 驱动配置和使用方法。
5.1 驱动配置¶
5.1.1 menuconfig 配置¶
在 Linux Kernel 源码目录下执行 make menuconfig,按照以下路径启用 SATA 驱动:
Device Drivers
├── SCSI device support --->
│ ├── [*] SCSI device support
│ ├── [*] legacy /proc/scsi/support
│ └── [*] SCSI disk support
│
├── [*] Serial ATA and Parallel ATA drivers (libata)
│ ├── [*] SATA Port Multiplier support
│ └── [*] Platform AHCI SATA support
│
└── [*] SGS SoC platform drivers --->
├── [*] Sgs ACP Bridge driver
└── [*] Sgs SATA HOST
├── [*] Sgs sata apply hd link
└── [*] Sgs sata apply hd link vote
💡 提示:
- 选择上述选项后,SATA 驱动将被编译进内核(Built-in)
- 如果选择编译为模块(M),将生成
drv-sata-host.ko和drv-sata-phy.ko两个模块文件
5.1.2 DTS 节点配置¶
在 Kernel 设备树文件中添加以下节点配置。注意:与 U-Boot DTS 相比,Kernel DTS 需要额外的中断和时钟配置。
5.1.2.1 SATA Port0 配置¶
/* SATA Port0 PHY 配置 */
sgs_sataphy: sgs-sata-phy {
compatible = "sgs,sataphy";
reg-names = "phyd", "phya", "phya2", "ahci_misc"; /* 注意顺序与 U-Boot 不同 */
reg = <0x0 0x1F287600 0x200>, <0x0 0x1F287800 0x200>,
<0x0 0x1F287a00 0x200>, <0x0 0x1F287400 0x200>;
/* PHY 参数配置 */
phy_mode = <2>;
tx_ssc_mode = <0>;
tx_gen1_gen2_Vpp = <0xFF>,<0xFF>;
tx_gen3_de_emphasis = <0xFF>,<0xFF>,<0xFF>;
rx_eq_rs1 = <0xFF>,<0xFF>,<0xFF>;
rx_eq_rs2 = <0xFF>,<0xFF>,<0xFF>;
rx_eq_ctle = <0xFF>;
port_id = <0>;
#phy-cells = <0>;
status = "ok"; /* Kernel 使用 "ok" 而非 "okay" */
};
/* SATA Port0 AHCI 控制器配置 */
sata {
compatible = "sgs,sata";
reg-names = "ahci", "ahci_port0";
reg = <0x0 0x1F346800 0x100>, <0x0 0x1F346900 0x100>;
interrupts = <GIC_SPI INT_IRQ_SATA_MAC IRQ_TYPE_LEVEL_HIGH>; /* 中断配置 */
clocks = <&CLK_sata_pm>, /* 电源管理时钟 */
<&CLK_sata_phy_108>, /* PHY 108M 时钟 */
<&CLK_sata_phy_200>, /* PHY 200M 时钟 */
<&CLK_sata_phy_432>; /* PHY 432M 时钟 */
phy-names = "sataphy";
phys = <&sgs_sataphy>;
fbs_mode;
sata_acp;
dma-coherent;
};
5.1.2.2 SATA Port1 配置¶
/* SATA Port1 PHY 配置 */
sgs_sata1phy: sgs-sata1-phy {
compatible = "sgs,sataphy";
reg-names = "phyd", "phya", "phya2", "ahci_misc";
reg = <0x0 0x1F288400 0x200>, <0x0 0x1F288600 0x200>,
<0x0 0x1F288800 0x200>, <0x0 0x1F288200 0x200>;
phy_mode = <2>;
tx_ssc_mode = <0>;
tx_gen1_gen2_Vpp = <0xFF>,<0xFF>;
tx_gen3_de_emphasis = <0xFF>,<0xFF>,<0xFF>;
rx_eq_rs1 = <0xFF>,<0xFF>,<0xFF>;
rx_eq_rs2 = <0xFF>,<0xFF>,<0xFF>;
rx_eq_ctle = <0xFF>;
port_id = <1>;
#phy-cells = <0>;
status = "ok";
};
/* SATA Port1 AHCI 控制器配置 */
sata1 {
compatible = "sgs,sata";
reg-names = "ahci", "ahci_port0";
reg = <0x0 0x1F346A00 0x100>, <0x0 0x1F346B00 0x100>;
interrupts = <GIC_SPI INT_IRQ_SATA2_MAC IRQ_TYPE_LEVEL_HIGH>;
clocks = <&CLK_sata2_pm>,
<&CLK_sata2_phy_108>,
<&CLK_sata2_phy_200>,
<&CLK_sata2_phy_432>;
phy-names = "sata1phy";
phys = <&sgs_sata1phy>;
fbs_mode;
sata_acp;
dma-coherent;
};
5.1.3 DTS 参数说明¶
5.1.3.1 AHCI 控制器参数(Kernel 额外配置)¶
| 属性 | 说明 | 是否需要修改 |
|---|---|---|
compatible |
用于驱动匹配 | ❌ 禁止修改 |
#address-cells |
子节点地址信息字长 | ❌ 禁止修改 |
#size-cells |
子节点地址范围字长 | ❌ 禁止修改 |
interrupts |
中断号及触发方式 | ❌ 禁止修改 |
clocks |
时钟源引用 | ❌ 禁止修改 |
reg |
寄存器地址和大小 | ❌ 不需要修改 |
reg-names |
寄存器区域名称列表 | ❌ 不需要修改 |
phys |
引用的 PHY 节点 | ❌ 不需要修改 |
phy-names |
PHY 名称列表 | ❌ 不需要修改 |
fbs_mode |
启用 FIS-Based Switching 模式 | ✅ 根据需求修改 |
sata_acp |
启用 ACP 模式 | ❌ 不需要修改 |
dma-coherent |
启用 DMA 一致性优化 | ❌ 不需要修改 |
5.1.3.2 PHY 参数(Kernel 额外配置)¶
| 属性 | 说明 | 可配置值 | 是否需要修改 |
|---|---|---|---|
compatible |
用于驱动匹配 | "sgs,sataphy" | ❌ 禁止修改 |
reg |
寄存器地址和大小 | 固定地址 | ❌ 不需要修改 |
reg-names |
寄存器区域名称列表 | "phyd","phya","phya2","ahci_misc" | ❌ 不需要修改 |
phy_mode |
PHY 速率模式 | 0=GEN1, 1=GEN2, 2=GEN3 | ✅ 根据需求修改 |
tx_ssc_mode |
扩频时钟模式 | 0=关闭, 1=开启 | ✅ 根据需求修改 |
tx_gen1_gen2_Vpp |
GEN1/GEN2 发送电压摆幅 | 0xFF=默认值 | ✅ 根据信号质量调整 |
tx_gen3_de_emphasis |
GEN3 去加重参数 | 详见第 6 节 CTS 设定 | ✅ 根据信号质量调整 |
rx_eq_ctle |
接收均衡参数 CTLE | 详见第 6 节 CTS 设定 | ✅ 根据信号质量调整 |
rx_eq_rs1 |
接收均衡参数 RS1 | 详见第 6 节 CTS 设定 | ✅ 根据信号质量调整 |
rx_eq_rs2 |
接收均衡参数 RS2 | 详见第 6 节 CTS 设定 | ✅ 根据信号质量调整 |
status |
PHY 使能状态 | "ok" / "disabled" | ✅ 可选修改 |
5.1.4 模块加载顺序¶
如果 SATA 驱动编译为内核模块(.ko 文件),请按以下顺序加载:
⚠️ 注意:
- 必须先加载
drv-sata-phy.ko,再加载drv-sata-host.ko- 如果驱动编译为 Built-in(内置),则无需手动加载模块
- 模块加载成功后,系统会自动识别连接的 SATA 设备
6. HW CTS 设定¶
本节介绍如何通过 Sysfs 接口进行 SATA 信号质量调优。CTS(Compliance Test Suite)设定用于优化 PHY 层的传输参数,确保信号完整性。
🎯 目标:通过调整 PHY 参数,优化 SATA 信号质量,解决连接不稳定、传输错误等问题。
6.1 设定流程概览¶
HW CTS 设定分为以下步骤,必须按顺序执行:
⚠️ 注意:必须先设定传输速率(test_gen),再设定测试模式(cts_pattern)。因为 PHY 驱动在进入 CTS pattern 时需要先获知速率信息才能正确进行 force speed。
6.2 Sysfs 接口路径¶
CTS 设定通过 Sysfs 接口完成,节点位于:
6.3 步骤一:设定传输速率(Speed Mode)¶
6.3.1 速率模式说明¶
| test_gen 值 | 传输速率 | 说明 |
|---|---|---|
| 0 | 1.5 Gbps | SATA GEN1 |
| 1 | 3.0 Gbps | SATA GEN2 |
| 2 | 6.0 Gbps | SATA GEN3 |
6.3.2 配置方法¶
# 1. 查看当前速率模式
cat test_gen
# 2. 设置为 GEN1 (1.5 Gbps)
echo 0 > test_gen
# 3. 设置为 GEN2 (3.0 Gbps)
echo 1 > test_gen
# 4. 设置为 GEN3 (6.0 Gbps)
echo 2 > test_gen
6.4 步骤二:设定测试模式(Pattern)¶
6.4.1 Pattern 类型说明¶
| Pattern 值 | 模式名称 | 说明 |
|---|---|---|
| 0 | HFTP | High Frequency Test Pattern |
| 1 | MFTP | Mid Frequency Test Pattern |
| 2 | LFTP | Low Frequency Test Pattern |
| 3 | LBP | Low Bit Pattern |
| 4 | SSOP | Spread Spectrum Oscillation Pattern |
6.4.2 配置方法¶
# 1. 查看当前 Pattern 设置
cat cts_pattern
# 2. 设置 Pattern(例如设置为 HFTP)
echo 0 > cts_pattern
# 3. 设置 Pattern(例如设置为 MFTP)
echo 1 > cts_pattern
6.5 步骤三:设定 TX 参数¶
TX 参数包括去加重(De-emphasis)和电压摆幅(Vpp),用于优化信号质量。
6.5.1 参数格式¶
| 参数 | 说明 | 可选值 |
|---|---|---|
enable |
GEN3 去加重使能 | 0=仅使用Vpp, 1=使用去加重 |
db |
去加重档位(仅 enable=1 时有效) | 0~3 |
level |
电压摆幅档位 | 0~8 |
6.5.2 去加重档位说明¶
| db 值 | 去加重强度 | 适用场景 |
|---|---|---|
| 0 | -1.5 dB | 短距离传输 |
| 1 | -2.5 dB | 中距离传输 |
| 2 | -3.5 dB | 中长距离传输 |
| 3 | -6.0 dB | 长距离传输 |
6.5.3 电压摆幅说明¶
| level 值 | 电压摆幅 | 支持 GEN1 | 支持 GEN2 | 支持 GEN3 |
|---|---|---|---|---|
| 0 | 0.4 Vpp | ✅ | ✅ | ✅ |
| 1 | 0.5 Vpp | ✅ | ✅ | ✅ |
| 2 | 0.6 Vpp | ✅ | ✅ | ✅ |
| 3 | 0.7 Vpp | ✅ | ✅ | ✅ |
| 4 | 0.8 Vpp | ✅ | ✅ | ✅ |
| 5 | 0.9 Vpp | ❌ | ✅ | ✅ |
| 6 | 1.0 Vpp | ❌ | ❌ | ✅ |
| 7 | 1.1 Vpp | ❌ | ❌ | ✅ |
| 8 | 1.2 Vpp | ❌ | ❌ | ✅ |
⚠️ 注意:
- GEN1/GEN2 仅支持 Vpp 调整(level 0~4 或 0~5)
- GEN3 支持 Vpp 和去加重调整
- 去加重功能仅在 GEN3 模式下可用
6.5.4 配置示例¶
场景 1:仅调整 Vpp(GEN1/GEN2/GEN3 通用)¶
# GEN1/GEN2:使用 0.7Vpp(不使用去加重)
echo 0 0 3 > de_emphasis
# GEN3:使用 0.7Vpp(不使用去加重)
echo 0 0 3 > de_emphasis
场景 2:GEN3 使用去加重¶
# GEN3:-1.5dB 去加重 + 0.7Vpp
echo 1 0 3 > de_emphasis
# GEN3:-3.5dB 去加重 + 0.8Vpp
echo 1 2 4 > de_emphasis
# GEN3:-6.0dB 去加重 + 1.0Vpp(长距离传输)
echo 1 3 6 > de_emphasis
6.6 DTS 参数映射¶
完成 CTS 测试并确认最佳参数后,需要将参数更新到设备树文件中。
6.6.1 参数对应关系¶
Sysfs 命令格式:echo [enable] [db] [level] > de_emphasis
对应的 DTS 参数:
6.6.2 特殊值说明¶
| 值 | 含义 | 使用场景 |
|---|---|---|
0xFF |
使用默认值 | 不进行信号优化时 |
0x00~0x03 |
db 档位 | enable=1 时有效 |
0x00~0x08 |
level 档位 | 电压摆幅档位 |
6.6.3 DTS 配置示例¶
示例 1:使用默认配置¶
示例 2:GEN3 仅使用 Vpp(不使用去加重)¶
示例 3:GEN3 使用去加重¶
/* enable=1 (启用去加重), db=1 (-2.5dB), level=4 (0.8Vpp) */
tx_gen3_de_emphasis = <1>, <1>, <4>;
/* enable=1 (启用去加重), db=3 (-6.0dB), level=6 (1.0Vpp) */
tx_gen3_de_emphasis = <1>, <3>, <6>;
示例 4:GEN1/GEN2 配置¶
/* GEN1/GEN2 仅使用 Vpp,不使用去加重 */
tx_gen1_gen2_Vpp = <3>, <3>; /* 两个值分别对应 GEN1 和 GEN2 */
/* GEN3 de-emphasis 参数保留默认值(仅 GEN1/GEN2 生效时) */
tx_gen3_de_emphasis = <0xFF>, <0xFF>, <0xFF>;
6.7 完整配置流程示例¶
假设通过测试确定最佳参数为:GEN3 模式,-2.5dB 去加重,0.8Vpp
步骤 1:通过 Sysfs 验证参数¶
# 1. 进入 SATA sysfs 目录
cd /sys/devices/virtual/sgs/sata0
# 2. 设置速率为 GEN3
echo 2 > test_gen
# 3. 设置测试模式为 MFTP
echo 1 > cts_pattern
# 4. 设置 TX 参数:-2.5dB 去加重 + 0.8Vpp
echo 1 1 4 > de_emphasis
# 5. 进行信号质量测试(使用示波器或其他测试设备)
# 如果测试通过,说明参数配置正确
步骤 2:更新到设备树¶
将验证通过的参数写入设备树文件:
sgs_sataphy: sgs-sata-phy {
compatible = "sgs,sataphy";
reg-names = "phyd", "phya", "ahci_misc", "phya2";
reg = <0x1F287600 0x200>, <0x1F287800 0x200>,
<0x1F287400 0x200>, <0x1F287a00 0x200>;
phy_mode = <2>; /* GEN3 模式 */
tx_ssc_mode = <0>;
/* GEN1/GEN2 Vpp 配置 */
tx_gen1_gen2_Vpp = <0xFF>, <0xFF>; /* 使用默认值 */
/* GEN3 配置:-2.5dB 去加重 + 0.8Vpp */
tx_gen3_de_emphasis = <1>, <1>, <4>;
/* RX 均衡参数(如有需要也可调整) */
rx_eq_rs1 = <0xFF>, <0xFF>, <0xFF>;
rx_eq_rs2 = <0xFF>, <0xFF>, <0xFF>;
rx_eq_ctle = <0xFF>;
port_id = <0>;
#phy-cells = <0>;
status = "okay";
};
步骤 3:重新编译并测试¶
6.8 常见问题¶
Q1:如何判断需要调整 CTS 参数?¶
症状:
- SATA 设备无法识别
- 传输过程中出现超时或 CRC 错误
- 高速传输(GEN3)不稳定
解决方案:
- 先尝试降低速率(GEN3 → GEN2 → GEN1)
- 调整 Vpp 值(提高电压摆幅)
- 启用去加重功能(GEN3)
Q2:enable 参数什么时候设为 0 或 1?¶
- enable=0:仅使用 Vpp 调整,适用于 GEN1/GEN2 或不需要去加重的场景
- enable=1:启用去加重,仅适用于 GEN3 长距离传输或信号质量差的场景
Q3:如何选择合适的 level 值?¶
| level | 电压 | 推荐场景 |
|---|---|---|
| 0~2 | 0.4~0.6V | 短距离传输(<0.5m) |
| 3~4 | 0.7~0.8V | 中等距离(0.5~1m) |
| 5~8 | 0.9~1.2V | 长距离(>1m)或信号差 |
Q4:RX 均衡参数需要调整吗?¶
通常情况下,TX 参数(Vpp 和去加重)已经足够。只有在 TX 参数调整后仍有问题时,才考虑调整 RX 均衡参数(rx_eq_rs1, rx_eq_rs2, rx_eq_ctle)。