SGS SATA DebugSOP手册¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.0 | 05/15/2026 |
1. SATA设备无法识别¶

| 流程 | 方法 | 出口条件 | 下一步 | 需提供给FAE的资料 | 相关可参考FAQ |
|---|---|---|---|---|---|
| A | 1.确认SATA硬盘本身是否正常,可接PC测试 2.确认SATA数据线连接是否牢固,更换已知正常的SATA数据线做交叉测试 3.使用万用表确认SATA供电电压是否在正常范围内(SATA Power 3.3V/5V/12V) |
出口条件1: 1.硬盘接PC也无法识别 > 硬盘问题 出口条件2: 1.更换SATA数据线后设备可以识别 > 数据线问题 出口条件3: 1.SATA供电电压异常 > 供电问题 出口条件4: 硬盘、数据线、供电均正常>无问题 |
出口条件1: >更换硬盘 出口条件2: >更换数据线 出口条件3: >流程结束,寻求硬件协助 出口条件4: >B |
出口条件3: ==>寻求硬件协助 |
|
| B | 1.确认DTS中SATA相关节点是否使能: cd \<kernel_path> vim mhera.dtsi 查找sata关键字,确认PHY节点(sgs-sata-phy/sgs-sata1-phy)和AHCI节点(sata/sata1)的status属性 Kernel: status = "ok" U-Boot: status = "okay" 2.若节点被注释或status为"disabled",则SATA功能未启用 |
出口条件1: 1.PHY节点或AHCI节点status不为"ok"/"okay",或被注释 > 节点未使能 出口条件2: 1.节点已使能>无问题 |
出口条件1: >将status改为"ok"或"okay" 出口条件2: >C |
出口条件1: ==>提供DTS配置文件 |
|
| C | 1.检查Kernel menuconfig中SATA相关配置是否已开启: Device Drivers → SCSI device support → [] SCSI device support / [] SCSI disk support Serial ATA and Parallel ATA drivers (libata) → [] Platform AHCI SATA support SGS SoC platform drivers → [] Sgs ACP Bridge driver SGS SoC platform drivers → [] Sgs SATA HOST / [] Sgs sata apply hd link / [*] Sgs sata apply hd link vote 2.确认驱动编译方式(Built-in或Module): 若为Module,确认加载顺序: 先insmod drv-sata-phy.ko,再insmod drv-sata-host.ko 3.确认Kernel启动参数中sata_disable_port是否被误设(0x1=disable port0, 0x2=disable port1) |
出口条件1: 1.menuconfig中SATA相关选项未全部开启 > 驱动未编译 出口条件2: 1.驱动编译为Module但未加载或加载顺序错误 > 模块加载问题 出口条件3: 1.sata_disable_port被设置导致端口被禁用 > 启动参数问题 出口条件4: 驱动配置正常>无问题 |
出口条件1: >开启所有相关选项重新编译 出口条件2: >按正确顺序加载模块 出口条件3: >修正启动参数 出口条件4: >D |
||
| D | 1.通过dmesg查看SATA初始化log,关注以下关键字: 1.1 "sata phy registered." 表示PHY驱动加载成功 1.2 "sata host X success registered." 表示AHCI Host加载成功 1.3 "sgs SATA link up" 表示PHY链路建立成功,会打印速率(GenX)和SStatus/SControl 1.4 "sgs SATA link down" 表示PHY链路未建立 1.5 "COMRESET failed" 表示链路复位失败 1.6 "get phyd/phya/ahci_misc resource fail" 表示寄存器映射失败 2.若dmesg无任何SATA相关log,回到C检查驱动配置 |
出口条件1: 1.dmesg无任何SATA/AHCI相关log > 驱动未加载,回到C 出口条件2: 1.dmesg显示PHY或Host注册失败 > DTS配置错误或驱动问题 出口条件3: 1.PHY和Host均注册成功,但"link down" > PHY链路未建立 出口条件4: 1."link up"但设备仍无法识别 > 系统层面问题 |
出口条件1: >C 出口条件2: >B 出口条件3: >E 出口条件4: >流程结束 |
出口条件2: >1.提供完整dmesg log >2.提供DTS配置文件 出口条件3: >1.提供完整dmesg log 出口条件4: >1.提供完整dmesg log |
|
| E | 1.通过sysfs节点查看SATA link状态: cat /sys/devices/virtual/sgs/sata0/sata_dump 输出说明: link err cnt: 链路错误计数 link gen1/gen2/gen3 cnt: 各速率的link成功计数 2.若link err cnt较高且所有gen cnt为0,说明PHY一直无法建立link 3.通过sysfs进行PHY参数调优,参考《SATA Host使用说明》第6节HW CTS设定流程: cd /sys/devices/virtual/sgs/sata0/ 3.1 先设定传输速率: echo [0/½] > test_gen 3.2 再设定测试模式: echo [0~4] > cts_pattern 3.3 调整TX参数: echo [enable] [db] [level] > de_emphasis 4.调优后配合示波器量测SATA TX信号眼图验证信号质量 5.dump AHCI和PHY寄存器信息提供给SWRD(寄存器bank/offset见附录) |
出口条件1: 1.调优PHY参数后链路恢复正常 > PHY参数调优解决,将参数更新到DTS 出口条件2: 1.调优PHY参数后链路仍无法建立 > 硬件信号层面问题 出口条件3: 1.获取到寄存器dump信息 ==> 提供给SWRD分析 |
出口条件1: >流程结束 出口条件2: >流程结束 出口条件3: ==>流程结束 |
出口条件1: >1.记录CTS调优过程和最终参数 >2.参考使用说明更新DTS 出口条件2: >1.提供完整dmesg log >2.提供示波器信号眼图 >3.dump所有SATA寄存器(AHCI: riux32_r 0x1A34/0x1A35全部offset; PHY: riu_r 0x1438/0x1439/0x143A/0x143B全部offset(Port0)或0x1441/0x143C/0x143D/0x143E全部offset(Port1)) 出口条件3: >1.dump所有SATA寄存器(AHCI: riux32_r 0x1A34/0x1A35全部offset; PHY: riu_r 0x1438/0x1439/0x143A/0x143B全部offset(Port0)或0x1441/0x143C/0x143D/0x143E全部offset(Port1)) ==>2.完整dmesg log |
2. SATA读写性能不达标¶

| 流程 | 方法 | 出口条件 | 下一步 | 需提供给FAE的资料 | 相关可参考FAQ |
|---|---|---|---|---|---|
| A | 1.通过dmesg确认SATA链路协商速率,检索"sgs SATA link up"关键字: 打印格式: "sgs SATA link up 6.0 Gbps (SStatus XXX SControl XXX)" 2.通过sysfs确认链路状态: cat /sys/devices/virtual/sgs/sata0/sata_dump 查看link gen1/gen2/gen3 cnt确认实际协商速率分布 3.通过AHCI PxSSTS寄存器确认当前速率: riux32_r 0x1A34 0x4A (Port0) bit[7:4]: 1=GEN1(1.5G), 2=GEN2(3G), 3=GEN3(6G) 4.确认DTS中phy_mode设置是否与预期速率一致: phy_mode=0 → GEN1, phy_mode=1 → GEN2, phy_mode=2 → GEN3 5.通过hdparm确认硬盘支持的最高速率: hdparm -I /dev/sda 查看"Supported SATA speeds" |
出口条件1: 1.实际协商速率低于双方支持的最高速率 > 链路速率协商不充分 出口条件2: 1.DTS中phy_mode设置低于预期 > DTS配置问题 出口条件3: 1.实际协商速率已达到预期但性能仍不达标 ==> 其他层面问题 |
出口条件1: >B 出口条件2: >流程结束,修改phy_mode后重新测试 出口条件3: ==>C |
||
| B | 1.参考《SATA Host使用说明》第6节HW CTS设定流程,通过sysfs调整PHY参数: cd /sys/devices/virtual/sgs/sata0/ 1.1 先设定传输速率: echo 2 > test_gen (GEN3=2) 1.2 再设定测试模式: echo 1 > cts_pattern (MFTP=1) 1.3 调整TX参数: echo [enable] [db] [level] > de_emphasis enable=0: 仅Vpp调整(适用于GEN1/GEN2/GEN3) enable=1: 启用去加重(仅适用于GEN3) db: 0=(-1.5dB), 1=(-2.5dB), 2=(-3.5dB), 3=(-6.0dB) level: 0=(0.4Vpp) ~ 8=(1.2Vpp) 2.建议先尝试提高Vpp(level值),逐步从3(0.7Vpp)增加到6(1.0Vpp)测试 3.若仅提高Vpp不够,GEN3下启用去加重(enable=1)配合适当db值测试 4.配合示波器量测SATA TX信号眼图验证信号质量改善 5.确认调优后参数是否稳定,重复测试多次 |
出口条件1: 1.调优PHY参数后性能恢复正常 > PHY参数调优解决 出口条件2: 1.调优后速率仍无法提升到预期 > 硬件信号质量限制 出口条件3: 1.示波器测量信号眼图不达标 ==> 硬件走线或SATA线缆问题 |
出口条件1: >流程结束,将调优后的参数更新到DTS 出口条件2: >流程结束 出口条件3: ==>流程结束 |
出口条件1: >1.记录CTS调优过程和最终参数 >2.参考使用说明更新DTS中tx_gen3_de_emphasis和tx_gen1_gen2_Vpp 出口条件2: >1.提供dmesg中速率协商log >2.提供示波器信号眼图 出口条件3: ==>1.提供示波器信号眼图 |
|
| C | 1.使用hdparm测试硬盘底层读写性能: hdparm -t /dev/sda (buffered disk read) hdparm -T /dev/sda (cache read) 2.使用fio工具进行更准确的性能测试: 顺序读: fio --name=read --rw=read --bs=4M --size=1G --numjobs=1 --direct=1 --iodepth=24 顺序写: fio --name=write --rw=write --bs=4M --size=1G --numjobs=1 --direct=1 --iodepth=24 随机读: fio --name=randread --rw=randread --bs=4K --size=1G --numjobs=1 --direct=1 --iodepth=24 随机写: fio --name=randwrite --rw=randwrite --bs=4K --size=1G --numjobs=1 --direct=1 --iodepth=24 3.确认测试命令是否正确,常见问题: 3.1 fio未加--direct=1导致测试了page cache 3.2 未使用--iodepth参数无法发挥NCQ性能 |
出口条件1: 1.hdparm缓冲读取性能正常,但fio direct IO性能低 > DMA或IO调度层面问题 出口条件2: 1.hdparm和fio性能均低 > 硬件层面或控制器层面问题 出口条件3: 1.测试命令有误,修正后性能恢复正常 ==> 测试方法问题 |
出口条件1: >D 出口条件2: >D 出口条件3: ==>流程结束 |
出口条件3: ==>确认使用正确的fio参数 |
|
| D | 1.使用top/vmstat观察SATA读写期间系统资源使用情况: 1.1 CPU Loading: top命令关注idle百分比(cpu loading = 100% - idle) 1.2 内存使用: free命令关注available内存 1.3 中断分布: cat /proc/interrupts 关注SATA MAC中断次数 2.若CPU Loading高,检查是否有其他高优先级任务抢占资源 3.检查SATA中断是否集中在单核处理 4.检查系统内存带宽是否为瓶颈: 使用mbw工具测试 |
出口条件1: 1.CPU Loading过高导致SATA处理不及时(idle接近0%) > CPU瓶颈问题 出口条件2: 1.内存不足导致频繁换页 > 内存瓶颈问题 出口条件3: 1.中断集中在单核 > 尝试绑核优化 出口条件4: 1.系统资源充足,性能仍不达标 > PHY信号质量或控制器层面问题 |
出口条件1: >流程结束 出口条件2: >流程结束 出口条件3: >尝试绑核后重新测试 出口条件4: >E |
出口条件4: >1.提供top/vmstat输出 >2.提供/proc/interrupts内容 |
|
| E | 1.综合调整PHY参数优化信号质量: 1.1 调整TX Vpp: 通过de_emphasis节点提高level值 1.2 GEN3下启用去加重: enable=1,调整db值 1.3 调整RX均衡参数: 修改DTS中rx_eq_rs1/rx_eq_rs2/rx_eq_ctle(通常TX参数已足够,仅在TX调优后仍有问题时调整) 2.确认SSC(扩频时钟)配置是否影响性能: cat /sys/devices/virtual/sgs/sata0/test_ssc DTS中tx_ssc_mode=0表示关闭SSC 3.配合示波器量测SATA信号眼图 4.若调整后性能有改善但仍未达标,dump完整寄存器信息提供给SWRD |
出口条件1: 1.调优PHY参数后性能恢复到预期水平 > PHY参数调优解决 出口条件2: 1.调优后性能有改善但仍低于预期 > 信号完整性限制 出口条件3: 1.所有调整后性能仍不达标 ==> 需要SWRD进一步分析 |
出口条件1: >流程结束,将参数更新到DTS 出口条件2: >流程结束 出口条件3: ==>流程结束 |
出口条件1: >1.记录调优前后的PHY参数对比 出口条件2: >1.提供示波器信号眼图 出口条件3: >1.dump所有SATA寄存器(AHCI: riux32_r 0x1A34/0x1A35全部offset; PHY: riu_r 0x1438/0x1439/0x143A/0x143B全部offset(Port0)或0x1441/0x143C/0x143D/0x143E全部offset(Port1)) >2.完整dmesg log和fio测试log ==>3.示波器信号波形 |
3. 附录¶
3.1 SATA sysfs调试节点说明¶
SATA PHY驱动注册后,会在sysfs创建以下调试节点:
节点路径:
- Port0:
/sys/devices/virtual/sgs/sata0/ -
Port1:
/sys/devices/virtual/sgs/sata1/节点名称 操作 说明 sata_dump cat 查看link错误计数和各速率link成功计数 test_gen cat / echo 查看/设置PHY测试速率:0=GEN1(1.5G), 1=GEN2(3G), 2=GEN3(6G) cts_pattern cat / echo 查看/设置CTS测试pattern: 0=HFTP, 1=MFTP, 2=LFTP, 3=LBP, 4=SSOP de_emphasis cat / echo 查看/设置TX参数:echo [enable] [db] [level] > de_emphasis test_ssc cat / echo 查看/设置SSC:0=关闭,1=开启
注意:CTS设定时必须先设定传输速率(test_gen),再设定测试模式(cts_pattern)。
de_emphasis参数说明:
| 参数 | 说明 | 可选值 |
|---|---|---|
| enable | GEN3去加重使能 | 0=仅Vpp, 1=使用去加重 |
| db | 去加重档位(enable=1时有效) | 0=(-1.5dB), 1=(-2.5dB), 2=(-3.5dB), 3=(-6.0dB) |
| level | 电压摆幅档位 | 0=(0.4Vpp) ~ 8=(1.2Vpp) |
3.2 AHCI关键寄存器¶
读写方法: riux32_r / riux32_w(bank 0x1A34、0x1A35 为 x32 寄存器)
| 寄存器 | Bank | Offset | 说明 |
|---|---|---|---|
| CAP | 0x1A34 (Port0) / 0x1A35 (Port1) | 0x00 | 控制器能力 |
| GHC | 同上 | 0x01 | 全局控制,bit31=AE(AHCI Enable) |
| PI | 同上 | 0x03 | Port Implemented |
| PxCLB | 同上 | 0x10 | Command List Base |
| PxFB | 同上 | 0x14 | FIS Base |
| PxIS | 同上 | 0x40 | Port Interrupt Status |
| PxIE | 同上 | 0x44 | Port Interrupt Enable |
| PxCMD | 同上 | 0x48 | Port Command |
| PxTFD | 同上 | 0x50 | Port Task File Data |
| PxSIG | 同上 | 0x54 | Port Signature |
| PxSSTS | 同上 | 0x4A | Port Serial Status bit[3:0]: 设备检测(1h=已连接) bit[7:4]: 协商速率(1h=GEN1, 2h=GEN2, 3h=GEN3) |
| PxSCTL | 同上 | 0x4B | Port Serial Control |
| PxSERR | 同上 | 0x4C | Port Serial Error |
| PxSACT | 同上 | 0x50 | Port Serial Active |
读写示例:
3.3 SATA PHY寄存器¶
读写方法: riu_r / riu_w
| 区域 | Port0 Bank | Port1 Bank | 大小 |
|---|---|---|---|
| phyd | 0x1439 | 0x143C | 0x200 |
| phya | 0x143A | 0x143D | 0x200 |
| phya2 | 0x143B | 0x143E | 0x200 |
| ahci_misc | 0x1438 | 0x1441 | 0x200 |
读写示例:
dump所有SATA寄存器示例(以Port0为例):
# AHCI寄存器 (x32)
riux32_r 0x1A34
# PHY寄存器 (全部bank)
riu_r 0x1438 # ahci_misc
riu_r 0x1439 # phyd
riu_r 0x143A # phya
riu_r 0x143B # phya2
dump所有SATA寄存器示例(以Port1为例):
# AHCI寄存器 (x32)
riux32_r 0x1A35
# PHY寄存器 (全部bank)
riu_r 0x1441 # ahci_misc
riu_r 0x143C # phyd
riu_r 0x143D # phya
riu_r 0x143E # phya2
3.4 DTS关键参数速查¶
| 属性 | 说明 | 可配置值 |
|---|---|---|
| phy_mode | PHY速率模式 | 0=GEN1(1.5G), 1=GEN2(3G), 2=GEN3(6G) |
| tx_ssc_mode | 扩频时钟 | 0=关闭,1=开启 |
| tx_gen1_gen2_Vpp | GEN1/GEN2发送电压摆幅 | 0xFF=默认值,0~5=手动档位 |
| tx_gen3_de_emphasis | GEN3去加重参数 | 0xFF=默认值,格式:\<enable> \<db> \<level> |
| rx_eq_rs1 | 接收均衡参数RS1 | 0xFF=默认值 |
| rx_eq_rs2 | 接收均衡参数RS2 | 0xFF=默认值 |
| rx_eq_ctle | 接收均衡参数CTLE | 0xFF=默认值 |
PHY参数中 0xFF 表示使用默认配置。如需优化信号质量,请参考《SATA Host使用说明》第6节HW CTS设定流程。