ST意法半导体
直播中

小组店小二

9年用户 905经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术 测量仪表 嵌入式技术 制造/封装 模拟技术 连接器 EMC/EMI设计 光电显示 存储技术 EDA/IC设计 处理器/DSP 接口/总线/驱动 控制/MCU RF/无线
私信 关注
[问答]

STM32MP157不退出暂停到Linux怎么处理?

我们在退出挂起模式的 STM32mp157 系统上看到一些奇怪的行为。
这不是'weston'构建,所以我们通过执行“echo mem > /sys/power/state”进入(深度)挂起模式,系统断电并进入低功耗。
root@stm32mp157:~ # echo deep > /sys/power/mem_sleep
root@stm32mp157:~ # echo mem > /sys/power/state
[30.426284]下午:暂停进入(深)
[30.428793] PM:同步文件系统......完成。
[30.477793]冻结用户空间进程......(经过0.001秒)完成。
[30.484664]禁用OOM杀手。
[30.487814]冻结剩余的可冻结任务......(经过0.001秒)完成。
[30.495358]暂停控制台(使用no_console_suspend进行调试)
当唤醒发生时处理器被唤醒,TF-A 检测到处理器退出 STANDBY 并从 eMMC 运行,然而系统始终不执行 Linux 系统,在“Preparing exit to normal world”后挂起
注意:CPU:STM32MP157C?? 版本B
注意:型号:STM32MP157C 系统
信息:重置原因(0x810):
INFO:系统退出 STANDBY
信息:PMIC 版本 = 0x10
信息:使用 EMMC
信息:实例 2
信息:引导使用的分区 fsbl1
注意:BL2:v2.0-r3.0(调试):
注意:BL2:建成时间:2020 年 8 月 21 日 14:46:55
信息:BL2:进行平台设置
信息:内存:DDR3-1066/888 bin G 1x4Gb 533MHz v1.45
信息:BL2 运行 SP_MIN 设置
信息:BL2:加载图像 id 4
信息:在地址 0x2ffef000 加载图像 id=4
信息:图像 id=4 已加载:0x2ffef000 - 0x30000000
信息:BL2:跳过加载图像 ID 5
注意:BL2:引导 BL32
信息:入口点地址 = 0x2ffef000
信息:SPSR = 0x1d3
注意:SP_MIN:v2.0-r3.0(调试):
注意:SP_MIN:建成时间:2020 年 8 月 21 日 14:46:56
信息:ARM GICv2 驱动程序已初始化
信息:stm32mp HSI (18):仅安全
信息:stm32mp HSE (20):仅安全
信息:stm32mp PLL2 (27):仅安全
信息:stm32mp PLL2_R (30):仅安全
信息:SP_MIN:正在初始化运行时服务
信息:SP_MIN:准备退出正常世界
*********** 停在这里,不再继续
我已经使用 EV1 板测试了挂起,并确认 TF-A 消息是相同的,但是 EV1 确实成功地重新启动了 Linux 系统。
Linux 系统是否应该有一些额外的配置允许在 STANDBY 之后执行?







回帖(1)

王树林

2022-12-30 11:29:55
看来问题是 STM32MP1 由于选定的唤醒源而进入暂停低功耗模式。
PMIC 的唤醒按钮被启用为唤醒源,但是没有核心外设(I2C、UART 等)被设置为唤醒源,因此系统进入了 STANDBY 低功耗状态,而不是 Stop 或 LP-Stop。


  • root@stm32mp1:~ # find /sys/devices/platform/ -name wakeup
  • /sys/devices/platform/soc/5c004000.rtc/power/wakeup
  • /sys/devices/platform/soc/49000000.usb-otg/usb1/power/wakeup
  • /sys/devices/platform/soc/40013000.i2c/power/wakeup
  • /sys/devices/platform/soc/5c002000.i2c/i2c-3/3-0033/5c002000.i2c:stpmic@33:onkey/power/wakeup
  • /sys/devices/platform/soc/5c002000.i2c/power/wakeup
  • /sys/devices/platform/soc/40012000.i2c/power/wakeup
  • /sys/devices/platform/soc/40010000.serial/power/wakeup
  • /sys/devices/platform/soc/40010000.serial/tty/ttySTM0/power/wakeup
  • /sys/devices/platform/soc/40018000.serial/power/wakeup
  • /sys/devices/platform/soc/40018000.serial/tty/ttySTM2/power/wakeup
  • /sys/devices/platform/soc/4c001000.mailbox/power/wakeup
  • /sys/devices/platform/soc/40015000.i2c/power/wakeup
  • root@stm32mp1:~ # cat `find /sys/devices/platform/ -name wakeup`
  • enabled
  • disabled
  • disabled
  • enabled
  • disabled
  • disabled
  • disabled
  • disabled
  • disabled
  • disabled
  • disabled
  • disabled
  • root@stm32mp1:~ #

应用笔记 AN5109 指出,STANDBY 只能通过“Group3:BOR,Vbat mon,Temp mon,LSE CSS,RTC,TAMP,Wakeuppins”退出。因此,TF-A 会被唤醒,但 Linux 系统不会被唤醒,因为 onkey 不在唤醒引脚上。
启用 I2C 或 UART 唤醒源等核心外设会使 STM32MP1 进入 Stop/LP-Stop,可以通过“Group 1:USB,CEC, ETH,USART,I²C, SPI,LPTIM”退出
举报

更多回帖

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