2406767_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2406767_zh-CN

2406767_zh-CN

S32K3 备用 RAM 数据在 Reset_Handler 之前已修改

你好,

当我使用 PE Micro 调试 S32K344 时,我发现了一个数组(__attribute__ ((section(".standby_data")))位于备用 RAM 段中的 volatile uint32_t WkupSourcestatus1[64];) 在进入 main() 时被意外修改。然后,如附图所示,我手动修改了寄存器,重新初始化了备用 RAM 区域。数据已正确初始化为 0,进入 main() 函数后,一切运行正常。但是,RESET 后,当我进入 Reset_Handler 时,WkupSourcestatus1 数组中的数据又被修改了。为什么会发生这种情况?我注意到数组中出现了大量的 0x5AA55AA5 值。这是否与 SBAF_BOOT_MARKER 有关?我在另一块电路板上测试过,现象相同。

8.png8.png8.png8.png8.png8.png8.png8.png

然后我改用 J-Link 进行调试,发现调试过程中 RESET 时没有出现异常。但是,在重新启动调试会话后,备用 RAM 区域中的所有数据都会变成 0xDEADBEEF。这是预期行为吗?

S32K344

S32DS3.6.4

RTD700

PE 版本 6.0.8


BR,

杰森

Re: S32K3 Standby RAM data modified before Reset_Handler

HI

抱歉回复晚了,最近需要处理的咨询很多。

我建议您参考有关S32K311 待机 RAM 保留的讨论,了解如何使用待机 RAM。

此致敬礼,
Robin

Re: S32K3 Standby RAM data modified before Reset_Handler

RESET 期间备用 RAM 的内容将保持不变,您观察到的值应该是 MCU RESET 前的内容。

=======================================================================================

RAM 由 SRAM 存储器和 TCM 集成而成。部分SRAM内存处于待机状态
模式。这意味着将MCU设置为待机模式后,该存储器中的内容将被保留。这
S32K3产品系列利用了ARM Cortex M7架构的TCM特性,其主要目的是
为核心提供确定性的访问时间,以便访问一些重要数据,避免访问延迟。这
该特性可在实时操作系统中加以利用。

如前所述,由待机功能域提供的存储在待机 SRAM 存储器中的数据在以下情况下会被保留:
MCU处于待机模式,唤醒后即可使用。但 Run 提供的 SRAM 中的数据却来自这里。
功能域不可用,需要在唤醒后进行初始化,以避免 ECC 错误。很重要
需要指出的是,唤醒后,待机 SRAM 不需要初始化以避免 ECC 错误,但是
SRAM 的其余部分确实需要它,因此应该在启动代码中进行适当的区分。一个
以下代码示例说明了如何进行这种区分。

Re: S32K3 Standby RAM data modified before Reset_Handler你好

抱歉回复晚了。

在我的测试中,我没有执行任何睡眠/唤醒操作。我只是通过 S32DS 执行了 RESET,这导致待机 RAM 区域中的数据发生了变化。检查映射文件,该变量确实位于备用 RAM (0x20400000) 中。我查看了您提供的链接,但它似乎与该链接中的问题无关。

BR,
杰森
Re: S32K3 Standby RAM data modified before Reset_Handler你好,

我没有PEMicro账户。如果可以的话,请帮我联系一下PEMicro的技术支持。非常感谢。

BR,
杰森
Re: S32K3 Standby RAM data modified before Reset_Handler

嗨,杰森,

J-Link0xDEADBEEF — 来自 JLinkScript 的 ECC 初始化

这是预期行为,由 J-Link 的 `S32K344.jlinkscript` 中内置的 ` SetupTarget ()` 函数执行。请检查日志中是否存在类似以下内容的条目:

SetupTarget() start
Initializing ECC RAM...
RAMCodeAddr: 0x20000000 RAMInitAddr: 0x20000010 RAMInitSize: 0x00007FF0
InitPattern: 0xDEADBEEF ECC RAM initialized successfully

Initializing ECC RAM...
RAMCodeAddr: 0x20000000 RAMInitAddr: 0x20400000 RAMInitSize: 0x00004000
InitPattern: 0xDEADBEEF ECC RAM initialized successfully ← Standby RAM!
SetupTarget() end - Took 25.3ms

我不确定PEMicro是否有类似的机制,但以下是控制台日志:

;begin_cs device=$00400000, length=$003F4000, ram=$20400000
Loading programming algorithm ...

看起来,闪存编程算法会暂时加载到地址 $20400000(备用 RAM 的起始地址)的 RAM 中执行。

您可能需要向PEMicro 技术支持进一步核实。您有PEMicro账户吗?或者您希望我帮您查询一下?

タグ(1)
評価なし
バージョン履歴
最終更新日:
昨日
更新者: