做存储板级设计的朋友,应该都体会过UFS 3.1供电这个“看着简单、上手才知道水有多深”的模块。说它看着简单,是因为规范层面就三路电:VCC、VCCQ、VCCQ2;说它水深,是因为这三路的电压范围、上电顺序、掉电时序、纹波预算,任何一个环节埋雷,都会在量产或者高低温测试阶段集中爆发。我自己在几款主控平台和存储扩展板上踩过不少坑,这篇就把UFS 3.1供电这点事从头到尾捋一遍,重点讲清楚三路电的电压范围、JEDEC对上下电时序的要求,以及实际调试时的测量方法,给正在做手机、平板、车载或者服务器存储小板的朋友做个参考。
1. 为什么UFS 3.1要拆成VCC、VCCQ、VCCQ2三路供电
1.1 三路电分别负责哪部分电路
UFS 3.1封装里其实集成了好几类差异极大的电路:NAND闪存阵列、闪存控制器核心逻辑、M-PHY高速串行收发器,以及参考时钟和PLL电路。这些模块的工作电压、噪声敏感度和功耗特性完全不在一个量级,所以JEDEC在设计UFS规范时就把供电拆成了三路独立电源轨,各管一摊。
先看VCC,这是主电源轨,直接给NAND闪存阵列供电,负责读、写、擦除操作时的电荷泵和阵列驱动。纯技术上讲,NAND编程和擦除需要在浮栅上建立高电场,这个电压通常由内部电荷泵从VCC升压而来,所以VCC既要有足够的电压余量,还要能扛住突发写操作时的大电流冲击。UFS 3.1并发度比UFS 2.x更高,有的颗粒内部一次可以同时操作多个plane,VCC上的电流台阶会非常陡。
再看VCCQ,这是1.2V左右的低压电源轨,主要给闪存控制器数字逻辑、内部SRAM、NAND接口I/O供电。控制器的核心逻辑都是低电压CMOS工艺,使用1.2V能显著降低动态功耗和开关损耗。最后是VCCQ2,标准1.8V,给M-PHY物理层、参考时钟缓冲器和PLL等模拟电路供电,UFS高速模式下的信号质量很大程度上依赖这路电的纯净度。
1.2 三路分离的设计逻辑
经常有人问,为什么不直接用一路3.3V全部搞定?道理其实很简单:NAND阵列需要3.3V级别的高电场来完成编程和擦除,但控制器逻辑如果也跑3.3V,功耗和发热会完全失控;而M-PHY模拟前端对电源噪声极度敏感,如果和NAND这种大电流动态负载共用电源轨,高速信号眼图基本过不了。
三路分开本质上是“高电压干粗活、低电压干细活、模拟电图清净”的分工。类比一下,就像实验室里大功率设备、精密仪器和信号源要分别接稳压器,而不是共用一个插座。UFS 3.1能跑到单通道2.9Gbps甚至Grouped Gear更高的速率,M-PHY的供电质量是底层前提,VCCQ2这路由任何闪失,高速协商就会掉链子。
还有一个工程上的原因:独立供电轨允许系统在低功耗模式下对某些域单独断电。比如手机进入深度睡眠时,可以保留部分VCCQ/VCCQ2域供电用于快速唤醒,而VCC可以完全关断来省电。如果三路并一路,这个功耗优化空间就没有了。
2. 电压范围与关键电气参数:规格书之外要盯紧的数字
2.1 标准电压范围与容差
JEDEC的UFS 3.1规范对三路电源轨都有明确的工作范围,做设计时首先要确保在芯片引脚上测到的电压落在这些窗口内。
| 电源轨 | 标准工作范围 | 典型标称值 | 主要负载 |
|---|---|---|---|
| VCC | 2.4V ~ 3.6V | 3.3V | NAND阵列、电荷泵 |
| VCCQ | 1.14V ~ 1.26V | 1.2V | 控制器数字逻辑、I/O |
| VCCQ2 | 1.7V ~ 1.95V | 1.8V | M-PHY模拟前端、PLL、时钟 |
这里我要提醒一句:静态电压范围内只能说明“能工作”,并不代表“工作得好”。实际项目中至少要留出5%左右的动态余量,也就是说把VCC设计在3.3V标称值,瞬态跌落时最低不能低于2.9V左右,否则就接近欠压保护(UVLO)窗口边缘了。VCCQ和VCCQ2同理,不要贴着上限或下限跑。
另外,UFS 3.1规范里对不同厂商、不同容量的颗粒,VCC的推荐标称值可能略有差异,有的老工艺颗粒建议3.0V甚至2.5V。设计前务必以具体型号的数据手册为准,不要只盯着公版参考设计看。
2.2 电流预算:别只看静态参数
很多第一次做UFS供电的朋友,容易忽略瞬态电流。UFS 3.1的NAND在并发编程时,VCC的电流可以瞬间从几十毫安跳到几百毫安甚至接近1A,这个电流台阶的上升时间通常在微秒到毫秒量级。如果前级DCDC或者LDO的环路带宽不够,VCC电压会出现明显跌落,严重时直接触发芯片内部POR复位。
我给出一个工程经验值供参考:单颗128GB~256GB的UFS 3.1,VCC平均工作电流大约200~400mA,突发写峰值建议按600mA~1A做设计余量;VCCQ按100~300mA算;VCCQ2因为主要是模拟电路和时钟缓冲,按100~200mA算。如果板上有两颗UFS做RAID或者容量翻倍,电流翻倍,电源方案要跟着升级。
还要注意VCC在启动瞬间的浪涌。给一排大容量的去耦电容充电,瞬间电流可能比正常工作电流还大。用PMIC直接给UFS供电时,PMIC的软启动时间和限流值要匹配,不然每次上电都触发限流保护,电压爬不上去,设备就枚举失败。
2.3 纹波、瞬态响应与去耦
纹波指标上,VCC和VCCQ的纹波建议控制在50mV以内,VCCQ2因为直接给PLL和M-PHY模拟前端供电,纹波最好压在30mV以下,否则高速信号抖动会超标。
去耦不是单纯堆电容。原则是:每个电源引脚就近放100nF小电容滤高频,远端放2.2uF~4.7uF的大容值电容稳住瞬态。VCC这路由于瞬态电流大,至少要保证等效串联电阻低的4.7uF以上容值,并且尽量靠近芯片的VCC引脚。用小封装0603和0402混布,效果通常比全部用同一封装要好。
注意:去耦电容不是越大越好。电容太大会拉慢上电爬升斜率,如果PMIC又没有配置软启动,VCC、VCCQ、VCCQ2之间很容易出现顺序交叉,反而不满足时序要求。后面讲时序时会专门展开。
3. 上电时序与掉电时序:这里最容易翻车
3.1 JEDEC对供电顺序到底怎么约束
做服务器和通用主板出身的朋友应该对CPU供电时序很熟:VCORE最后一路上、PWRGOOD最后拉高、各路供电之间有严格的先后窗口。UFS的上电时序没有CPU那么苛刻,但也不是随便接的,JEDEC规范里的核心约束可以概括为两条。
第一条,三路电的爬升顺序原则上不做强制排序,但任意时刻VCCQ和VCCQ2的电压都不得高于VCC的有效电平。这句话是关键,VCC相当于“底盘”,如果VCC还没爬起来,VCCQ2或者VCCQ反而先到了1.8V/1.2V,芯片内部的ESD二极管就会正偏导通,轻则闩锁,重则直接损坏电源轨或者IO引脚。
第二条,从第一路电源轨开始爬升(t0)到所有电源轨都进入各自的有效电压范围内,这个总时间窗口要控制在100ms以内。也就是说,三路电谁先谁后可以商量,但是不能拖太久。有些工程师用RC延时给EN脚做时序,温度和容差一漂,100ms窗口轻松超限,在高温或者低温下特别容易出问题。
3.2 单调爬升与100ms时间窗口
除了先后顺序,爬升的“波形质量”也很重要。JEDEC要求各路电源在爬升过程中必须是单调的,不能出现明显的平台、台阶或者回退。用LDO供电时,如果EN引脚的阈值和输出电容配合不好,输出电压可能先在中间电平“停一下”再继续爬,这种平台在某些芯片看来就像一次欠压复位,导致内部状态机错乱。
实际项目里,我见过一个案例:某颗LDO的软启动偏慢,输出电容又加了22uF,导致VCC爬升用了将近150ms才到3.3V。虽然三路顺序没交叉,但总窗口超了100ms,结果UFS在上电后频繁出现设备枚举失败,只有把电容减小或者换快启动LDO才能稳定复现。所以100ms这条线不能只写在文档里,一定要实测验证。
时钟和复位也要跟上时序。UFS的M-PHY需要参考时钟(常见19.2MHz)才能建立高速链路,虽然低速模式可以不要参考时钟,但正常使用场景下,主控端的REF_CLK必须在UFS设备初始化前稳定输出。RESET_N引脚要等各路电源都有效并稳定之后再释放,释放太早可能导致芯片内部POR没完成,命令发过去石沉大海。
3.3 掉电时序与非法掉电
掉电时序同样关键,尤其是整机突然断电这种非法掉电场景。原则上,掉电过程中VCCQ和VCCQ2也不能高于VCC,否则同样有二极管导通风险。硬件断电时,各路负载电容大小不一样,放电速度也不同,容易出现某一路掉得快、某一路掉得慢的交错。
应对办法很简单:如果有PMIC统一管理,掉电时建议让三路同时关断,让它们自然放电,不要做成“VCC先断、VCCQ2后断”这种阶梯式关断。如果是GPIO控制多个独立LDO,要确保关断顺序和上电相反,或者所有使能脚一起拉低,避免某一路提前断电后其他路还挂着。
非法掉电后还有一个常见问题:大容量去耦电容残留电荷导致VCC下电不彻底。下次上电时,UFS内部状态没有完全复位,设备行为不可预期。对于车载、工控这类对掉电安全要求高的场景,可以考虑加放电回路或者让PMIC在关断时提供主动放电功能。
3.4 和CPU/服务器上电时序的对照
顺手说一个容易混的概念。很多人是先接触服务器CPU供电时序,再来做存储设计的,下意识会觉得UFS也要像CPU那样精确到毫秒级的多元时序,其实不是。
服务器CPU的上电讲究“所有辅助电源先稳定,再上VCORE,最后PWRGOOD拉高”,每一段时序都有严格的T0、T1、T2窗口,因为CPU内部是几亿门的数字逻辑,任何一轨没到位就上电,闩锁风险极大。UFS虽然也是多路供电,但它内部有自己的POR电路,只要满足“VCCQ/VCCQ2不高于VCC”和“100ms总窗口”这两个条件,三路电的顺序可以灵活处理。
所以做UFS供电时不用照搬CPU的“VCORE必须最后上”的教条,但“先稳定粗电、再上精细电、最后释放复位”的设计思想是一脉相承的。我见过有人为了模仿CPU时序,在UFS的VCCQ使能脚前刻意加RC延时,结果反而把事情搞复杂了,UFS只要满足原则性约束就够了,没必要画蛇添足。
4. 参考电路与PMIC配置实操
4.1 一个完整的电源树设计示例
这里给一个相对通用的参考电源树,适合单颗UFS 3.1、主控SoC自带PMIC或者外挂小电源管理芯片的场景。
| 电源轨 | 目标电压 | 推荐拓扑 | 去耦电容策略 |
|---|---|---|---|
| VCC | 3.3V | 低压差LDO或小功率DCDC,持续能力≥1.5A | 4.7uF+1uF+100nF,靠近引脚 |
| VCCQ | 1.2V | LDO,持续能力≥500mA | 2.2uF+100nF |
| VCCQ2 | 1.8V | LDO,持续能力≥300mA | 2.2uF+100nF,额外加磁珠滤波可选 |
芯片本身的供电引脚往往不止一组,有些大容量UFS会把VCC分成两个或更多引脚,设计时每个引脚都要单独去耦,不能用一根走线串到底。PCB走线宽度要按峰值电流来算,VCC路径至少保证1mm以上走线宽度或者覆铜加宽,避免线路电阻造成额外压降。
如果选用的PMIC没有内置完整的电源轨时序管理,就需要自己用EN脚做控制。我的建议是:能用PMIC内部时序配置就千万不要用RC延时,RC会随温度和容差漂移,批量生产时一致性很差。如果实在要用GPIO控制,要确保软件在上电初始化时按正确顺序拉高使能脚,并且不要在系统休眠时改变这些GPIO的默认状态,否则就会踩到后面说的“深度休眠唤醒丢盘”坑。
4.2 PMIC时序配置与测量验证
以常见的国产PMIC和参考DCDC方案为例,典型配置思路是这样:把PMIC的LDO1设为VCC 3.3V,LDO2设为VCCQ2 1.8V,LDO3设为VCCQ 1.2V,然后在PMIC的寄存器里配置上电序列为LDO1先启动,间隔约1~5ms后LDO2启动,再间隔1~5ms后LDO3启动。这样做的目的是让VCC这个“底盘”先站稳,VCCQ2和VCCQ再跟进,天然满足“VCCQ/VCCQ2不高于VCC”的原则。
配置完不要光看PMIC寄存器有没有写进去,一定要拿示波器实测。很多PMIC的软启动时间会叠加额外的延迟,寄存器里写的间隔和实际波形不一定完全一致。测量时四通道分别挂VCC、VCCQ、VCCQ2和RESET_N,触发源选第一路上升沿,示波器时间轴设为20ms/格,总观察窗口至少200ms,然后重点看三路电是否都在100ms内进入有效带。
还有一个细节:RESET_N释放的时机最好由主控芯片确认电源稳定后再拉高,不要和最后一路电源简单硬连。因为电源稳定不等于芯片内部POR完成,如果RESET_N释放得太早,UFS内部逻辑还没准备好,主机发起的启动命令可能直接丢失。
4.3 用示波器实测上电时序的方法
具体操作上,我建议的测量步骤是这样:
- 示波器开满四个通道,探头全部用10x衰减,挂到UFS芯片侧的电源引脚,尽量靠近引脚测,不要隔着长长的过孔和走线测。
- 触发通道选VCC,触发模式设为上升沿,触发电平设在1V左右,这样VCC一开始爬升就触发。
- 水平时间轴先设20ms/格,总窗口200ms,看完整的三路电爬升过程和RESET_N释放时序。
- 打开电压光标,分别确认三路电进入各自有效范围的绝对时间点,算出总上电窗口是否小于100ms。
- 用电流探头夹在VCC路径上,跑一轮持续读写,观察大电流台阶下的电压跌落幅度,确认没有跌破欠压保护线。
实测时最容易忽略的是探头地线过长带来的测量噪声。测量VCCQ2这种对纹波敏感的电源轨时,建议用接地弹簧或者尽量缩短地线回路,否则示波器上看到的纹波可能有一半是测量噪声,会让你误判设计有问题。
5. 常见问题排查与避坑清单
5.1 五个高频问题的定位思路
UFS 3.1供电相关的故障,形态上无非“开机不识别”、“运行中掉盘”、“休眠唤醒枚举失败”、“高低温下偶发异常”。下面这几个是我实际见过的高频问题,排查思路可以直接抄。
第一个,上电后UFS完全无法枚举。优先量三路电在芯片引脚上的实际电压,特别是有没有VCCQ2。很多人在原理图上看PMIC配置没问题,但PCB上某个电源网络存在虚焊、断头或者磁珠脱落,导致某一轨没有真正送到芯片。用万用表量通断是不够的,必须上电实测电压。
第二个,拷贝大文件时系统死机或者重启。重点怀疑VCC大电流跌落。把示波器电流探头夹到VCC路径上,持续跑读写,看电流台阶出现时VCC有没有明显凹陷。如果凹陷超过300mV,基本就是去耦不够或者DCDC环路带宽不足,需要加大容值、提高DCDC开关频率或者换更大限流的LDO。
第三个,深度休眠唤醒后偶发性丢盘。这个坑我在早期版本上踩得很深:我用一颗GPIO控制的LDO给VCCQ2供电,系统进入休眠时软件把GPIO默认拉低,VCCQ2先于VCC掉电,本身没问题,但唤醒时软件先拉高VCCQ2的EN,而VCC这路PMIC还没起来,导致每次唤醒都偶发违反“VCCQ2不高于VCC”的原则,最终表现为休眠唤醒几次就丢一次盘。改成PMIC统一时序管理后问题彻底消失。
第四个,高低温冲击后设备不稳定。优先看爬升斜率,低温下LDO限流可能更紧,输出电容充电更慢,本来常温下没问题的RC延时在低温下直接超了100ms窗口。这类问题在实验室做高低温循环时才会暴露,量产后概率更高,所以要提前用最大容差去验算RC时间。
第五个,走线过长导致VCCQ2纹波过大。VCCQ2给PLL和M-PHY供电,如果从PMIC到UFS的走线跨了大半个板子,高速信号抖动率会异常。处理方法是把VCCQ2的电源轨尽量走短,或者在靠近UFS引脚侧加一组100nF+1uF的滤波组合,严重时在PMIC输出端串一个磁珠做隔离。
5.2 上电时序排查速查表
| 现象 | 优先排查点 | 最可能根因 |
|---|---|---|
| 上电无法枚举 | 三路电实测电压、RESET_N释放时机 | 某路供电缺失或时序交叉 |
| 大文件读写死机 | VCC瞬态跌落、DCDC环路 | 去耦不足、带宽不够 |
| 休眠唤醒丢盘 | EN脚默认状态、关断顺序 | 唤醒时VCC未起、VCCQ2先上 |
| 高低温偶发不识别 | 爬升斜率、RC延时漂移 | 总上电窗口超100ms |
| 高速协商失败 | VCCQ2纹波、走线长度 | PLL/M-PHY供电不干净 |
排查时不要只盯一个环节。电源问题常常是“多因一果”,比如VCC跌落可能同时由去耦不足、DCDC环路带宽低、PCB走线压降大三个因素叠加产生。所以定位问题时要把示波器波形、PCB Layout、PMIC寄存器配置三方面同时拉起来看,不能量到电压正常就草率收工。
5.3 关于“省一点”的教训
最后多说一句,UFS供电上最不值得省的就是PMIC时序管理。用独立LDO加GPIO控制看似省了几毛钱,但软件、休眠唤醒、时序容差这些隐含成本会在后期成倍找回来。我早期那版板子为了省一颗PMIC,愣是在系统休眠唤醒这个case上调了两周,最后换算下来,加班时间足够买几百颗PMIC了。
供电设计这种基础模块,做得“不显眼”才是最高评价——所有精力都应该花在让UFS稳定高效地跑业务上,而不是温饱线上的反复救火。希望这篇能把UFS 3.1三路供电的电压范围、上电掉电时序和调试方法讲透,大家少走点弯路。