增加了DevSlp这个feature以后,SATA IO也在原有的Partial&Slumber测试的基础上特别增加了对DevSlp的测试。
新的测试要求主要是关注DevSlp状态的进出是否正常,要实现这个必须具备两点:能让Device进入DevSlp,进去以后能够侦测到DevSlp的状态。
能否进入DevSlp的问题不用讨论,如果不能进,也不用测试了。
侦测状态,通过SATA Status Register (SCR0)就能够实现,这个Register的 [11:8] 映射到 Interface Power Management(IPM)设置。读取这个Register就能知道AHCI 控制器(Host)要求Device进入的状态。具体定义如下图。
通过读写这个Register可以知道Device能否成功的进出DevSlp。但是具体物理层上状态切换的各种时间参数,就没办法了测量了。
这些时间值的定义,之前的文章 《SATA DevSlp是什么?》一文解释过,想看中文的出门左转,过了英语四级的直接看下面英文也行。
专业的测试需要专业的仪器,有第三方的仪器可以做这种测试,见下图。
长这个样子,不看logo也知道谁家的东西,可以看到使用了专门支持DevSlp的线缆。
有两个针对DevSlp的case:
- IPM-12: Entering DevSleep Interface power state
- IPM-13: DevSleep interface power state exit latency
IPM-12重点是测DevSlp进入:
- 先让SSD进入DevSlp状态;
- 保持DevSlp信号有效的情况下,持续向SSD发包,确保SSD不会回应发过去的包
-
检查各种时间参数是否在规定范围内 (SATA 3.2里面没有包括DXET,但是测一下还是很有道理的)
下图是SATA Analyzer记录的测试结果
- MDAT:协议规定Host摇篮曲给Device听,至少要唱10ms,Host说到做到,唱了10ms又10ms,唱了10ms又10ms
- DXET: 未来的协议规定从Host唱摇篮曲100ms以后,Device必须睡着,Device也说到做到,60ms的时候睡着了
- 协议规定,Device进入DevSlp后,只要DevSlp还是置位状态,Host随便怎么弄,Device都不能醒,于是Host为了考验Device,100ms后开始丧心病狂地不停地发COMRESET要Device起来嗨
- Device没扛住 (测试fail),Device能够在DevSlp的状态下能够Detect到COMRESET,说明该功能没有做对。
IPM13的重点是测试DevSlp退出:
- 退出DevSlp并不需要完整的上电流程,而是使用COMWAKE信号让SATA链路快速进入PHY Ready状态
- DETO:协议规定Device从DevSlp状态下退出需要在20ms内完成。先Assert DevSlp信号让Device进入 DevSlp状态,然后De-Assert DevSlp信号开始发送OOB信号(同时启动一个Timer),Device必须在 20ms内响应OOB信号。 — 只要响应了就算测试通过,能不能完成OOBIPM13 不管,那是OOB测试的事情(任性啊)
下图是测试结果的截图
冯小刚导演的新片用的也是这种截图方式 – 这样的范爷,你喜欢吗?