1. 项目概述与核心价值
在嵌入式系统,尤其是汽车电子和工业控制这类对可靠性要求极高的领域,给一颗复杂的多核处理器(比如TI的DRA7xx或TDA2x系列)上电,远不是简单地把电源开关一按就完事了。这更像是一场精心编排的交响乐,每个电压轨(Rail)就是一位乐手,必须在指挥的精准调度下,按照严格的顺序和时机“发声”和“静默”。这个指挥,就是电源管理集成电路(PMIC),而乐谱,就是我们今天要深入探讨的“电源序列”。
我手头这个项目,核心就是围绕TI的TPS65917-Q1这颗车规级PMIC展开的。它的任务是为DRA72x/74x/75x以及TDA2x/TDA2Ex系列处理器提供全套的供电方案。你可能觉得,照着官方评估板(EVM)原理图把线连上不就行了?但真到了自己设计板卡、调试启动失败、或者需要实现低功耗睡眠模式时,才会发现魔鬼全在细节里。电源序列配置错一个步骤,轻则系统无法启动,重则可能因为上电浪涌或时序竞争损坏昂贵的处理器。
所以,这篇文章的目的,就是帮你彻底吃透TPS65917-Q1的电源序列逻辑。我会抛开数据手册里那些零散的图表和寄存器描述,以一个实际调试者的视角,把这些序列的“为什么”和“怎么做”串起来讲清楚。我们会重点剖析四种核心状态转换序列:OFF2ACT(冷启动)、ACT2OFF(关机)、ACT2SLP/SLP2ACT(睡眠与唤醒),以及Warm Reset(热复位)。理解这些,你不仅能搞定这块PMIC,更能掌握一套分析任何PMIC电源序列的通用方法论。
2. 器件选型与硬件连接基础
在深入序列之前,必须先搞清楚你手头的TPS65917-Q1是哪个版本。这直接决定了你的电源树设计和序列细节。TI提供了四个OTP版本,通过SW_REVISION寄存器或型号后缀区分。
2.1 四种OTP版本解析
| 型号 | SW_REVISION | GPIO_6功能 | DSPEVE+GPU+IVA最大电流 | 适用场景 |
|---|---|---|---|---|
| O917A130TRGZRQ1 | 0x30 | POWERGOOD | < 2.55 A | DRA72x/TDA2Ex EVM标准配置,或高性能处理器轻载场景 |
| O917A131TRGZRQ1 | 0x31 | NSLEEP | < 2.55 A | 需要支持DDR自刷新睡眠模式的DRA72x/TDA2Ex系统 |
| O917A132TRGZRQ1 | 0x32 | POWERGOOD | <3.0 A | 为DRA74x/75x/TDA2x的高性能核(DSPEVE等)提供更大电流 |
| O917A133TRGZRQ1 | 0x33 | NSLEEP | <3.0 A | 需要DDR自刷新睡眠模式的高性能处理器系统 |
核心差异点:
- 电流能力与SMPS映射:0x30/0x31版本中,SMPS2给VDD_CORE(~1.06V),SMPS3给VDD_DSPEVE/GPU/IVA(~1.15V)。而在0x32/0x33版本中,SMPS2和SMPS3的映射对调了。SMPS2(3.5A)去驱动更高电流的DSPEVE/GPU/IVA域,SMPS3(3A)去驱动CORE域。如果你的处理器是DRA74x/75x这类高性能型号,务必选择0x32或0x33版本,否则SMPS3的3A电流可能无法满足峰值需求。
- 睡眠模式支持:只有0x31和0x33版本将GPIO_6配置为NSLEEP功能引脚,才能支持完整的睡眠序列(ACT2SLP/SLP2ACT)。0x30和0x32版本的GPIO_6是POWERGOOD,无法触发睡眠状态转换。如果你计划实现低功耗待机,选型时这是第一道坎。
2.2 关键硬件连接要点
参考官方用户指南的框图连接是基础,但有几个容易踩坑的点需要特别强调:
VIO_IN供电的玄机:
RESET_OUT和GPIO_4这两个输出信号的逻辑电平是由VIO_IN引脚供电的。这意味着:- 如果你用PMIC自己的SMPS4(1.8V)或外部负载开关(如TPS22965)产生的3.3V来给
VIO_IN供电,那么当这个供电在睡眠模式下被关闭时,RESET_OUT和GPIO_4也会失效。这在某些需要复位信号保持有效的场景下可能是问题。 - 在DDR自刷新模式下,为了满足处理器序列要求,
VIO_IN必须在GPIO_4关闭之后才能下电,在GPIO_4开启之前就必须上电。这通常意味着VIO_IN需要一个独立于PMIC主序列的、更早开启的电源,或者由SMPS4这种在序列中较早开启的电源来供电。
- 如果你用PMIC自己的SMPS4(1.8V)或外部负载开关(如TPS22965)产生的3.3V来给
GPIO_0的上拉电阻:这是一个非常容易忽略但可能导致诡异问题的点。GPIO_0默认被配置为REGEN1(控制一个外部负载开关),但它是一个开漏(Open-Drain)输出。数据手册明确警告:不要将其上拉到常供电(Always-On)的电源轨,如VCCA或LDOVRTC_OUT。因为在PMIC上电、OTP加载之前,GPIO_0默认为输入模式,如果被常供电拉高,可能会产生一个毛刺脉冲,意外提前打开它控制的负载开关。正确的做法是将其上拉到一个由PMIC序列控制的电源,例如SMPS3(1.8V)或LDO4(3.3V)的输出。
复位与使能电路:使能PMIC有两种主要方式:
POWERHOLD(GPIO_5)或PWRON引脚。如果你的系统需要支持热复位(Warm Reset),必须确保在复位期间POWERHOLD保持高电平,否则PMIC会在复位序列中掉电。一种常见的实现技巧是将GPIO_5 (POWERHOLD)与GPIO_2短接,并通过一个电阻上拉到VIO。系统启动后,软件需要先将GPIO_2设置为高电平,再将其配置为输出。这样,POWERHOLD就被软件锁在高电平,热复位时不会掉电。关机时,软件将GPIO_2拉低即可。
3. 静态平台设置(OTP)深度解读
OTP可以理解为PMIC出厂烧录的“固件”,定义了上电后的默认行为。虽然大部分可以通过I2C在运行时修改,但理解默认值至关重要。
3.1 电源监控与状态机
PMIC内部有一个基于比较器的状态机,监控VCCA和VCC_SENSE引脚,决定了PMIC自身的“人生状态”:
- NO SUPPLY:
VCCA低于POR阈值。全断电。 - BACKUP:
VCCA高于POR但VCC_SENSE低于VSYS_LO。仅RTC等最低功耗模块运行。 - OFF:
VCC_SENSE高于VSYS_LO。PMIC核心上电,但所有输出关闭,等待启动命令。 - ACTIVE/SLEEP:
VCC_SENSE高于VSYS_MON(或VSYS_HI),且收到ON请求。执行序列,输出开启。
实操注意:VSYS_MON的阈值在启动时使用OTP值,启动后可通过寄存器配置。确保你的输入电源(连接到VCC_SENSE)在启动瞬间的电压能够快速、稳定地超过这个阈值,否则PMIC会卡在OFF状态。
3.2 默认电压与GPIO配置
SMPS和LDO的默认电压是OTP设定的。这里最需要注意的是SMPS5,它的输出电压由BOOT引脚在上电时的电平决定:接低电平时输出1.35V(适用于DDR3L),接高电平(1.8V)时输出1.5V(适用于DDR3)。这直接关系到你的内存能否正常工作。
GPIO的默认功能映射是序列工作的基础。例如,GPIO_4默认是REGEN2,用于控制连接处理器DDR电源域的负载开关;GPIO_1默认是NRESWARM,用于接收处理器的热复位请求。这些映射在硬件设计时就必须和原理图对应上。
4. 核心电源序列详解与配置逻辑
这是本文的重中之重。TPS65917-Q1的电源序列是硬件固化的,由嵌入式电源控制器(EPC)执行,速度极快且确定性高。每个序列本质上是一系列寄存器访问操作,按预定时序开启或关闭各个资源(SMPS、LDO、GPIO等)。
4.1 OFF2ACT序列:冷启动的精确舞步
当PMIC处于OFF状态,收到ON请求(如PWRON按键按下或POWERHOLD拉高)时,就会执行OFF2ACT序列。我们以O917A130/1(0x30/0x31)的序列为例,拆解其设计逻辑:
- SMPS4 (1.8V) 最先开启:这是PMIC自身的VIO_IN供电来源之一,也是很多IO电平的参考。它必须先稳定,为后续逻辑和输出驱动做好准备。
- LDO5 (1.8V) 紧随其后:通常用于给处理器的RTC或Always-On域供电,需��在核心电压之前建立。
- SMPS5 (DDR电压) 开启:DDR内存供电。在处理器核心上电前,先让内存供电稳定是一个常见的安全设计,可以防止总线状态紊乱。
- GPIO_4 (REGEN2) 使能:这个信号用于打开连接SMPS5到处理器DDR电源域的负载开关。这里有一个关键时序:必须在SMPS5稳定之后,再打开这个开关,避免将不稳定的电压送入处理器。
- 核心电压组(SMPS2, SMPS1, SMPS3)依次开启:分别为处理器的CORE、MPU、DSPEVE/GPU/IVA域供电。它们之间的550µs延时,是为了减少同步上电的浪涌电流,避免输入电源被拉垮。注意0x32/0x33版本中SMPS2和SMPS3的顺序是反的,对应其不同的电流映射。
- LDO2, LDO3 (PHY模拟电源) 开启:为USB, SATA, HDMI等高速PHY提供干净的模拟电源。通常在数字核心供电之后。
- GPIO_0 (REGEN1) 使能:控制给处理器其他IO域(如3.3V)供电的负载开关。
- LDO4 (3.3V), LDO1 (Bypass) 开启:为USB VBUS或其他外设提供3.3V电源。LDO1处于旁路模式,输出等于输入。
- RESET_OUT 最后释放:在所有电源都稳定建立后,PMIC才释放处理器的复位信号。这个2.5ms的延时(从LDO1开启算起)是留给所有电源轨达到稳定、处理器内部时钟锁相环(PLL)锁定等过程的关键时间窗口。这个时间通常需要根据处理器的具体要求来验证,OTP的2.5ms是一个典型值。
配置要点:OFF2ACT序列是OTP固化的,用户无法修改顺序和延时。你能做的是在序列执行完毕后,通过I2C动态调整各电源的输出电压(例如,进行动态电压频率调整DVFS)或开关状态。
4.2 ACT2OFF序列:优雅的关机
当系统运行时(ACTIVE状态),收到OFF请求(如长按电源键),PMIC执行ACT2OFF序列。你可以把它看作是OFF2ACT的逆过程,但顺序并非完全对称。
关机序列的首要原则是:先关闭处理器,再关闭供电。因此:
- RESET_OUT首先被拉低,通知处理器开始关机流程。
- 接着关闭给处理器IO和外围供电的LDO1、LDO4和GPIO_0。
- 然后关闭PHY电源(LDO2, LDO3)。
- 再关闭核心电压(SMPS1, SMPS2, SMPS3)。
- 关键一步:在关闭DDR电源(SMPS5)之前,先关闭
GPIO_4,断开负载开关。这确保了在切断DDR供电时,处理器侧已经与电源隔离。 - 最后关闭DDR电源SMPS5和始终电LDO5,以及PMIC自身的VIO电源SMPS4。
这个序列确保了处理器在失去核心供电前,已经完成了下电流程,并且DDR的供电通路被安全切断。
4.3 ACT2SLP 与 SLP2ACT 序列:实现低功耗睡眠
睡眠模式是低功耗系统的关键。0x31和0x33版本通过GPIO_6的NSLEEP功能支持此模式。其设计目标是实现DDR自刷新(Self-Refresh):关闭处理器大部分电源以省电,但保持DDR供电(SMPS5)和内容不丢失。
睡眠进入(ACT2SLP)流程:
- 软件配置:处理器通过I2C,将所有需要在睡眠时关闭的电源资源的
MODE_SLEEP寄存器位清零(设为OFF)。对于支持睡眠序列的OTP,这一步其实在出厂时已经默认配置好了。 - 资源关联:通过
NSLEEP_xxxx_ASSIGN寄存器,将这些资源与NSLEEP事件绑定。 - 中断清除:清除PMIC所有 pending 的中断,因为任何未处理的中断都会阻止进入睡眠。
- 解除屏蔽:将
POWER_CTRL.NSLEEP_MASK位清零,允许NSLEEP引脚触发睡眠。 - 触发睡眠:处理器将NSLEEP引脚(GPIO_6)拉低,PMIC开始执行硬件睡眠序列。
硬件睡眠序列(以0x31为例):
- 收到SLEEP请求后,NSLEEP引脚变低。
- 依次关闭LDO1, LDO4, GPIO_0, LDO2, LDO3, SMPS1, SMPS2, GPIO_4。
- 注意:
SMPS5和SMPS4(如果给VIO_IN供电)保持开启。RESET_OUT也保持高电平(只要VIO_IN有电)。 - 关闭SMPS3,最后关闭LDO5。此时,仅SMPS5(DDR)和可能的SMPS4(VIO)仍在工作,系统功耗降至最低。
唤醒(SLP2ACT)流程: 当NSLEEP引脚被拉高(WAKE请求),PMIC执行逆向的SLP2ACT序列,按顺序重新开启电源,最终系统恢复到ACTIVE状态。
DDR自刷新模式的关键硬件设计: 为了实现真正的处理器断电而DDR保持,需要GPIO_4控制一个负载开关,隔离SMPS5和处理器DDR电源域。在睡眠时,关闭此开关,处理器端DDR断电,但SMPS5持续为内存芯片供电以维持数据。这就是为什么序列中GPIO_4在SMPS5之前关闭、之后开启的原因。
4.4 Warm Reset序列:系统复位而不掉电
热复位由处理器的NRESWARM引脚触发。它与冷启动(OFF2ACT)的最大区别在于:PMIC本身不掉电,仅重新执行上电序列并拉低RESET_OUT一段时间。
核心行为:
- 无论PMIC之前处于ACTIVE还是SLEEP状态,收到热复位信号后,都会执行OFF2ACT序列。
- 对于序列中包含的电源,会根据其
SMPSx_CTRL或LDOx_CTRL寄存器中的WR_S位决定:是重新加载OTP默认电压值(WR_S=0),还是保持复位前的电压值(WR_S=1)。这对于实现软件动态调压(DVFS)后的复位行为至关重要。 - 序列中不包含的电源资源,状态保持不变。
RESET_OUT会在复位期间被断言(拉低),结束后释放。
极其重要的警告:在进行热复位时,必须确保PMIC的使能信号(POWERHOLD或AUTODEVON)有效。如果使用POWERHOLD且它被置为低电平,PMIC会在热复位序列中直接关机!这就是为什么在支持热复位的系统中,推荐使用前述的GPIO_5与GPIO_2相连并由软件控制的方案。
5. 软件配置与调试实战指南
理解了硬件序列,软件的工作就是与之配合,并配置动态部分。
5.1 上电初始化流程
- 硬件上电与PMIC启动:输入电源满足条件,
POWERHOLD/PWRON有效,PMIC执行OTP中的OFF2ACT序列,所有电源按序输出。 - 处理器启动:
RESET_OUT释放后,处理器开始从Boot ROM执行代码。 - I2C驱动初始化:处理器初始化I2C控制器,并与PMIC(默认地址0x58)建立通信。
- 读取与验证配置:读取
SW_REVISION寄存器,确认PMIC OTP版本与硬件设计相符。读取各电源状态寄存器,确认上电成功。 - 动态电压调整:根据处理器运行频率和性能需求,通过I2C写入
SMPSx_VOLTAGE寄存器,调整SMPS1/2/3的输出电压,实现DVFS。 - 中断配置:根据需要使能热关断(HOTDIE)、看门狗超时等中断,并挂接相应的中断服务程序。
5.2 睡眠/唤醒的软件实现
// 示例:配置并进入睡眠模式 (伪代码) void enter_sleep_mode(void) { // 1. 配置处理器进入深度睡眠状态,设置DDR为自刷新模式 configure_ddr_self_refresh(); // 2. (可选) 对于非0x31/0x33 OTP,需要手动设置MODE_SLEEP // pmic_write(NSLEEP_SMPS_ASSIGN, 0xXX); // 绑定资源到NSLEEP // pmic_write(SMPS1_CTRL, ... & ~MODE_SLEEP_MASK); // 清除MODE_SLEEP位 // 3. 确保PMIC中断已清除 pmic_clear_all_interrupts(); // 4. 解除NSLEEP屏蔽 pmic_write(POWER_CTRL, pmic_read(POWER_CTRL) & ~NSLEEP_MASK); // 5. 将GPIO_6(NSLEEP)配置为输出并拉低 // 注意:需要先将GPIO_6切换到GPIO模式,再控制。这里假设已配置好。 set_gpio_output_low(GPIO_6_NSLEEP); // 6. 处理器执行WFI/WFE指令进入低功耗状态 // PMIC检测到NSLEEP低电平,自动执行ACT2SLP序列 __WFI(); } // 唤醒由外部事件触发,PMIC自动执行SLP2ACT序列,处理器从休眠点继续执行5.3 常见问题排查与调试技巧
系统无法启动,处理器无反应
- 检查:首先测量PMIC所有电源输出是否正常。使用示波器,对照OFF2ACT序列时序图,检查每一路电源是否按顺序、按时序上电。重点检查
RESET_OUT信号,它是否在所有电源稳定后延迟2.5ms才变高?如果提前变高,处理器可能因供电不稳而启动失败。 - 检查:
VIO_IN电压是否正常?RESET_OUT和GPIO_4的电平是否正常? - 检查:
BOOT引脚电平是否正确?它决定了SMPS5是1.35V还是1.5V,必须与你的DDR内存类型匹配。
- 检查:首先测量PMIC所有电源输出是否正常。使用示波器,对照OFF2ACT序列时序图,检查每一路电源是否按顺序、按时序上电。重点检查
无法进入睡眠模式
- 检查:首先确认PMIC OTP版本是0x31或0x33。0x30/0x32不支持硬件睡眠序列。
- 检查:
NSLEEP引脚(GPIO_6)是否已被正确拉低?用示波器查看。 - 检查:
POWER_CTRL.NSLEEP_MASK位是否已清零? - 检查:PMIC是否有未处理的中断?读取中断状态寄存器并清除。
- 检查:
GPIO_4控制的负载开关是否在睡眠时正确断开?测量处理器侧的DDR电压是否降为0,而PMIC侧的SMPS5是否保持1.35V/1.5V。
热复位导致系统完全断电
- 检查:
POWERHOLD信号在热复位期间是否始终保持高电平?如果使用PWRON按钮方案,热复位时按钮是否被误触发?最佳实践是采用软件控制GPIO_5的方案。
- 检查:
电源轨有噪声或纹波过大
- 检查:PCB布局。每个SMPS的电感、输入输出电容必须尽可能靠近芯片引脚,功率回路面积最小化。特别是大电流的SMPS1/2/3。
- 检查:AVS(自适应电压调节)引脚是否已正确连接到处理器的相应VID引脚?如果未连接,SMPS会输出OTP默认电压,可能导致处理器不稳定。
调试建议:准备一台支持多通道的数字示波器,将关键电源轨(如SMPS5, SMPS1, SMPS2/3)以及RESET_OUT、GPIO_4、NSLEEP等控制信号连接起来,同时捕获上电、下电、睡眠、唤醒的波形。与数据手册中的时序图进行比对,是定位序列问题最直接有效的方法。
6. 总结与进阶思考
TPS65917-Q1通过其硬化的电源序列,为DRA7xx/TDA2x处理器提供了“开箱即用”的电源管理方案,极大地简化了硬件设计和底层软件工作。然而,真正的掌握来自于理解其设计哲学:以确定性的硬件时序满足处理器对电源轨上电/下电顺序、延时、单调性的严苛要求。
当你需要为更复杂的多电源域系统设计电源方案时,可以借鉴这里的思路:首先明确各负载的电气规格和上电顺序要求;然后选择或设计能够产生这些电压的电源芯片;最后,通过PMIC、专用时序芯片、或FPGA/CPLD,生成严格同步的控制信号(Enable/PSYNC)来管理整个序列。对于TPS65917-Q1,虽然其核心序列是固定的,但通过灵活运用其GPIO、寄存器配置以及与处理器的软件交互,依然可以实现相当复杂的电源状态管理,满足从高性能运算到超低功耗待机的各种场景需求。记住,可靠的电源是任何电子系统的基石,在电源设计上多花一份心思,就能在系统调试中省去十分力气。