You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ARM Trusted Firmware中修改STM32MP的I2C引脚配置?

问题描述

使用STM32MP处理器,通过ARM Trusted Firmware(ATF)与PMIC通信时,烧录固件出现**"I2C device not ready"**错误。经排查,问题源于I2C引脚配置错误:当前SDA、SCL引脚为PZ4和PZ5,需修改为PF14和PF15。目前I2C可正常初始化,但执行以下代码时触发错误:

ret = stm32_i2c_init(i2c, &i2c_init);
if (ret != 0) {
    ERROR("Cannot initialize I2C %x (%d)\n",
          i2c->i2c_base_addr, ret);
    panic();
}

if (!stm32_i2c_is_device_ready(i2c, pmic_i2c_addr, 1,
                   I2C_TIMEOUT_BUSY_MS)) {
    ERROR("I2C device not ready\n");
    panic();
}
解决方案:修改ATF中的I2C引脚配置

针对STM32MP平台的ARM Trusted Firmware,按以下步骤修改引脚配置:

1. 定位引脚配置文件

STM32MP1的ATF引脚复用配置位于plat/st/stm32mp1/stm32mp1_pinmux.c,该文件定义了所有引脚的复用模式、上下拉和速度参数。

2. 替换I2C引脚配置

在文件中找到PMIC所用I2C控制器(通常为I2C4,PF14/PF15对应I2C4的SDA/SCL,需参考STM32MP1参考手册确认复用功能)的引脚定义:
将原有的PZ4/PZ5配置:

PINMUX_GRP(PZ4, PINMUX_MODE_AF4, PINMUX_PULL_UP, PINMUX_SPEED_MEDIUM), /* I2C4_SDA */
PINMUX_GRP(PZ5, PINMUX_MODE_AF4, PINMUX_PULL_UP, PINMUX_SPEED_MEDIUM), /* I2C4_SCL */

替换为PF14/PF15的配置:

PINMUX_GRP(PF14, PINMUX_MODE_AF4, PINMUX_PULL_UP, PINMUX_SPEED_MEDIUM), /* I2C4_SDA */
PINMUX_GRP(PF15, PINMUX_MODE_AF4, PINMUX_PULL_UP, PINMUX_SPEED_MEDIUM), /* I2C4_SCL */

注意:PINMUX_MODE_AF4是PF14/PF15作为I2C4引脚的正确复用模式,需严格匹配参考手册中的引脚功能定义。

3. 确认I2C控制器关联配置

检查plat/st/stm32mp1/include/plat_pmic.h或drivers/st/pmic/stm32mp_pmic.c,确保PMIC驱动使用的I2C实例(如I2C4)与修改后的引脚配置对应,避免控制器与引脚不匹配。

4. 重新编译ATF

修改完成后,使用交叉编译工具链重新编译ATF:

make CROSS_COMPILE=aarch64-none-linux-gnu- PLAT=stm32mp1 all

编译完成后,会生成BL31固件(build/stm32mp1/release/bl31.bin)。

5. 烧录验证

将新编译的BL31固件烧录到STM32MP开发板的对应分区,重启设备后检查I2C通信是否正常,确认不再触发"I2C device not ready"错误。


内容的提问来源于stack exchange,提问作者euraad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:42:44