使用 NXP PCA9450C PMIC 构建 Linux 电源总线监控器
为什么要构建这个项目?
在开发 i.MX 8M Plus 系统时,处理器只是整个电源架构的一部分。PMIC 需要生成多个电源轨,处理启动和关机序列,支持不同的工作条件,并在调节器报告故障时做出正确响应。
NXP PCA9450C 是专为此任务设计的芯片,集成了多个降压稳压器、五个 LDO、负载开关、电源控制逻辑以及 I²C 接口。PCA9450C 还可在相应的降压稳压器上实现动态电压调节,因此当处理器需要不同电压工作点时非常实用。
在成熟的嵌入式产品中,大多数开发者通常通过处理器的 Linux 调节框架间接与 PMIC 交互。这种方式方便,但可能使电源问题的调试变得困难。
我想要一个小型实验室环境,能够直接对 PMIC 进行检测。
本项目的作用
该项目使用 i.MX 8M Plus Linux 系统通过 I²C 与 PCA9450C 进行通信。
软件主要完成四项任务:
- 检测 I²C 总线上是否存在 PCA9450C。
- 读取 PMIC 的设备 ID 和状态寄存器。
- 检查调节器故障状态寄存器。
- 读取并配置选定的调节器寄存器,用于实验室测试。
PCA9450 在上电复位后具有 7 位的 I²C 地址 0x25。它支持标准模式、快速模式和快速增强模式的 I²C 操作,最高可达 1 Mbit/s。
因此,在底层板卡和设备树配置正常运行后,从 Linux 系统中对 PMIC 进行调试相对容易。
理解电源架构
PCA9450C 并非仅仅是多个独立电压调节器的简单组合。
对于 i.MX 8M Plus 设计,NXP 的应用说明指出,BUCK1 和 BUCK3 以双相配置工作,而 BUCK2 提供另一个与处理器相关的电源。BUCK4 用于 3.3 V 供电轨,BUCK5 和 BUCK6 则提供额外的低压供电轨。
这种架构在调试嵌入式处理器板时尤为关键,因为启动失败可能并非源自处理器本身。错误的总线、使能问题、过流状态或错误的启动顺序可能导致系统无法进入 Linux。
从 Linux 读取 PMIC
启动 Linux 后,第一步是验证 PMIC 是否可见:
当所选总线连接到 PMIC 的 I²C 接口时,PCA9450 应在地址 0x25 处显示。
随后,Python 应用程序可直接读取 PMIC 的寄存器。
例如,寄存器 0x00 包含设备 ID 寄存器。NXP 文档中记录的默认复位值为 0x11。
然后可以使用状态寄存器来检查电源开启、看门狗、温度、低 VSYS 以及电压调节器故障信息。
为什么这有用
这并非旨在替代 Linux 的调节器驱动程序。
其目的不同:它提供了一种底层诊断工具,在启动新电路板时非常实用。
例如,当自定义的 i.MX 8M Plus 板无法启动时,开发者可以检查以下内容:
PMIC 是否响应?
•I²C 地址是否正确?
•PMIC 是否报告了调节器故障?
•系统是否处于低 VSYS 状态?
•热管理或看门狗的状态位是否激活?
•预期的调节器配置值是否存在?
这可以在电路板调试过程中节省大量时间。
添加示波器
软件界面只是实验的一半。
我还会将示波器探头连接到选定的电源轨,将软件配置与实际电压波形进行比对。
这在启动过程中尤其有用。调节器可能已达到预期的寄存器配置,但物理波形仍可能出现过度振荡、缓慢归零、意外的负载瞬变或其他板级问题。
因此,示波器提供电气层面的视图,而Linux则提供配置和状态信息。
安全的电压实验
PCA9450提供了可编程的调节器输出。然而,在Linux运行期间盲目更改处理器供电并非一个理想的实验。
正因如此,本项目将诊断功能与电压实验分开。
初始软件仅读取状态寄存器和配置寄存器。另一个独立的可选实验会改变实验室中的LDO输出,该输出并未连接至处理器核心供电。
这对于任何人将本项目适配到自己的电路板上来说,是一个重要的区别。
我学到的经验
最重要的教训是,PMIC应被视为嵌入式系统的一部分,而不是一个黑箱。
处理器、电源管理芯片(PMIC)、存储器、时钟、复位信号和电源顺序都需要协同工作。
PCA9450C 尤其引人注目,因为它将高电流降压稳压、低电流LDO、负载切换、DVS、电源控制逻辑以及I²C监控功能集成于单一器件中。
一旦基本监控功能正常运行,同样的软件便可扩展为电路板上电调试工具、自动化生产测试夹具或功耗特性分析工具。
代码
本文编译自hackster.io





