从SATA 3.2开始,有了一个新的功能 DevSlp。DevSlp是一个信号,通过发送这个信号让盘进入一个非常非常省电的状态。
自古以来,钓鱼岛就是中国的,SATA也一直允许盘进入省电模式,那就是Partial 和Slumber模式
1. Partial模式 – PHY处于低功耗状态, exit Latency<10 us
2. Slumber – PHY处于低低功耗状态, exit Latency < 10 ms
下图可以看到Partial/Slumber把功耗从Active State的1000 mW降低到了100 mW 左右 (不错,但是还不够)
因Partial/Slumber的省电模式下,盘都必须让自己的传输电路保持在工作模式,以便在SATA Host需要的时候能把盘唤醒,这样的话,其实盘睡的不舒服,省电效果也不好。
DevSlp就是把这个传输电路完全关掉,然后专门加了一个低速的Pin来负责接收唤醒通知。
DevSlp以后效果如下 (妈妈再也不用担心我笔记本没电了)
功耗降低到了5mW左右,而Exit Latency进一步加长20ms级别,但是PC用户层面根本感觉不出10us,10ms,20ms的区别好吧。
这个多出来的Pin从哪里来?
原本标准的2.5/3.5寸SATA接口上已经没有多余的Pin脚了,SATA 3.2把Pin 3单独拿出来用于DevSlp,而原本Pin1,Pin2 和Pin3是用于3.3V供电的。
下图是SATA 3.0的Pin脚定义
到了SATA 3.2,Pin3用来做DevSlp控制
DevSlp注意事项
必须Host,盘都支持才可以工作,Host置位DevSlp信号前需要确保:
- OOB结束以后的Identify Device Command,Device回复说支持DevSlp
- Host已经通过Set Feature Command打开Device的DevSlp
- 没有Outstanding的command
DevSlp 置位DevSlp时:
- MDAT: Host要么不弄,要弄必须保持置位状态〉=10ms (或者Identify Device Data log里规定的时间)
- DMDT: Device 在DevSlp置位后需要在10us内detect到
- Host和Device可以把PHY和其他东西(PLL,时钟,NAND)都关掉
- DevSlp置位后,Host和Device 双方都不可以主动通过PHY进行通信,即使一方通信,另一方也不准搭理
退出DevSlp时:
- DETO:Device必须在20ms(或者Identify Device Data log里规定的时间)内detect到OOB信号
- 双方使用COMWAKE或者COMRESET/COMINIT进行重新建立连接
文章最后,感谢Marvell的”笑笑爸爸”赞助的SATA 3.2 Spec