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 标准里,这部分内容写得相当严谨。但咱不背条文,直接看核心逻辑:核心逻辑先上、接口再上、存储最后上。
具体来说,分三步走:
- VCCQ2 先上:为啥?因为控制器核心逻辑要最先获得稳定供电,这样才能正确解析复位信号和初始化序列。如果 VCCQ2 不稳,后面的事情全乱套。
- VCCQ1 再上:等核心逻辑跑起来了,轮到 M-PHY 物理层上电。这时候,控制器才能开始跟 Host 进行初始化沟通。
- VCC 最后上:等一切控制逻辑就绪,并且通信链路初始化完成前,才可以给存储阵列上电。这一步有个时间窗口限制,不能拖太久,也不能提前。
标准里还规定了一个更具体的时序流程,我画了张图帮你理清。
核心原则: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 实战建议:如何检查这个时序?
拿到一块新板子,怎么验证上电顺序对不对?我建议你这样做:
- 用示波器打四个通道:分别抓 VCC、VCCQ1、VCCQ2 和 RESET 信号的波形。建议使用 4 通道示波器,触发方式用边沿触发。
- 设置合适的触发条件:用 VCCQ2 作为触发源,上升沿触发。这样你能看到 VCCQ2 起来后,其他电源是否按照正确顺序建立。
- 重点看交叉点:记录每个电压轨达到 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 系统稳定运行的第一道保险。