2. UFS 上电序列规范:VCC、VCCQ1、VCCQ2 的供电顺序

好,咱们进入第二章。上一章聊了 UFS 系统的总体框架,这一章,咱们深入到**芯片的“能量启动”阶段**——上电时序。

说白了,UFS 芯片不是一把电全怼上去就能工作的。它需要三个核心电压轨,按照严格的顺序醒来。顺序一旦搞错,轻则链路起不来,重则芯片直接烧掉。我刚开始做 UFS 调试时,就吃过这个亏。

2.1 三个电压轨分别是谁?

先认识下这三位兄弟,他们分别是:VCC、VCCQ1、VCCQ2。

电压轨名称 典型电压值 干嘛用的?
VCC 2.5V / 3.3V 给 NAND Flash 阵列供电。这是最大的一路,电流需求也最大。
VCCQ1 1.2V / 1.8V 给 M-PHY 物理层和部分控制器逻辑供电。这路电压直接影响高速信号的质量。
VCCQ2 1.8V / 2.5V 给控制器核心逻辑和寄存器供电。掉电时,这路经常被用来保持关键上下文。

三路电各有各的脾气,时序上必须“分先后,讲规矩”。

2.2 JEDEC 标准规定的上电顺序

JEDEC 标准里,这部分内容写得相当严谨。但咱不背条文,直接看核心逻辑:核心逻辑先上、接口再上、存储最后上。

具体来说,分三步走:

  1. VCCQ2 先上:为啥?因为控制器核心逻辑要最先获得稳定供电,这样才能正确解析复位信号和初始化序列。如果 VCCQ2 不稳,后面的事情全乱套。
  2. VCCQ1 再上:等核心逻辑跑起来了,轮到 M-PHY 物理层上电。这时候,控制器才能开始跟 Host 进行初始化沟通。
  3. VCC 最后上:等一切控制逻辑就绪,并且通信链路初始化完成前,才可以给存储阵列上电。这一步有个时间窗口限制,不能拖太久,也不能提前。

标准里还规定了一个更具体的时序流程,我画了张图帮你理清。

UFS 标准上电时序流程图 ① VCCQ2 上电 (1.8V / 2.5V) ② VCCQ1 上电 (1.2V / 1.8V) ③ VCC 上电 (2.5V / 3.3V) ④ 进入复位与链路初始化阶段 🔑 关键时序要求:VCC 必须在 VCCQ1 建立后的 1ms 内上电,且最终电压需在 10ms 内稳定。

核心原则:VCCQ2 是“大脑”,必须先醒。VCC 是“粮仓”,要等大脑准备好才能往里装粮。

2.3 需要格外注意的三个时序参数

标准里定义了若干个时间参数。我挑三个最常踩坑的讲,这几个值,我个人习惯在原理图设计阶段就核对一遍。

参数 描述 典型要求
t_VCCQ_RDY VCCQ1 和 VCCQ2 从开始上电到电压稳定的时间 < 5 ms
t_VCC_RDY VCC 从开始上电到电压稳定的时间 < 10 ms
t_VCC_VCCQ VCC 上电相对于 VCCQ1 上电的延迟时间 < 1 ms

这里面,t_VCC_VCCQ 最容易被忽略。有些便宜的 PMIC 或者 LDO 响应慢,导致 VCC 上电晚于 VCCQ1 超过 1ms,UFS 就可能直接 stuck 在 R3 状态。

2.4 掉电顺序:同样重要

上电需要顺序,掉电也要。不过标准对掉电的要求相对宽容,核心思想是:谁后上谁先下。

  • VCC 先断:存储阵列先撤。
  • VCCQ1 再断:物理层再撤。
  • VCCQ2 最后断:核心逻辑和寄存器最后下电。

反着来一遍就对了。但要注意,如果设计允许“快速掉电”,一定要确保 VCC 掉到 0V 的速度够快,防止电容放电导致 VCC 和 VCCQ1 之间形成倒灌电流。

⚠️ 特别注意: 我曾经遇到过一块板子,掉电时 VCC 通过内部二极管的衬底效应对 VCCQ1 进行反向充电,导致 VCCQ1 反复上下波动,芯片无法正常进入掉电状态。解决办法是在 VCC 和 VCCQ1 之间加一个反向隔离肖特基二极管。

2.5 实战建议:如何检查这个时序?

拿到一块新板子,怎么验证上电顺序对不对?我建议你这样做:

  1. 用示波器打四个通道:分别抓 VCC、VCCQ1、VCCQ2 和 RESET 信号的波形。建议使用 4 通道示波器,触发方式用边沿触发。
  2. 设置合适的触发条件:用 VCCQ2 作为触发源,上升沿触发。这样你能看到 VCCQ2 起来后,其他电源是否按照正确顺序建立。
  3. 重点看交叉点:记录每个电压轨达到 90% 目标电压的时间点,计算他们之间的时间差是否满足 t_VCC_VCCQ 等要求。

💡 小技巧: 我个人习惯把示波器的时基设置在 2ms/div 左右,这样能清晰看到完整的 10ms 上电窗口。如果电压爬升曲线有“台阶”,说明 PMIC 带载能力不足,或者电容充电慢,需要留意。

2.6 避坑指南:错误上电后果

如果顺序搞反了,会发生什么?我讲两个真实例子:

  • VCC 先于 VCCQ2 上电:NAND 阵列先加电,但控制器核心逻辑没准备好,无法控制阵列的初始状态。结果大概率是电流激增,芯片冒烟。
  • VCCQ1 先于 VCCQ2 上电:M-PHY 物理层供电了,但 controller 还没起来,无法响应初始化请求。Host 发过来的 HIBERN8 退出序列,Slave 直接不认,导致链路建立失败。

所以,严格遵循 VCCQ2 → VCCQ1 → VCC 的顺序,是 UFS 系统稳定运行的第一道保险。