第二章:上电时序与下电时序设计

各位工程师朋友,咱们接着聊。上一章我讲了T507的电源轨分类,这一章咱们要啃一块硬骨头——上电时序和下电时序。

说实话,我刚接触T507时,觉得时序这东西不就是按顺序通电嘛,能有多难?结果第一次调板子,芯片死活不启动,查了三天才发现是某个电源轨晚到了0.5ms。嗯,从那以后,我再也不敢小看时序了。

2.1 为什么时序这么重要?

你想想看,T507内部有上亿个晶体管。每个晶体管都需要稳定的电压才能正常工作。如果某个核心电压还没建立起来,I/O电压就先到了,那会发生什么?

说白了,就是芯片内部的ESD保护二极管会正向导通,电流从高电压轨倒灌进低电压轨。轻则芯片发热、工作异常,重则直接烧毁。我在项目中就遇到过一块板子,因为VCC_IO比VCC_CORE早到了2ms,结果芯片内部一个LDO直接击穿了。

⚠️ 重要警告: T507对时序的要求非常严格。数据手册里明确写了,违反时序规范可能导致芯片永久性损坏。这不是开玩笑的。

2.2 T507的上电时序要求

咱们先看数据手册。T507的上电时序,说白了就是一句话:先核心,后IO,再DDR。但具体到每个电源轨,细节就多了。

我习惯把上电时序分成三个阶段:

  1. 第一阶段:核心供电 — VCC_CORE、VCC_GPU、VCC_VE
  2. 第二阶段:IO供电 — VCC_IO、VCC_PLL、AVCC
  3. 第三阶段:DDR供电 — VCC_DDR、VCC_DDR_IO

每个阶段之间,都有严格的延迟时间要求。我整理了一张表,你直接拿去用:

电源轨 斜坡时间(10%-90%) 延迟时间(相对前序) 备注
VCC_CORE ≤ 2ms 0(最先启动) 核心电压,必须第一个建立
VCC_GPU ≤ 2ms ≥ 0.5ms(相对VCC_CORE) 可与VCC_CORE同时启动
VCC_PLL ≤ 1ms ≥ 1ms(相对VCC_CORE) PLL对噪声敏感,斜坡要快
AVCC ≤ 1ms ≥ 1ms(相对VCC_PLL) 模拟供电,建议单独LDO
VCC_IO ≤ 2ms ≥ 2ms(相对VCC_CORE) IO电压,必须在核心之后
VCC_DDR ≤ 2ms ≥ 1ms(相对VCC_IO) DDR核心电压
VCC_DDR_IO ≤ 2ms ≥ 0.5ms(相对VCC_DDR) DDR IO电压,最后建立

🔑 关键点: 所有电源轨的斜坡时间都不能超过2ms。如果斜坡太慢,芯片内部的POR(上电复位)电路可能无法正确触发,导致复位失败。

2.3 下电时序要求

下电时序和上电时序正好相反。说白了就是:后建立的先关,先建立的后关

具体来说:

  1. 先关VCC_DDR_IO和VCC_DDR
  2. 再关VCC_IO和AVCC
  3. 最后关VCC_CORE

这里有个坑,我踩过。下电时,如果VCC_CORE掉得比VCC_IO快,芯片内部的逻辑门可能会进入亚稳态。我曾经有一批板子,下电后重新上电,有5%的概率启动失败。查了半个月,最后发现是下电时序反了。

💡 个人经验: 下电时,建议让VCC_CORE保持至少比VCC_IO晚1ms掉电。我一般会在VCC_CORE的输出端加一个放电电阻,控制它的掉电速度。

2.4 如何实现时序控制?

实现时序控制,主要有两种方案:用PMIC,或者用分立器件。我两种都用过,各有优劣。

2.4.1 方案一:使用PMIC

PMIC是最省心的方案。比如全志官方的AXP803或AXP813,内部已经集成了时序控制逻辑。你只需要通过I2C配置几个寄存器就行。

我举个例子,用AXP803配置上电时序:

// 配置上电时序
// 第一步:设置VCC_CORE为第一路启动
AXP803_REG_POWERON_SEQ[0] = 0x01;  // DCDC1 (VCC_CORE) 最先启动

// 第二步:设置VCC_IO延迟2ms启动
AXP803_REG_POWERON_DELAY[1] = 0x02;  // 延迟2ms

// 第三步:设置VCC_DDR延迟3ms启动
AXP803_REG_POWERON_DELAY[2] = 0x03;  // 延迟3ms

// 配置下电时序(反向顺序)
AXP803_REG_POWEROFF_SEQ[0] = 0x03;  // VCC_DDR 最先关闭
AXP803_REG_POWEROFF_SEQ[1] = 0x02;  // VCC_IO 其次
AXP803_REG_POWEROFF_SEQ[2] = 0x01;  // VCC_CORE 最后关闭

用PMIC的好处是简单、可靠。但缺点也很明显——贵。而且一旦PMIC选型定了,后续想改时序就很麻烦。

2.4.2 方案二:使用分立器件

如果成本敏感,或者PMIC买不到,可以用分立器件实现。我常用的方法是:用RC延时电路 + 使能引脚

具体做法是这样的:

  1. 每个DC-DC或LDO都有一个EN(使能)引脚
  2. 用RC电路给EN引脚提供延迟
  3. 通过调整RC时间常数来控制延迟时间

举个例子,让VCC_IO比VCC_CORE晚2ms启动:

// VCC_CORE的EN引脚直接接VCC_5V(立即启动)
// VCC_IO的EN引脚通过RC延时电路

// RC参数计算:
// 延迟时间 T = R * C * ln(Vth / Vcc)
// 假设EN引脚阈值电压 Vth = 1.2V,Vcc = 5V
// 需要延迟 2ms
// 取 R = 10kΩ,则 C = T / (R * ln(Vth/Vcc))
// C = 2ms / (10k * ln(1.2/5)) ≈ 0.47μF

// 实际电路:
// VCC_5V --- R(10kΩ) --- EN(VCC_IO) --- C(0.47μF) --- GND
⚠️ 注意: 用RC延时有个问题——精度不高。电阻和电容都有容差,实际延迟时间可能偏差20%以上。我建议在量产前,用示波器实测一下每个电源轨的时序,确保在规格范围内。

2.5 时序验证方法

设计做完了,怎么验证时序对不对?我一般用两种方法:

  1. 示波器多通道测量:用4通道示波器,同时测量VCC_CORE、VCC_IO、VCC_DDR和复位信号。看每个电源轨的上升沿是否满足延迟要求。
  2. 逻辑分析仪:如果通道不够,可以用逻辑分析仪测量每个电源轨的PG(Power Good)信号。PG信号是电源芯片输出的状态指示,高电平表示电压已稳定。

我记得有一次,示波器测出来时序完全正确,但芯片就是启动不了。后来发现是复位信号的时序有问题——复位信号必须在所有电源轨稳定之后至少再保持10ms的低电平。这个细节,数据手册里写得很隐晦,我差点就漏掉了。

💡 避坑指南: 我曾经因为PCB走线太长,导致VCC_CORE的电压在到达芯片引脚时已经衰减了0.1V。虽然时序对了,但电压不够,芯片照样不工作。所以,验证时序时,一定要在芯片引脚处测量,而不是在电源芯片输出端。

2.6 常见问题与解决方案

最后,我总结几个我在项目中遇到过的时序问题,你遇到了可以直接抄作业:

问题现象 可能原因 解决方案
芯片上电后无反应 VCC_CORE斜坡太慢 减小输出电容,或增加DC-DC的软启动电流
上电后复位失败 复位信号时序不对 确保复位信号在所有电源轨稳定后至少保持10ms低电平
下电后重新上电启动失败 下电时序反了 检查下电顺序,确保VCC_CORE最后掉电
芯片工作一段时间后死机 电源轨之间有串扰 在电源轨之间加磁珠或0Ω电阻隔离

好了,这一章的内容就这么多。时序设计说难不难,说简单也不简单。关键是要细心,每个电源轨的延迟时间、斜坡时间都要算清楚。下一章,我会讲电源滤波和去耦设计,那是保证电源质量的关键一步。

有什么问题,欢迎在课程群里讨论。咱们下章见。