最近看了一下关于 SATA 省电方面的技术文档,总结一下遇到的名词术语。

首先是经常能在文档上看到的 Partial 和 Slumber。简单的说这两种都是 SATA PHY 休眠的状态。

Partial: 功耗大约75mW, 比Standby状态功耗约200mW低了一多半, 从Partial状态退回Phy Rdy的时间不能超过10us.

Slumber: 功耗大约25mW, 比Partial状态功耗更低,从Slumber状态退回Phy Rdy的时间也相对较长,但不能超过10ms。

可以看到Partial和Slumber的差别在于后者睡得更深功耗更低,同时回来越慢。

Host与Device均可以发起请求 (HIPM/DIPM),进入Partial/Slumber。

  • HIPM = Host Initiated Link Power Management 
  • DIPM = Device Initiated Link Power Management

HOST  能够发起是因为HOST知道何时有读取写入请求,后面没有操作即可要求“睡一会”;DEVICE 同样能够发起是因为设备自己知道对于上面的命令什么时候能够完成操作,完成要求之后马上要求“睡一会”来省电。

此外,现在的PCH上还能看到DEVSLP Pin。在Partial/Slumber的省电模式下,硬盘都必须让自己的传输电路保持在工作状态,以便在SATA Host需要的时候能把它唤醒,这样的话硬盘需要消耗一定电力随时响应唤醒。DevSlp就是把这个传输电路完全关掉,然后专门加了一个低速的Pin来负责接收唤醒通知。

从上图可以看到,打开 DEVSLP支持后功耗降低到了5mW左右,而Exit Latency进一步加长20ms级别。

再进一步,虽然DEVSLP 告诉硬盘彻底休息,但是VCC仍然存在已久会有一些电源消耗。这时候,再引入RTD D3Cold 的概念。通常是通过某个 GPIO来实现的。当确定硬盘可以进入D3 Cold 时,主机会通过拉GPIO的方式彻底切断硬盘供电,这样硬盘就完全不需要消耗任何电力了。

我个人不喜欢 RTD3 的设计,因为从实践上来说,在断电上电过程中经常会遇到各种问题,很可能是设备本身不支持。例如:某个设备上电100ms后才能正常工作,而系统设计刚好是100ms左右即开始对其进行访问,卡在这样的点上之后很容易出现试验几百次才会fail一次的情况也让Debug变得非常困难。

从上面也可以看出,省电技术对于醒来的时间有着严格的要求。微软本身是没有打算在普通机械硬盘上实现 Modern StandBy 功能的,因为对于带有机械部件的设备来说这样的要求有些强人所难。

如果你需要进行这方面的试验,推荐使用 http://www.lab-z.com/chdevslp/ 介绍的TxBench 检查设备已经相应功能已经打开。

有兴趣的朋友推荐继续阅读,本文内容来自下面文章

1. https://mp.weixin.qq.com/s?__biz=MzIwNTUxNDgwNg==&mid=2247484118&idx=1&sn=7ff7934ae45c6f3e92567f863faf0dc1&chksm=972ef38fa0597a99b556e2181a2d12a17c353fc2f8aedc1e733a9495a23515c77b92c365003b&scene=21#wechat_redirect SATA系列专题之五:Link Power Management解析

2. http://www.ssdfans.com/blog/2016/10/01/sata-devslp%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F/  SATA DevSlp是什么?

3. https://sata-io.org/sites/default/files/documents/SATADevSleep-and-RTD3-WP-037-20120102-2_final.pdf

如果有任何错,欢迎在留言中指出。

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>