7.1.10、Power Mode State Machine(电源状态机):
不同功率模式之间的关系如下图,图中共有上篇文章提到的4种基本电源状态以及3种过渡状态,SSU指的是START STOP UNIT命令,PC指的是START STOP UNIT命令帧结构中的Power Conditions字段,文字解释在下面:
图中的1)只有导致 Pre-Sleep 转换的 SSU 命令将 IMMED 设置为 1 时,才会发生这种转换(Pre-Sleep -> Pre-Active)。
图中的2)只有导致 Pre-PowerDown 转换的 SSU 命令将 IMMED 设置为 1 时,才会发生这种转换(Pre-ProwerDown -> Pre-Active)。
图中的3)如果 bInitPowerMode = 00h,则该自动转换应在设备初始化结束时发生(具体参见上篇)。
下表两个表是PC(POWER CONDITIONS)的值和IMMED的值含义(之后还会再具体说明):
一、Transitions from Powered On Power Mode(Power On Mode):
在以下情况下,设备应进入 Powered On:供电、硬件复位、EndPointReset 或 Host UniPro 热复位后。
一.1、Transition from Powered_On to Active
当设备准备好开始上电初始化时,将发生这种转变。
二、Transitions from Pre‐Active Power Mode
二.1、Transition from Pre-Active to Active
当设备满足处于Active power mode的要求时,将发生这种转换。
三.1、Transition from Active to Idle
当设备完成任何正在进行的操作时,可能会发生这种转变。
三.2、Transition from Active to Pre-Sleep
This transition shall occur
三.3、Transition from Active to Pre-PowerDown
四.1、Transition from Idle to Active
如果设备处理需要处于Active power mode的请求,则将发生此转换。
五.1、Transition from Pre-Sleep to Pre-Active
当设备满足处于Sleep power mode的要求时,将发生此转换。
如果设备服务器处理 POWER CONDITION 字段设置为 1h 的 START STOP UNIT 命令,则此转换将发生。
六.2、 Transition from UFS-Sleep to Pre-PowerDown
如果设备服务器处理 POWER CONDITION 字段设置为 3h 的 START STOP UNIT 命令,则此转换将发生。
七.1、 Transition from Pre-PowerDown to Pre-Active
如果导致 Pre-PowerDown 转换的 SSU 命令将 IMMED 设置为 1 时,并且当设备服务器处理 POWER CONDITION 字段设置为 1h 的 START STOP UNIT 命令时,将发生此转换。
七.2、Transition from Pre-PowerDown to PowerDown
当设备满足处于 UFS-PowerDown 电源模式的要求时,将发生这种转换。
八、Transitions from UFS‐PowerDown Power Mode
八.1、Transition from UFS-PowerDown to Pre-Active
如果设备服务器处理 POWER CONDITION 字段设置为 1h 的 START STOP UNIT 命令,则此转换将发生。
7.1.11、SCSI command and UPIU transactions
可以通过读取 bCurrentPowerMode 属性检索当前功率模式。bCurrentPowerMode 是设备在任何电源模式下都需要返回的唯一属性。 如果设备未处于活动电源模式或空闲电源模式,则访问除 bCurrentPowerMode 以外的描述符、标志或属性的 QUERY REQUEST UPIU 可能会失败。
通过在 START STOP UNIT 命令将其 IMMED 位设置为 1,一旦接收到命令,设备就必须在进入过渡模式时做出响应。
IMMED 位设置为 1 的 START STOP UNIT 命令请求的并发电源模式更改的影响是供应商特定的。意思估计就是IMMED 位设置为 1的START STOP UNIT 命令的多种状态机更改,由供应商决定。
IMMED 位设置为零的 START STOP UNIT 命令导致转换到Active, Sleep, or PowerDown power modes,在设备达到命令指定的电源模式之前,不应以 GOOD 状态完成。
下表总结了每种电源模式允许的 SCSI 命令和 UPIU 事务。
7.1.12、Responses to SCSI commands
下表定义了Device well known logical unit对给定power mode的 START STOP UNIT 命令的响应。 假设 START STOP UNIT 命令中的 IMMED 位设置为零。
对于非 CDB (scsi命令规定字节数的一个数据结构)内容的情况,START STOP UNIT 命令可能不会以 GOOD 状态终止。
下表总结了Device well known logical unit可以针对各种设备电源模式对除 START STOP UNIT 之外的命令提供的响应。 Note1:用“其他”标识的行定义Device well known logical unit对除START STOP UNIT 命令和REQUEST SENSE 命令之外的命令的响应。
下表定义了各种device power modes的可轮询检测数据:
7.1.13、Power Management Command: START STOP UNIT:
当 START STOP UNIT 命令被发送到一个逻辑单元时,它可用于启用或禁用该逻辑单元,将所有缓存的逻辑块刷新到介质(对于包含缓存的逻辑单元),或者加载或弹出介质。
当START STOP UNIT 命令发送到UFS Device well known logical unit(W-LUN = 50h)时,它可以用来选择设备电源模式。
POWER CONDITION 字段选择所需的模式。 如果命令被发送到设备众所周知的逻辑单元之外的逻辑单元,则电源条件字段可以被忽略。
IMMED的值的含义在之前提到过了,1和0的区别,No Flush也已叙述,PC值为0则会直接停止指定的LU,N 的值由几何描述符(后边会提到Geometry Descriptor )中的 bMaxNumberLU 参数指示。PC为其他值会改变电源模式。
7.1.14、Power Mode Control :
下表定义了一系列用于控制active current levels and power modes.
下表显示了指定电源模式和上电或复位后 Active ICC 级别的 Device Descriptor 参数。 这些参数之前的文章都已经用到。
下表定义了Power Parameters Descriptor.的参数。 每个参数由16个元素组成,每个元素的大小为两个字节,其结构如表7-13所示,这些的含义之前的文章有所提及,主要描述了在某一个level下的电源功率。比如,对于VCC 的Active ICC level。VCC 当前消耗的最大峰值电流,是为活动模式定义的 16 个电流消耗水平中的一个。
、每个逻辑单元可能处于活动电源状态和停止电源状态。 关于these two logical unit power conditions.的定义,请参见 [SPC] 和 [SBC]。
、在上电或任何类型的复位事件后,所有逻辑单元都应处于活动电源状态。
、如果设备服务器处理 START STOP UNIT 命令且 START 位设置为 0 且 POWER CONDITION 字段设置为 0h,则将从活动功率状态转换到停止功率状态。
丶如果设备服务器处理 START STOP UNIT 命令且 START 位设置为 1 且 POWER CONDITION 字段设置为 0h,则将从停止电源状态转换为活动电源状态
、仅当设备处于活动电源模式或空闲电源模式时,才应发出用于更改逻辑单元电源条件(也就是PC的值)的 START STOP UNIT 命令,其他应当是自动完成的。
、只有当逻辑单元命令队列为空时,才应请求移动到停止电源状态。
、A transition in the device power mode state shall not change the logical unit power condition(设备电源模式状态的转换不应改变logical unit power condition。“condition”强调“身体状态”,而“state”则更重于表示“心理上的、精神上的状态” ).
、下表定义了逻辑单元对各种设备电源模式的 SCSI 命令的响应,假设逻辑单元处于活动电源状态。
如果逻辑单元处于停电状态,则设备服务器应:
、提供可轮询的检测数据,检测键设置为 NOT READY,附加检测代码设置为 LOGICAL UNIT NOT READY, INITIALIZING COMMAND REQUIRED;
、终止每个媒体访问命令或 TEST UNIT READY 命令,并在 CHECK CONDITION 状态下将检测键设置为 NOT READY,并将附加检测代码设置为 LOGICAL UNIT NOT READY,INITIALIZING COMMAND REQUIRED。