UFS电气特性
三个供电电压,VCC,VCCQ和VCCQ2,分别给UFS设备模块供电。
UFS设备主要包括三部分:
- 前端UFS接口(M-PHY): VCCQ2一般给M-PHY或其它一些低电压模块供电。
- UFS控制器 : VCCQ一般给闪存输入输出接口和UFS控制器供电。
- 闪存介质(图中的Memory模块): VCC给闪存介质供电。
UFS 2.2协议规定的电压值为:
UFS 3.1协议规定的电压值为:
版本更新电气特性上最大的变化就是VCC低电压的更改,由原来的1.8V调整为2.5V。
UIC status
UFS协议采用MIPI的M-PHY作为物理层和UniPro作为其数据链路层。M-PHY有高速模式(High Speed Mode, HS-MODE)和低速模式 (Low Speed Mode, LS-MODE)。其中,高速模式下,M-PHY有两种状态:STALL和HS-BURST。低速模式下,M-PHY有三种状态:LINE-CFG,SLEEP和PWM-BURST。
当链路上没有数据传输时,M-PHY会自动切换到STALL或者SLEEP状态下,这两种状态为省电状态。除此之外,M-PHY还有一种更加省电的状态,那就是HIBERN8 (Hibernate,休眠状态),这种状态下,M-PHY极为省电。UFS主机和UFS设备不可能一直交互数据,总有闲下来的时候。当UFS主机没有读写UFS设备,它会让彼此链路进入休眠状态,即HIBERN8。那UFS主机如何通知M-PHY切换到休眠状态呢?
设备管理器可以略过传输层(UTP),直接管理与控制互联层(UIC)。主机设备管理器可以通过原语(Primitive)直接与UFS互联层(UIC,即MIPI的UniPro和M-PHY)通信。UFS让UIC进入和退出休眠的原语:DME_HIBERNATE_ENTER和DME_HIBERNATE_EXIT。
下图1显示了进入H8状态的高级 MSC 流程。以下部分描述了显示 SAP 原语的详细流程。绿色表示应用层交换数据、红色表示PA层交换数据、以及其他的DME交换数据。图2为退出H8状态的MSC流程,原理相同。
Host and Memory
UIC中的电源控制是UFS主机和设备之间链路的省电模式,对UFS设备来说,链路只是整个UFS设备的一部分。一个UFS设备是否省电,除了看其链路,还需要考虑UFS控制器、存储介质等是否省电,即看整个UFS设备是否有好的电源管理。
因此,UFS协议规定了四种功耗模式:Active,Idle,Power Down和Sleep(简称AIDS),外加3个过渡功耗模式:Pre-Active, Pre-Sleep和Pre-PowerDown,一共是7种功耗模式。
- Active:UFS设备在执行命令或者做后台任务(Background Operation)时处于这种状态;
- Idle:UFS设备空闲时,即既没有来自UFS主机的命令,自身也没有后台任务需要处理,设备就处于该状态;
- Power Down:掉电模式下,所有电源供电VCC, VCCQ和VCCQ2都可能被掐断(取决UFS设备设计),该模式是最省电的功耗模式了。
- Sleep:当处于闲时状态即进入睡眠。睡眠模式下,VCC电源可能被切断(取决UFS设备设计)。VCC一般给闪存供电,即切断闪存供电。
可以从上图中看到,功耗模式的切换使用的是SSU命令。什么是SSU? SSU是Start Stop Unit的缩写,它是UFS协议中的一个基本命令。SSU命令用来使能失能一个LU、将缓存flush到设备或者加载弹出设备;主机通过发送SSU命令到UFS device well-known logical unit来切换设备的功耗模式。
POWER CONDITION域用来选择期望的模式。发送到普通LU的命令POWER CONDITION会被忽略。
注意,UFS设备的这些功耗状态,和前面说的UIC层中M-PHY接口的STALL,SLEEP或者HIBERN8状态是独立的,两者没有必然联系。比如,当前M-PHY处于HIBERN8状态,UFS设备可以处于以上状态中的任何一种,比如UFS设备可以是处于Active状态,没有要求说你休眠了我也得跟着休眠。
一个好的UFS设备的电源管理当然不应该等到主机发功耗切换命令来进入省电模式,而是自己能主动做一些事情来省电。下面是一个比较好的设备省电模式的例子说明:
UFS刚上电时,UFS进入Active状态,一段时间如果没有来自主机的命令,自己内部也没有后台任务要处理,UFS设备将进入Idle状态。Idle意味着无事可做,这时候主机也没有发任何SSU命令要求UFS设备进入指定的状态,好的UFS设备,这个时候就要想想怎么去省电。举例来说,如果当前M-PHY处于HIBERN8状态,说明主机目前不会访问UFS设备,因此,UFS设备可以做一些节能设计:比如把当前UFS设备的软硬件上下文保存到闪存,然后切断所有电源以达到省电目的。待M-PHY接口退出HIBERN8状态,UFS设备上电,然后把软硬件上下文加载运行。
当然,功耗降低带来的必然结果就是命令响应速度变慢,因为如果UFS设备休眠了,它就不能及时的响应主机的命令,因为它需要先退出休眠(比如需要把休眠之前保存的上下文重新加载,这往往比较花时间),然后再响应主机命令。因此休眠唤醒也是个技术活,在追求最大节能的同时,还要兼顾用户体验。
属性
电源模式和电流等级
- 通过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功耗最高性能最好。
总结
属性 | 描述 |
---|---|
bActiveICCLevel | 决定最大功耗等级 |
bInitActiveICCLevel | 决定上电后或者复位后的功耗等级 |
bInitPowerMode | 决定初始化后进入哪种电源模式 |
bCurrentPowerMode | 获取当前功耗模式 |