STM32/STM8技术论坛
直播中

凌流浪

8年用户 1021经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

STM32MP157-DK2做的stm32mp157FAD1核心板停止M4核固件后不能进入低功耗是怎么回事?

参考STM32MP157-DK2做的核心板,但是将I2C4修改成连接PD12,PD13,使用GPIOD没有使用GPIOZ。在MPC端通过 echo mem > /sys/power/state进入低功耗,MCU的固件运行时没有问题,MCU的固件不启动或停止时进入低功耗会在32秒后被看门狗重启。我追踪发现是suspend时以下位置I2C配置出问题了:driver_suspend()stpmic1_lp_copy_reg()stpmic1_register_read()stm32_i2c_read_write_membyte()hi2c->i2c_state = write ? I2C_STATE_BUSY_TX : I2C_STATE_BUSY_RX;hi2c->i2c_err = I2C_ERROR_NONE;i2c_transfer_config(hi2c, dev_addr, I2C_MEMADD_SIZE_8BIT,write ? I2C_RELOAD_MODE : I2C_SOFTEND_MODE,I2C_GENERATE_START_WRITE);timeout_ref = timeout_init_us(I2C_TIMEOUT_BUSY_US);if (i2c_wait_txis(hi2c, timeout_ref))goto bail;我的MCU的固件代码中有__HAL_RCC_GPIOD_CLK_ENABLE();这个GPIOD时钟使能的处理,当我不做GPIOD时钟使能时,MCU的固件运行时进入低功耗也会出这个问题。
从现状看像是GPIOD时钟没使能导致的问题。但是我取了寄存器RCC_MP_AHB4ENSETR的值查看,发现GPIODEN位是1,难道MPC端使能GPIOD时钟还有什么其他操作吗?而且通过echo -n stop > /sys/class/remoteproc/remoteproc0/state停止MCU的固件之后会出问题,难道这样还会把使能的GPIOD时钟关闭吗?


回帖(1)

杨福林

2024-3-7 16:34:35
基于您所提供的信息,似乎是在进入低功耗模式时,I2C4配置出现了问题,导致不能进入低功耗模式。以下是一些可能的解决方案:

1. 确保I2C4的引脚映射和配置正确。检查引脚连接和配置是否与您的硬件设计和目标配置一致。

2. 确保使用的GPIO引脚在进入低功耗模式时被正确地配置为输入或输出状态。

3. 检查您的固件是否正确地关闭I2C4功能和总线,以便在进入低功耗模式时不会产生冲突。您可以在进入低功耗模式之前,显式地关闭I2C4功能。

4. 检查是否有其他外设或模块使用了I2C4,可能会与进入低功耗模式产生冲突。如果有其他外设使用了I2C4,您可能需要在进入低功耗模式之前,必要地将其关闭。

5. 对照参考设计和标准应用程序示例,检查您的代码是否正确地处理低功耗模式的进入和退出过程。您可以参考STM32的技术文档和软件库来了解正确的低功耗模式配置和操作。

最后,如果问题仍然存在,您可能需要更详细地调试和分析代码,以确定具体造成无法进入低功耗模式的原因。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分