2、启动时序核心概念:上电时序、下电时序、时序窗口

好,咱们正式开始聊启动时序。说实话,很多刚入行的硬件工程师觉得这玩意儿就是“按顺序通电”,没什么技术含量。我当年也这么想,直到有一次项目调试,板子死活起不来,示波器一抓才发现——核心电压比IO电压晚到了那么几十微秒,芯片直接锁死了。嗯,从那以后,我再也不敢小看时序了。

今天咱们就掰开揉碎,把三个最核心的概念讲清楚:上电时序下电时序、还有时序窗口。你把这仨搞明白了,PMIC的启动问题基本能解决八成。

2.1 上电时序(Power Sequencing)

上电时序,说白了就是各路电源谁先谁后的问题。你想想看,一个复杂的SoC或者FPGA,内部有核心电压(Vcore)、IO电压(Vccio)、内存电压(Vddr)、模拟电压(Vdda)等等。这些电压不是同时上电就行的,它们有严格的先后顺序。

为什么要有顺序?

因为芯片内部的电路结构决定了这一点。比如,核心逻辑先上电,IO接口后上电,这样可以避免IO引脚在核心还没准备好时就输出不确定状态,导致漏电或者闩锁效应。我在项目中遇到过一块板子,IO电压先于核心电压到达,结果IO引脚上的寄生二极管直接导通了,电流哗哗地流,芯片烫得能煎鸡蛋。

典型的上电顺序

以我常用的某款多通道PMIC为例,它的推荐上电顺序是这样的:

步骤 电压轨 说明
1 Vcore(0.8V~1.2V) 核心逻辑先上电,保证内部状态机复位
2 Vdram(1.35V/1.5V) 内存电压紧随其后,DDR需要先初始化
3 Vccio(1.8V/3.3V) IO电压最后上电,避免IO漏电
4 Vdda(模拟电压) 模拟部分通常最后,或者与IO同时

当然,不同芯片的要求不一样。我建议你拿到芯片手册后,第一件事就是翻到“Power Sequencing”那一页,把时序图截下来贴在办公桌上。真的,这招救过我很多次。

核心要点:上电时序的核心是“先核心,后IO”。违反这个原则,轻则芯片不工作,重则烧毁芯片。

2.2 下电时序(Power Down Sequencing)

下电时序,很多人会忽略。其实它和上电时序一样重要,甚至在某些场景下更关键。

下电时序,就是断电时的顺序。你想想看,如果IO电压先掉没了,但核心电压还撑着,IO引脚上的电平会怎么样?它会通过内部保护二极管往核心电压轨上灌电流,导致核心电压不降反升,或者下降速度变慢。这种“反灌”现象,轻则让系统复位异常,重则损坏芯片。

下电顺序的原则

一般来说,下电顺序是上电顺序的逆序。也就是说:后上电的先下电,先上电的后下电

举个例子,如果上电顺序是 Vcore → Vdram → Vccio,那么下电顺序就是 Vccio → Vdram → Vcore。这样能保证IO引脚在核心电压掉完之前,已经处于高阻态或者下拉状态,不会产生反灌。

我曾经调试过一个电池供电的便携设备,每次关机后重新开机,系统就死机。查了好久,最后发现是下电时序不对——Vccio掉得比Vcore快,导致核心电压轨上残留的电荷被IO引脚反灌,内部逻辑状态全乱了。后来在PMIC的配置里加了一个下电延时,问题就解决了。

避坑指南:我曾经遇到过一款PMIC,它的下电时序默认是“同时掉电”,结果导致某款FPGA在下电时频繁报错。后来我手动配置了每个通道的掉电延时,才把问题搞定。所以,别太相信默认配置,一定要根据芯片手册来设置。

2.3 时序窗口(Timing Window)

时序窗口,这个概念稍微抽象一点。它指的是各路电压之间允许的时间偏差范围。说白了,就是“你晚到多久可以接受,早到多久也可以接受”。

为什么要有窗口?

因为实际电路中,电源的上升时间、启动延时、负载电容都不一样,不可能做到完全同步。芯片设计者会给出一个允许的范围,比如“Vcore必须在Vccio之前100μs到5ms之间到达”。这个范围就是时序窗口。

窗口的三个关键参数

  • Tdelay_min:最小延时。如果Vcore比Vccio早到的时间小于这个值,芯片可能还没准备好,IO就上电了,容易出问题。
  • Tdelay_max:最大延时。如果Vcore比Vccio早到太多,核心电压已经稳定了,但IO电压迟迟不来,芯片会一直处于复位状态,系统无法启动。
  • Tskew:时序偏差。这是各路电源之间的相对时间差,通常用示波器测量。

我举个例子你就明白了。某款应用处理器要求:

  • Vcore 必须在 Vccio 之前 至少 200μs 到达
  • Vcore 必须在 Vccio 之前 最多 2ms 到达

那么它的时序窗口就是 200μs ~ 2ms。如果你设计的电路里,Vcore只比Vccio早了50μs,那就超出了窗口下限,芯片可能无法正常复位。如果早了3ms,那就超出了窗口上限,芯片可能一直卡在复位状态。

我的小技巧:设计时,我习惯把时序窗口的中间值作为目标。比如窗口是200μs~2ms,我就把延时设计在1ms左右。这样即使有温度、负载变化,也不容易超出边界。留点余量,总是没错的。

2.4 三个概念的关系

这三个概念不是孤立的。上电时序定义了“谁先谁后”,下电时序定义了“谁后谁先”,而时序窗口定义了“先后之间差多少”。

你可以这样理解:

  • 上电时序:决定了顺序
  • 下电时序:决定了逆序
  • 时序窗口:决定了容差

在实际项目中,我通常会用示波器同时抓取多个电压轨的波形,测量它们之间的时间差,然后对照芯片手册里的时序窗口,看看是否满足要求。如果发现某个电压轨的延时超出了窗口,我就会调整PMIC的配置,或者修改外围的RC延时电路。

嗯,说到这里,我想起一个案例。有一次我调试一块多核处理器板卡,上电时序完全按照手册来的,但系统就是不稳定,偶尔启动失败。后来我用示波器一量,发现Vcore的上升时间太慢,导致它到达稳定电压的时间比预期晚了300μs,刚好超出了时序窗口。我换了一颗输出电容更小的PMIC,问题就解决了。你看,有时候问题不在顺序本身,而在时序窗口的边界上。

总结一下:

  • 上电时序:先核心,后IO
  • 下电时序:后上电的先下电,先上电的后下电
  • 时序窗口:留足余量,别卡边界

这三个概念,是PMIC启动时序的基石。你把这部分吃透了,后面讲故障排查的时候,就会轻松很多。