第三章 PMIC选型与配置:T507的电源管家怎么挑?

好,咱们进入实战环节的第一个硬骨头——PMIC选型。说白了,就是给T507这颗芯片找个靠谱的“电源管家”。

我记得刚接触T507那会儿,看到那么多电源轨,头都大了。VDD_CPU、VDD_GPU、VDD_SYS、VDD_DDR……每个电压要求还不一样。你想想看,要是选错了PMIC,轻则系统不稳定,重则芯片直接冒烟。所以这一章,我把自己踩过的坑和总结的经验,一次性讲清楚。

3.1 三大主流方案对比

目前市面上适合T507的PMIC方案,主要有三种。我一个个说。

3.1.1 AXP803:经典之选

AXP803是全志的老搭档了。我在第一个T507项目里用的就是它。为什么?因为稳定,资料全。

  • 电源轨数量:3路DC-DC + 8路LDO,刚好覆盖T507的核心需求
  • 最大输出电流:DC-DC每路最高3A,LDO每路最高300mA
  • 动态电压调节:支持I2C控制的DVS,但只有一路DC-DC支持
  • 封装:QFN-40,手工焊接没问题

优点:成熟稳定,驱动完善,全志官方SDK直接支持。
缺点:DVS能力有限,GPU和CPU不能同时动态调压。

我的建议:如果你的产品对成本敏感,且CPU和GPU不需要同时跑高频,AXP803完全够用。

3.1.2 AXP813:性能进阶

AXP813是AXP803的升级版。我后来做车载中控项目时换成了它。为什么?因为需要同时给CPU和GPU做动态调压。

  • 电源轨数量:4路DC-DC + 10路LDO,更充裕
  • 最大输出电流:DC-DC每路最高4A,LDO每路最高500mA
  • 动态电压调节:支持两路独立DVS,CPU和GPU各管各的
  • 封装:QFN-48,稍微大一点

优点:DVS灵活,电流余量大,适合高性能场景。
缺点:价格比AXP803贵30%左右,而且外围电容要多几个。

避坑指南:我曾经在AXP813的DVS配置上栽过跟头。它的DVS电压切换速率是可调的,默认值太慢,导致CPU升频时电压跟不上,系统直接死机。后来我把速率寄存器从0x0A改成了0x1E,问题解决。

3.1.3 分立LDO+DC-DC方案:极致灵活

这个方案,说白了就是自己搭。用独立的DC-DC芯片给VDD_CPU、VDD_GPU供电,再用LDO给其他小电流轨供电。

我见过一些老工程师特别喜欢这么干。为什么?因为每个电源轨都可以选最合适的芯片。比如VDD_CPU用TPS54620,VDD_DDR用RT9018B,VDD_IO用AMS1117……

  • 优点:每个电源轨独立优化,效率最高,成本可能更低
  • 缺点:PCB面积大,BOM物料多,调试周期长

注意:分立方案的上电时序控制是个大坑。T507要求VDD_SYS先于VDD_CPU上电,VDD_IO最后上电。用分立芯片的话,你得自己加电源监控芯片或者用RC延时电路。我见过一个项目,就是因为上电时序没搞好,芯片每次冷启动都概率性死机。

3.2 PMIC寄存器配置实战

选好PMIC之后,接下来就是配置了。我以AXP803为例,讲几个关键寄存器。

3.2.1 基础配置寄存器

AXP803的I2C地址是0x34(7位地址)。上电后第一件事,就是配置电源输出使能。

// 使能DC-DC1(VDD_CPU)输出
// 寄存器地址:0x12,bit0
i2c_write(0x34, 0x12, 0x01);

// 使能DC-DC2(VDD_GPU)输出
// 寄存器地址:0x12,bit1
i2c_write(0x34, 0x12, 0x03);

// 使能LDO1(VDD_IO)输出
// 寄存器地址:0x12,bit4
i2c_write(0x34, 0x12, 0x13);

嗯,这里要注意:使能顺序要和硬件上电时序一致。我习惯先使能VDD_SYS,再使能VDD_CPU,最后使能VDD_IO。

3.2.2 电压设置寄存器

每个DC-DC的输出电压,是通过一个8位寄存器设置的。以DC-DC1为例:

// 设置VDD_CPU为1.1V
// 寄存器地址:0x20
// 电压公式:Vout = 0.7 + (reg_value * 0.0125)
// 1.1V = 0.7 + (32 * 0.0125)
i2c_write(0x34, 0x20, 0x20);

这个公式我背得滚瓜烂熟。为什么?因为调试的时候要反复算。你想想看,要是算错了,电压设高了芯片烧了,设低了系统跑不起来。

3.3 GPIO控制:不只是电源管理

AXP803除了管电源,还带几个GPIO。我经常用它们来做一些辅助功能。

GPIO编号 默认功能 可配置功能
GPIO0 高电平输出 LDO使能、外部中断输入
GPIO1 低电平输出 DC-DC使能、PWM输出
GPIO2 输入 按键检测、ADC输入

举个例子。我曾经用GPIO0来控制一个外设的电源。外设需要3.3V供电,但只在特定场景下才开启。我直接把GPIO0配置成LDO使能,软件里写一句:

// 配置GPIO0为LDO使能模式
// 寄存器地址:0x90,bit0-1设为0x01
i2c_write(0x34, 0x90, 0x01);

// 开启外设电源
// 寄存器地址:0x91,bit0设为1
i2c_write(0x34, 0x91, 0x01);

这样省掉了一个独立的电源开关芯片,成本降了,PCB也干净了。

3.4 动态电压调节(DVS)的实现

DVS是PMIC的核心功能之一。说白了,就是让CPU或GPU在跑高频时电压高一点,跑低频时电压低一点。省电,还降温。

3.4.1 DVS的工作原理

AXP803的DVS是通过I2C写寄存器实现的。CPU频率变化时,Linux内核的cpufreq驱动会调用一个回调函数,里面写PMIC的电压寄存器。

// 伪代码:DVS调压流程
void set_cpu_voltage(int target_mv) {
    int reg_value;
    
    // 计算寄存器值
    reg_value = (target_mv - 700) / 12.5;
    
    // 写电压寄存器
    i2c_write(0x34, 0x20, reg_value);
    
    // 等待电压稳定(至少10us)
    udelay(10);
}

这里有个细节:电压切换时,PMIC内部有一个软启动过程。如果切换太快,输出电压会过冲。我一般会在写寄存器之后加一个10微秒的延时,确保电压稳定了再让CPU继续跑。

3.4.2 多路DVS的同步问题

如果你用的是AXP813,支持两路独立DVS。这时候要注意同步问题。CPU和GPU的电压切换不能同时进行,否则PMIC的电流会瞬间飙升。

我遇到过一个问题:CPU从1.0V升到1.2V,同时GPU从0.9V升到1.1V,结果PMIC的输入电流从1A跳到了3A,直接把前级电源拉垮了。

解决方案很简单:错开切换时间。先切CPU,等100微秒,再切GPU。

// 先切CPU
i2c_write(0x34, 0x20, cpu_new_voltage);
udelay(100);

// 再切GPU
i2c_write(0x34, 0x21, gpu_new_voltage);
udelay(100);

核心要点:DVS不是越快越好。稳定第一,速度第二。我习惯把电压切换速率设为每微秒10mV,这样既快又稳。

3.5 选型总结

最后,我做个简单的总结。三种方案怎么选?

  • AXP803:适合成本敏感、性能要求不高的产品。比如智能家居、简单的人机交互界面。
  • AXP813:适合需要CPU和GPU同时动态调压的场景。比如车载中控、平板电脑。
  • 分立方案:适合对电源效率有极致要求,或者需要特殊电压组合的项目。比如工业控制、医疗设备。

我个人习惯,90%的项目用AXP803或AXP813。为什么?因为省心。你想想看,一个PMIC搞定所有电源轨,上电时序、DVS、GPIO都集成好了,调试起来多方便。分立方案虽然灵活,但调试周期至少多两周,划不来。

好了,这一章就到这里。下一章咱们聊聊PCB布局和散热设计,那又是一个大坑。