UFS支持7种Power Mode,其中4种基本模式和3种过渡模式。通过START STOP UNIT命令和其他一些属性控制。电源模式独立于上下行链路的状态。
1、模式
下表列出了7种模式的一些基本信息:
Mode | Describe | M-PHY status | Mode transition |
Active | 执行命令或者后台操作 | STALL/HS-BURST,SLEEP/PWM_BURST | From:Poweron、pre-actvie To:idle、pre-sleep、pre-powerdown |
Idle | 设备没有任何操作 | STALL/SLEEP/ HIBERN8 | From:active To:active |
Pre-active | 进入active前的过度态 |
| From:Pre-Sleep, Sleep, Pre-PowerDown, or PowerDown. To:active |
Sleep | 显著降低设备的功耗 | HIBERN8 | From:pre-sleep To:pre-active、pre-powerdown |
Pre-sleep | 进入sleep模式的过渡态 |
| From:Active To:sleep、pre_active |
Powerdown | 最节省功耗的模式 |
| From:pre-powerdown To:pre-active |
Pre-powerdown | 进入powerdown模式前的过渡态 |
| From:sleep/active To:PowerDown or Pre-Active. |
各个模式的状态转换如下图所示:
状态转换 | 条件 |
Powered_On to Active | 设备准备开始上电初始化时 |
Pre-Active to Active | 设备满足active模式下的条件时自动进入 |
Active to Idle | 设备完成所有正在执行的操作时 |
Active to Pre-Sleep | 1、设备初始化结束且bInitPowerMode=0; 2、设备接到START STOP UNIT 命令且POWER CONDITION=2H; |
Active to Pre-PowerDown | 设备接到START STOP UNIT 命令且POWER CONDITION=3H; |
Idle to Active | 设备收到处理请求时 |
Pre-Sleep to Pre-Active | START STOP UNIT命令IMMED=1时进入pre-sleep,之后START STOP UNIT命令的POWER CONDITION=1H; |
Pre-Sleep to Sleep | 满足进入sleep模式的条件后自动进入 |
Sleep to Pre-Active | 设备接到START STOP UNIT 命令且POWER CONDITION=1H; |
Sleep to Pre-PowerDown | 设备接到START STOP UNIT 命令且POWER CONDITION=3H; |
Pre-PowerDown to Pre-Active | START STOP UNIT命令IMMED=1时进入pre-powerdown,之后START STOP UNIT命令的POWER CONDITION=1H; |
Pre-PowerDown to PowerDown | 满足进入powerdown模式的条件后自动进入 |
PowerDown to Pre-Active | 设备接到START STOP UNIT 命令且POWER CONDITION=1H; |
各个模式下的命令响应:
不同的模式能够响应的命令不同,下表列出了不同模式下能够响应的SCSI命令和UPIU
设备对SCSI命令的响应:
SSU命令
其他非SSU命令
2、SSU命令
SSU命令用来使能失能一个LU、将缓存flush到设备或者加载弹出设备;电源管理命令START STOP UNIT发送到UFS Device well-known logical unit可以控制设备的power mode。
POWER CONDITION域用来选择期望的模式。发送到普通LU的命令POWER CONDITION会被忽略。
SSU fields
3、属性
电源模式和电流等级
通过bCurrentPowerMode可以获得当前设备的power mode。bCurrentPowerMode是唯一一个可以在任何模式下响应主机命令的参数。
bActiveICCLevel属性用来指定active模式下的电流等级。在active模式下,有16种电流配置,决定了设备的最大功耗。在active mode下,选定了bActiveICCLevel后,在VCC、VCCQ和VCCQ2上的最大电流就决定了。假设bActiveICCLevel=N,那么VCC、VCCQ和VCCQ2上的最大电流分别是wActiveICCLevelsVCC[N]、wActiveICCLevelsVCCQ[N]、wActiveICCLevelsVCCQ2[N].等级0功耗最低性能最差,等级15功耗最高性能最好。
参数格式:
bInitActiveICCLevel参数用来确定设备上电后的电流等级。
汇总一下:
属性 | 描述 |
bActiveICCLevel | 决定最大功耗等级 |
bInitActiveICCLevel | 决定上电后或者复位后的功耗等级 |
bInitPowerMode | 决定初始化后进入哪种电源模式 |
bCurrentPowerMode | 获取当前功耗模式 |