目录
一、SATA上电的三种状态

- PHYRDY:PHY层逻辑以及主要的PLL都被激活。PHY层处于同步状态可以正常的接收和发送数据。
- Partial :PHY层逻辑上电,但是处于节能模式。如果不支持Partial到Slumber状态的自动转换,从该状态退出应该不大于10us。如果支持Partial到Slumber状态的自动转换,那么退出延迟不大于Slumber退出延迟的最大延迟。
- Slumber: 休眠状态,最大退出时间不超过10ms。
PHY层状态机梳理
主机侧 PHY层初始化状态机梳理
(1)HP1:HR_Reset:用于传输COMRESET信号。如果支持异步信号恢复,则需要将ResumePending(相当于一个控制信号)置为0。
(2)跳转条件:
- 上电复位和复位请求均失效->HR_AwaitCOMINIT
- 上电复位或者复位请求有效->HR_RESET
(3)进入该状态的条件:
- 上电复位
- 复位请求
- 接收到COMINIT信号(支持异步恢复的主机,并且是在HP2、HP2B状态之外接收)
(4)COMRESET发送规范:6次突发,或者是6次突发的整数倍
(5)COMRESET发送的时刻:
- 在整个状态期间持续发送
- 从进入该状态的时候开始发送,到离开该状态时结束发送
- 离开该状态时发送
(5)支持异步恢复的主机,在接收到的COMINIT信号失效后的10ms内,应该响应COMRESET信号。
(1)接口处于静止状态
(2)跳转条件
- 从设备中识别COMINIT信号,跳转至 HR_AwaitNoCOMINIT
- 没有从设备中识别到COMINIT信号(不支持异步信号恢复或者在HP2状态下RetryInterval变量没有超时),继续在该状态保持
- 没有从设备中识别到COMINIT信号(支持异步信号恢复并且在HP2状态下RetryInterval变量超时),跳转至HR_RESET
RetryInterval变量:对于支持异步信号恢复的主机,重新尝试的时间计数
(1)接口处于静止状态
(2)跳转条件
- 已经接收不到设备发送过来的COMINIT信号 ,跳转到下一状态HR_Calibrate
- 还能够接收到COMINIT信号 ,继续在该状态保持
对于不支持异步信号恢复的主机,这个状态可以在接收到COMINIT信号后异步进入(上电复位或复位请求除外)
(1)性能校准
(2)跳转条件
- 校准完成或者不需要校准 ,跳转到 HR_COMWEAK
- 校准未完成 ,继续在改状态保持
这个状态对于不需要矫正的设备可以绕过。
(1)发送COMWEAK信号序列
(2)跳转条件
- 没有接收到设备发送过来的COMWEAK信号,跳转至HR_AwaitCOMWEAK状态
- 已经接收到COMWEAK信号,则直接跳转至HR_AwaitNoCOMWEAK
(1)接口静止
(2)跳转条件
- 接收到COMWEAK信号,则跳转至HR_AwaitNoCOMWEAK
- COMWEAK信号没有识别到(不支持异步信号恢复或者在HP2状态下RetryInterval变量没有超时),继续在该状态保持
- COMWEAK信号没有识别到,支持异步信号恢复或者在HP2状态下RetryInterval变量超时,并且ResumePending = 0,跳转至HR_RESET,从新开始发送COMRESET信号
- COMWEAK信号没有识别到,支持异步信号恢复或者在HP2状态下RetryInterval变量超时,并且ResumePending = 1,跳转至HR_COMWEAK,从新开始发送COMWEAK信号
(1)接口静止
(2)跳转条件:等到识别不到COMWEAK信号,则跳转至HR_AwaitAlign,否则,不跳转。
(1)主机以最低速率发送D10.2字符
(2)跳转条件
- 检测到ALIGN原语后跳转至HR_AdjustSpeed
- 没有检测到ALIGN原语,并且在该状态已经停留873.8us,跳转至HR_Reset
- 没有检测到ALIGN原语,并且在该状态停留时间没有超过873.8us,继续停留在该状态
注意:
(1)主机应在COMWAKE信号撤销后不超过533 ns(20个Gen1双字周期)内开始发送D10.2字符
(2)设备在释放COMWAKE信号(通过保持空闲状态超过175 ns)后,允许有53.3 ns(2个Gen1 DWORD时间)的窗口才开始发送有效字符。在此窗口期内,总线处于空闲状态,可能受到其他设备的串扰影响。需特别防范串扰导致ALIGNP原语的误检测.
(1)接口非静止,但是没有被定义
(2)跳转条件
- 已经调整到适当的速度,跳转至HR_SendAlign
- 没有调整到适当的速度,继续在该状态调整
注意
(1)主机传输无效信号的最大时间周期为53ns
(1)主机发送相同速度的ALIGN原语
(2)跳转条件
- 发现三个连续的NON_ALIGN原语,跳转至HR_Ready
- 没有发现三个连续的NON_ALIGN原语,继续在该状态保持
注意:
(1)非ALIGNP原语可通过检测字节0位置的K28.3控制字符来识别
(1)接口可以正常发送数据
(2)跳转条件
- Partial信号被置位,跳转到HR_Partial
- Slumber信号被置位,跳转到HR_Slumber
- 未收到电源管理请求(如PMREQ_P/S),不支持异步信号恢复,未启动信号恢复轮询,已检测到有效信号,继续保持该状态
- 未收到电源管理请求(如PMREQ_P/S),支持异步信号恢复,启动信号恢复轮询,没有检测到有效信号,跳转至HR_RESET
例子:
企业存储阵列中的硬盘故障处理:
某硬盘突发断电(未发送PMREQ),主机检测到信号丢失。
主机检查自身配置:
若不支持异步恢复或未启用轮询 → 记录错误日志,等待人工干预。
若信号3秒内自动恢复 → 继续I/O操作,无需触发复位。
(1)接口静止
(2)跳转条件
- Partial信号已经撤销,并且没有被发现COMWEAK信号,则跳转至HR_COMWEAK
- Partial信号已经撤销,并且发现COMWEAK信号,则跳转至HR_AwaitNoCOMWEAK
- Slumber信号置位,并且支持Partial状态到Slumber状态的自动跳转
- Partial信号置位,则一直处于此状态
(1)接口静止 如果主机支持异步信号恢复,则将ResumePending设置为1
(2)跳转条件
- Slumber信号撤销,并且没有发现COMWEAK信号,跳转至HR_COMWEAK
- Slumber信号撤销,并且发现COMWEAK信号,跳转至HR_AwaitNoCOMWEAK
- Slumber信号置位,继续在该状态保持