• SATA系列专题之五:Link Power Management解析


    一、故事前传

    在之前的文章中, 我们已经针对SATA的主要结构进行了较为详细的解析,详见前期文章:

    1,浅析SATA Physical Layer物理层OOB信号;

    2,SATA Link Layer链路层解析2.0-2.3;

    3,SATA Transport Layer传输层解析3.0-3.4;

    4,SATA Command Layer命令层解析4.0-4.1;

    我们这里主要解析一下SATA Link Power Management的相关内容。

    二、SATA Link Power Management解析

    一般情况下,SATA Phys会处在Phy Rdy状态(Standby),确保Host与Device之间正常通信。如果SATA host一直处在Idle的情况,并不需要SATA interface处于通信状态,而此时,SATA Phys仍处在Phy Rdy状态(Standby),这样是不是有点浪费呢?

    基于降低能效的考虑,SATA Spec定义了两种低功耗的状态:PartialSlumber

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

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

    在Link Power Management协议中有四个关键的Primitive基元参与:

    • PMREQ_S: 请求进入Slumber状态, 这个基元会被一直发送,知道收到对方的回应(PMACK或者PMNAK).

    • PMREQ_P: 请求进入Partial状态, 这个基元会被一直发送,知道收到对方的回应(PMACK或者PMNAK).

    • PMACK:对PMREQ_S或者PMREQ_P的回应,接受进入Slumber或者Partial的请求。

    • PMNAK:对PMREQ_S或者PMREQ_P的回应,不接受进入Slumber或者Partial的请求。

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

    • HIPM = Host Initiated Link Power Management 

    • DIPM = Device Initiated Link Power Management

    我们针对HIPM举例,解析一下Link Power Management Protocol:

    1. Host应用层初始化Partial/Slumber请求;

    2. Host传输层收到上层传过来Partial/Slumber请求后,转送至下一层链路层;

    3. Host链路层收到Partial/Slumber请求后,进入Partial(L_TPMPartial)或者Slumber(L_TPMSlumber),并发送Primitive基元"PMREQ_P"或者"PMREQ_S"至物理层,这个过程中,会一直发送PMREQ,直至收到物理层的回应(PMACK或者PMNAK);

    4. Host物理层通过物理链接将Primitive基元"PMREQ_P"或者"PMREQ_S"传送至Device物理层;

    5. Device物理层将收到的信息全部转送至Device链路层;

    6. Device链路层一旦收到Primitive基元"PMREQ_P"或者"PMREQ_S",就会进入PMOff 状态;

    7. 进入PMOff状态后,Device链路层会发送Primitive基元PMACK至物理层。这个过程中会发送4~16个PMACK。之后,链路层进入ChkPhyRdy状态,并向物理层发送信号,告知其进入Partial/Slumber状态;

    8. Device物理层将PMACK发送至Host物理层;

    9. Device物理层检测到链路层发送的Partial/Slumber信号后,进入Electrical Idle状态(0V, no signal);

    10. Host物理层收到PMACK后,转送至链路层;

    11. Host链路层检测到PMACK后,进入ChkPhyRdy状态,并中止发送PMREQ;

    12. 进入ChkPhyRdy后,Host链路层会向物理层发送信号,告知其进入Partial/Slumber状态。然后Host物理层进入进入Electrical Idle状态(0V, no signal);

    从上面的Protocol中,我们可以看到,一旦进入Partial/Slumber状态,Link Phy就会进入electrical idle。如果要从Partial/Slumber状态中唤醒,就需要依赖COMWAKE OOB信号重新建立Link。

    有关OOB信号的详细介绍请见之前文章:

    浅析SATA Physical Layer物理层OOB信号;

    此外,由于Link Power Mangement是选择性的,所以并不要求所有的device一定要支持这个功能。一块SSD是否支持,可以查看其Identity Drive data:

  • 相关阅读:
    机器学习中的二分类问题评价指标之精确率、召回率、F1值通俗理解
    二叉搜索树【理论+代码】
    基于Freertos的工训机器人
    21 - 数据接口与selenium的基本用法
    Chrome插件精选 — 历史记录管理插件
    肖sir__mysql之navicat安装__003
    HBase与Hive集成
    Redis系列——redis启动,客户端day1-2
    Ubuntu20.04 安装 Matlab R2021a
    10个实用的CSS样式之悬浮卡片
  • 原文地址:https://blog.csdn.net/zhuzongpeng/article/details/126807361