2389010_zh-CN

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2389010_zh-CN

2389010_zh-CN

在修改 startup_cm7.s 中的 RamInit 后,S32K312 的待机唤醒功能停止工作。保留部分 sram

说明:

在我的链接器脚本中,我在 SRAM 的 0x20417F80 处有一个 128 字节的邮箱(RAM 顶部,NOLOAD,不包含在 init/零表中)。我用它来在应用程序启动时将标志从应用程序传递给引导加载程序——这些数据需要保留下来以用于编程标志。

为了阻止启动时的 ECC 初始化循环清除该邮箱,我编辑了 startup_cm7.s 文件中的 RamInit 部分。因此,零循环在邮箱之前停止,而不是进入__INT_SRAM_END:

RamInit:
ldr r0,=__RAM_INIT
cmp r0, 0
beq SRAM_LOOP_END
ldr r0,=MCRGM_DES
ldr r1,[r0]
ldr r2,=MCRGM_DES_F_POR
以及 r1、r1、r2
cmp r1,0
beq NO_INIT_STANDBY_REGION
ldr r1, =__INT_SRAM_START
ldr r2, =__PBL_SBL_MAILBOX_ADDR ; <-- 已编辑(原为 __INT_SRAM_END)
b ZERO_64B_RAM
NO_INIT_STANDBY_REGION:
ldr r1, =__BSS_SRAM_START
ldr r2, =__PBL_SBL_MAILBOX_ADDR ; <-- 已编辑(原为 __INT_SRAM_END)
ZERO_64B_RAM:

通过此修改,当应用程序跳转到引导加载程序时,邮箱可以正确保留。用于编程/刷写

但修改后,待机唤醒功能停止工作了。我的应用程序在 IGN-low 状态下进入待机状态,并且不再唤醒——核心卡住无法恢复。在 rasr[] 0x2040012e

如果我将 RamInit 恢复为默认值(循环在 __INT_SRAM_END 结束),则备用唤醒功能可以再次正常工作,但邮箱将不再保留。

所以这两者直接相关:保留我的邮箱的启动编辑破坏了我的备用唤醒功能。

我的问题:

  1. 为什么编辑 RamInit 区域(改变 SRAM 零循环停止的位置)会导致待机唤醒功能失效?待机/唤醒恢复路径中的哪些部分取决于启动时的 RAM 初始化行为?
  2. 如何正确修改启动程序,以便在应用程序到引导加载程序跳转过程中保持邮箱区域不变,同时又不破坏待机唤醒功能?
  3. 换用不同的即饮型饮料(例如)会怎么样?RTD 2.0.0 或 RTD 4.0.0)更改此启动/唤醒行为并解决此问题,或者这与 RTD 版本无关?

附件: startup_cm7.s(txt)(编辑了 RamInit),PBL 链接器脚本(txt)(显示邮箱位于 0x20417F80),system.c.

S32DS-ARM S32K312EVB-Q172

调试 | Flash 编程SDKRe: S32K312 standby wakeup stops working after editing RamInit in startup_cm7.s to retain part of s

你好@Arif9845

我看到您也提交了支持工单;我将通过工单回答您的问题,以免产生任何误解。

此致,
朱利安

标记 (1)
无评分
版本历史
最后更新:
‎07-02-2026 02:29 AM
更新人: