1. 项目背景与问题定位
在杰理芯片的应用开发中,软关机功能的设计一直是工程师们关注的重点。最近遇到一个典型问题:当系统配置为软关机模式时,VDDIO(通用输入输出电源)无法正常掉电。这种情况会导致设备在"关机"状态下仍然消耗可观的电流,严重影响电池供电设备的待机时间。
我最近在调试AC6905A型号时就遇到了这个棘手的问题。实测发现,当执行软关机命令后,主电源VDD确实按预期断电,但VDDIO仍保持着3.3V的输出,整机电流维持在500μA左右。这个数值对于纽扣电池供电的设备来说简直是灾难性的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 软关机机制深度解析
2.1 杰理芯片的电源架构
杰理系列芯片采用多电源域设计,主要包括:
- VDD:主电源,为CPU核心和主要外设供电
- VDDIO:IO口电源,为GPIO、UART等接口电路供电
- VBAT:备份电源,为RTC等关键模块供电
在正常工作模式下,VDD和VDDIO通常由同一个LDO输出。但在低功耗设计中,这两个电源往往需要独立控制。
2.2 软关机的标准流程
规范的软关机流程应该包含以下步骤:
- 保存关键寄存器状态
- 关闭所有外设时钟
- 配置IO口状态(通常设为输入模式)
- 切断VDDIO电源
- 最后关闭VDD电源
问题就出在第4步——我们的配置没有成功让VDDIO断电。
3. 问题排查与解决方案
3.1 寄存器配置检查
首先需要检查电源管理寄存器(PWR_CTRL)的配置。在杰理SDK中,控制VDDIO的关键位是PWR_VDDIO_EN:
c复制#define PWR_VDDIO_EN (1 << 3) // Bit3控制VDDIO电源
正确的软关机配置应该包含:
c复制PWR_CTRL &= ~PWR_VDDIO_EN; // 关闭VDDIO电源
但实际测试发现,单独执行这条指令并不能真正切断VDDIO。
3.2 硬件设计验证
通过原理图检查发现,VDDIO电源路径上有一个100nF的电容(C23)直接接在VDDIO和GND之间。这个电容的放电时间常数为:
τ = R × C = 10kΩ(内部放电电阻) × 100nF = 1ms
理论上1ms后VDDIO应该放电完毕,但实测电压一直维持在3.3V
