This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2634:复位后在 RAM 中保留变量。

Guru**** 2557640 points
Other Parts Discussed in Thread: TMS570LS1227, SYSCONFIG, AM2634

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1562092/am2634-retaining-variables-in-ram-after-reset

器件型号:AM2634
“主题“中讨论的其他器件:TMS570LS1227SYSCONFIG

工具/软件:

您好:

我目前正在努力从 TMS570LS1227 移植固件。 其中一个模块需要在固件和 SBL 之间共享数据、以便可以在引导加载程序中完成在固件中初始化的 UDS 事务。 这使得之后 SBL 能够处理固件更新。

我已使用 SysConfig 在引导加载程序和固件项目中定义 UDS_SHM_MEM 内存区域和 UDS 共享段(请参阅下图)。

最初、我在固件中实现了看门狗复位。 但是、复位后、不保留 RAM 内容、并且所有存储器位置都初始化为 0。

在搜索论坛后,我遇到了以下帖子.

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1255920/am2634-non-initialized-ram-area-after-reset

我没有使用看门狗复位,而是尝试执行软件热复位(通过函数调用 SOC_generateSwWarmReset())。 遗憾的是、这无法解决问题、并且存储器仍初始化为 0。

根据我在 TMS570LS1227 上的经验、我记得需要对汇编器初始化代码进行定制。 但是、在查看 AM2634 代码后、我看不到任何需要修改的地方。

在固件和 SBL 之间实现 RAM 共享、确保 RAM 保留其内容的正确方法是什么?

此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Damian:

    对延迟的答复表示歉意。

    RAM 内容将一直显示、直到断电

    但 ROM 将覆盖它使用的部分、并初始化它使用的组、这将在任何复位热复位 POR 等之后发生

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Nilabh、

    我终于找到了时间来重新审视这个问题,在工作了一段时间后,其他的东西。

    感谢您的澄清。

    UDS_SHM_MEM通过将缓冲区移到可用 OCRAM 的最末端、我成功地实现了固件和引导加载程序之间0x701F'F000 – 0x701F'FFFF的缓冲区共享 ()。 当我放置UDS_SHM_MEM在时0x7005'0000、我的第一次尝试失败、但新位置按预期工作。

    我还可以确认、在看门狗复位和软件热复位期间、存储器会保留其内容。

    由于首次尝试失败、我想问是否有任何官方文档可用于 ROM 引导加载程序、说明在 ROM 引导加载程序启动 SBL 时使用和初始化哪些存储器区域。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于第一次尝试失败、我想问 ROM 引导加载程序是否有任何可用的官方文档、说明在 ROM 引导加载程序启动 SBL 时使用和初始化哪些存储器区域。

    是的、请查看 SBL 代码链接器文件以了解更多详细信息、它映射了 SBL 使用的所有存储器段。

    它由 syscfg 生成。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您最初提到 ROM 引导加载程序(主引导加载程序)会覆盖并初始化它使用的存储器区域。 据我所知(基于我观察到的情况)、RAM 的某些部分在该阶段确实会被初始化。 如果可能、明确说明 ROM 引导加载程序使用和初始化哪些存储器区域(尤其是显式初始化的存储器区域)会非常有帮助。

    SBL 本身不是问题、因为我可以使用 SysConfig 调整存储器使用情况、正如您提到的、请参阅链接器文件以了解其映射方式。 主要挑战是在 SBL 执行开始之前了解 ROM 引导加载程序处理的区域。

    再次感谢您的支持。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、TRM 中的 PBIST 选项下提到:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于有四个存储器组、每个 512KB(作为 L2OCRAM 提供)、并且前两个存储器组正在由 ROM 引导加载程序测试、因此使用剩余的两个存储器组在固件和引导加载程序之间进行数据共享应该是安全的。

    非常感谢您的帮助。