1. 问题现象与背景解析
最近在调试杰理AC692X系列芯片的可视化SDK时,遇到了一个比较隐蔽的硬件复位问题。具体表现为:当我们关闭SDK内置的充电管理功能后,将VPWR引脚(电源控制端口)手动拉高到3.3V,系统会在开机约2秒后触发P33_PPINR1_RST复位信号,导致设备异常重启。
这个现象最初在客户现场被发现,当时设备在特定电源切换场景下频繁重启。通过逻辑分析仪抓取波形发现,每次复位前P33_PPINR1_RST引脚都会出现一个约100ms的低电平脉冲。更奇怪的是,这个问题只在关闭内置充电功能时出现,使用默认SDK配置则完全正常。
2. 硬件连接与信号分析
2.1 关键引脚功能定义
首先需要明确几个关键引脚的功能:
- VPWR:电源控制引脚,通常连接PMIC或外部LDO使能端
- P33_PPINR1_RST:多功能复用引脚,既可作为GPIO也可作为复位信号输入
- VBAT:主电源输入引脚(3.0-4.2V)
- VDDIO:IO电源域(通常3.3V)
在杰理的标准参考设计中,VPWR默认通过10k电阻上拉到VBAT。当启用内置充电管理时,芯片内部会动态控制该引脚电平;而关闭充电功能后,该引脚状态完全由外部电路决定。
2.2 复位信号产生机制
查阅AC692X的技术参考手册发现,P33_PPINR1_RST的复位功能受以下条件触发:
- 电源监控单元(PMU)检测到VBAT电压低于2.9V
- 看门狗定时器超时
- 软件主动写复位寄存器
- 该引脚外部输入低电平>20ms
通过排除法分析:
- VBAT电压稳定在3.7V(排除条件1)
- 看门狗已禁用(排除条件2)
- 无软件复位操作(排除条件3)
- 逻辑分析仪确实捕获到低电平脉冲(符合条件4)
3. 根本原因定位
3.1 电源时序冲突
进一步测量各电源轨的上电时序发现异常:
- 开机瞬间VBAT先上电
- VPWR被外部电路拉高(此时VDDIO尚未稳定)
- 约1.8秒后VDDIO达到3.3V
- 随后P33_PPINR1_RST出现低脉冲
问题出在VPWR过早被拉高。芯片内部电源管理单元要求VPWR必须在VDDIO稳定后才能改变状态。当违反此时序时,内部保护电路会通过P33_PPINR1_RST强制复位。
3.2 SDK配置的影响
对比开启/关闭充电功能时的寄存器配置差异:
c复制// 充电功能开启时的默认配置
PMU_CTRL |= (1<<5); // 使能VPWR内部上拉
P33_CONF &= ~(1<<3); // 禁用P33复位功能
// 关闭充电功能后的配置
PMU_CTRL &= ~(1<<5); // 关闭VPWR内部上拉
// P33_CONF保持默认值(可能使能复位功能)
关键点在于:关闭充电功能时,SDK默认不会主动配置P33_CONF寄存器,导致P33_PPINR1_RST的复位功能意外使能。
4. 解决方案与验证
4.1 硬件修改方案
方案一:增加RC延迟电路
code复制VBAT ──┬── 10k ── VPWR
│
100nF
│
GND
在VPWR上增加100nF电容,使上电时VPWR缓慢上升,确保晚于VDDIO稳定。
方案二:隔离控制
code复制 3.3V
│
___
│ │ 10k
│___│
│
NPN (MMBT3904)
│
VPWR ──┘
使用三极管做电平转换,确保VPWR只在VDDIO稳定后被控制。
4.2 软件配置修正
在初始化代码中强制配置相关寄存器:
c复制void power_init(void) {
// 无论是否启用充电功能,都执行以下配置
P33_CONF &= ~(1<<3); // 明确禁用P33复位功能
PMU_CTRL |= (1<<5); // 保持VPWR内部上拉
if(!enable_charging) {
// 关闭充电时的特殊处理
P33_DIR |= (1<<1); // 设置P33_PPINR1为输出模式
P33_PULL |= (1<<1); // 使能内部上拉
}
}
4.3 验证结果
修改后测试数据对比:
| 测试项 | 修改前 | 修改后 |
|---|---|---|
| 开机复位发生率 | 100% | 0% |
| VPWR上升时间 | 50ms | 200ms |
| VDDIO-VPWR时差 | -1.5s | +300ms |
5. 经验总结与避坑指南
5.1 关键注意事项
-
电源时序规则:
- VDDIO必须早于VPWR稳定
- VBAT到VDDIO的转换时间建议>100ms
- VPWR上拉电阻不宜小于4.7k
-
SDK配置陷阱:
- 关闭充电功能时需手动处理相关GPIO配置
- 特别注意P33端口复用功能的选择
- 建议在system_init()之后延时50ms再操作VPWR
-
测试建议:
- 使用示波器同时抓取VBAT、VDDIO、VPWR波形
- 重点关注1.8-2.5秒时间窗口的异常
- 批量生产前做100次循环上电测试
5.2 调试技巧
当遇到类似复位问题时,可以按以下步骤排查:
- 确认所有电源轨电压是否达标(VBAT>3.0V, VDDIO>3.2V)
- 检查P33_PPINR1_RST引脚配置模式(输入/输出/复用)
- 测量VPWR与VDDIO的上电时序关系
- 查看PMU_STATUS寄存器的复位标志位
- 尝试临时短接P33_PPINR1_RST到VDDIO测试
5.3 扩展建议
对于需要动态控制VPWR的应用场景,推荐:
- 使用GPIO控制MOSFET而非直接驱动
- 在VPWR线上串联100Ω电阻限流
- 在PCB布局时使VPWR走线远离高频信号
- 在SDK中增加电源状态机监控代码
这个案例给我的深刻教训是:芯片厂商提供的SDK默认配置往往针对典型应用场景优化,当我们需要关闭某些基础功能时,必须全面检查所有相关模块的依赖关系。特别是电源管理这种涉及多个硬件模块的功能,任何配置变更都可能引发连锁反应。