3. PMIC选型与配置:常用PMIC芯片介绍、I2C/PMBus配置方法、上电时序控制

好,咱们进入第三章。这一章我打算聊聊PMIC的选型和配置。说实话,这块内容在AMD嵌入式系统里特别关键。你想想看,CPU和FPGA对电源的要求有多苛刻?电压稍微偏一点,时序乱一丁点,系统就可能起不来,或者跑着跑着突然死机。

我个人习惯把PMIC选型比作“给心脏配血管”。芯片是心脏,PMIC就是那套精密的供血系统。选错了,后面调试能让你怀疑人生。

3.1 常用PMIC芯片介绍

市面上PMIC芯片很多,但针对AMD高性能嵌入式平台,我重点推荐两款:TI的TPS65086和Infineon的IRPS5401。这两款我都在项目里用过,各有千秋。

3.1.1 TI TPS65086

TPS65086是一颗集成度很高的PMIC。它内部集成了多个降压转换器和LDO,专门为处理器和FPGA供电设计。

  • 输出电压范围:0.6V 到 3.3V,可编程调节
  • 输出电流:单路最高可达6A,多路组合能满足大部分SoC需求
  • 接口:支持I2C和PMBus双模式
  • 上电时序:内置可编程的时序控制器,支持8路独立电源排序

我个人的经验:TPS65086的I2C配置非常灵活。我在一个项目里用它给AMD的FPGA供电,通过I2C动态调整VCCINT电压,实现了不同频率下的功耗优化。这个功能在低功耗场景下特别实用。

3.1.2 Infineon IRPS5401

IRPS5401是Infineon家的明星产品。它主打高效率和精确的电压调节。

  • 输出电压精度:±0.5%,这个精度在给CPU内核供电时很重要
  • 开关频率:可调,从200kHz到1MHz
  • 保护功能:过压、欠压、过流、过温保护一应俱全
  • 配置方式:PMBus为主,I2C为辅

避坑指南:我曾经在一个项目里同时用了TPS65086和IRPS5401。结果发现IRPS5401的PMBus地址和TPS65086有冲突。嗯,这里要注意,多颗PMIC共用一个总线时,地址分配一定要提前规划好。我当时花了半天才排查出来,教训深刻。

3.2 I2C/PMBus配置方法

PMIC的配置,说白了就是通过I2C或PMBus总线,往寄存器里写值。PMBus是基于I2C的扩展协议,增加了电源管理的专用命令。

3.2.1 I2C配置基础

I2C配置PMIC,一般分三步:写配置、读验证、存参数。我习惯先写一个简单的初始化序列。

// TPS65086 I2C初始化示例
// 设备地址:0x5E (7位地址)
// 配置VOUT1为1.0V

uint8_t write_data[] = {
    0x00, // 寄存器地址:VOUT1寄存器
    0x28  // 配置值:1.0V (具体编码参考数据手册)
};

// 发送I2C写命令
i2c_write(0x5E, write_data, 2);

// 读回验证
uint8_t read_back;
i2c_read(0x5E, 0x00, &read_back, 1);
if (read_back == 0x28) {
    // 配置成功
} else {
    // 配置失败,需要排查
}

注意:I2C的时序要求很严格。我曾经遇到过因为上拉电阻选得太大,导致通信不稳定。建议上拉电阻选4.7kΩ到10kΩ之间,具体看总线电容。

3.2.2 PMBus配置进阶

PMBus比I2C多了很多标准命令。比如设置输出电压,可以用VOUT_COMMAND命令。

// IRPS5401 PMBus配置示例
// 设置输出电压为1.2V

// 1. 发送VOUT_COMMAND命令 (0x21)
uint8_t cmd = 0x21;
uint16_t voltage_code = 0x0CCD; // 1.2V对应的线性格式编码

// 2. 写入电压值
pmbus_write_word(0x40, cmd, voltage_code);

// 3. 存储配置到非易失存储器
pmbus_write_byte(0x40, 0x15, 0x01); // STORE_USER_ALL命令

为什么会用PMBus而不是I2C?说白了,PMBus有标准化的电源管理命令集,调试起来更方便。你想想看,用I2C你得翻数据手册找寄存器地址,用PMBus直接调标准命令就行。

3.3 上电时序控制

上电时序,这是嵌入式系统里最容易出问题的地方之一。AMD的处理器和FPGA对上电顺序有严格要求。比如VCCINT必须先于VCCAUX,VCCAUX必须先于VCCO。顺序错了,轻则芯片不工作,重则直接烧毁。

3.3.1 时序要求分析

以AMD的Zynq UltraScale+ MPSoC为例,典型的上电顺序是:

电源轨 电压 上电顺序 延迟时间
VCCINT 0.85V 第1位 0ms
VCCAUX 1.8V 第2位 ≥2ms
VCCO 3.3V 第3位 ≥5ms
VCC_PLL 1.2V 第4位 ≥10ms

我的经验:这个延迟时间不是随便设的。我见过有人把延迟设成0ms,结果系统偶尔能启动,偶尔不能。后来查了数据手册才发现,不同电源轨之间需要一定的稳定时间。建议留出20%的余量。

3.3.2 用PMIC实现时序控制

TPS65086内部有专门的时序控制寄存器。你可以通过配置这些寄存器,实现精确的上电顺序。

// TPS65086上电时序配置示例
// 配置4路电源的上电顺序

// 寄存器0x0E: 上电时序控制寄存器1
// Bit[3:0]: VOUT1延迟时间 (单位: 1ms)
// Bit[7:4]: VOUT2延迟时间

uint8_t seq_reg1 = 0x00; // VOUT1: 0ms, VOUT2: 0ms
uint8_t seq_reg2 = 0x21; // VOUT3: 2ms, VOUT4: 1ms

i2c_write(0x5E, 0x0E, &seq_reg1, 1);
i2c_write(0x5E, 0x0F, &seq_reg2, 1);

// 使能上电时序
uint8_t enable = 0x01;
i2c_write(0x5E, 0x10, &enable, 1);

小技巧:调试上电时序时,我建议用示波器同时抓几路电源的波形。别光看代码,实际波形能告诉你很多信息。比如电源上升斜率是否满足要求,有没有毛刺等。

3.3.3 下电时序同样重要

很多人只关注上电时序,忽略了掉电时序。其实掉电顺序也很关键。如果掉电顺序反了,芯片内部可能形成闩锁效应。

我曾经在一个项目里,系统断电后FPGA偶尔会锁死。排查了很久,最后发现是掉电时序不对。VCCINT掉得比VCCAUX快,导致内部寄生晶体管导通。后来调整了掉电顺序,问题就解决了。

嗯,这里要记住:上电和掉电,最好是对称的。上电时先上的,掉电时后掉。这样最安全。

3.4 小结

这一章我们聊了PMIC选型、I2C/PMBus配置和上电时序控制。说白了,PMIC选型要关注电压精度、电流能力和接口类型。配置时要注意总线地址冲突和时序要求。上电时序要严格按照数据手册来,别偷懒。

下一章我会讲电源完整性设计,包括去耦电容布局和PDN阻抗优化。到时候再聊。