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.

[参考译文] RM48L530:如何在 PBIST 和内存 Init 之后保留 RAM 数据

Guru**** 2482105 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/709962/rm48l530-how-to-keep-ram-data-after-pbist-and-memoryinit

器件型号:RM48L530
主题中讨论的其他器件:HALCOGEN

你(们)好

我们的应用程序使用 Halcogen 生成的自检(在 sys_startup.c 中运行)。 这些测试包括 PBIST 测试、之后是一个 memoryInit。 遗憾的是、我们在 RAM 的_no_init 段中定义了段、这些段保存应用程序所需的信息、而这些信息因这些测试而丢失。

因此、通常顺序为:

应用程序检测到一些异常处理程序捕获的一些致命程序错误

2.错误数据存储在_NO_INIT RAM 段中

3.生成软件复位

4.应用程序启动自检(PBIST 和内存初始化)

5.应用程序通过读取 RAM 然后向用户报告来检查异常原因。

问题是、步骤4会破坏 RAM 中的错误信息。 经修订的办法是:

应用程序检测到一些异常处理程序捕获的一些致命程序错误

2.错误数据存储在_NO_INIT RAM 段中

3.生成软件复位

4.应用程序在某个位置备份带有错误信息的 RAM 部分

5.应用程序启动自检(PBIST 和内存初始化)

6.应用程序从备份的版本恢复 RAM 部分。

7.应用程序通过读取 RAM 然后向用户报告来检查异常原因。

那么、我可以选择哪些临时备份区域? 我知道我可以使用闪存 EEPROM、但遇到了问题。

我在某处看到有人想使用外密 RAM 之一、这是可能的吗?

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

    您可以使用 EEPROM 或任何外设 RAM (例如、如果您的应用中未使用 CAN RAM)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们使用的是 CAN1、但不是 CAN2和 CAN3。

    您是否有任何示例代码将字节阵列从正常 RAM 存储到 CAN RAM?

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

    我之前对 CAN RAM 进行了简单的测试。 我不确定我是否有这个简单的项目可用。 将进行检查并告知您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Chris、

    PBIST 完全由软件控制。 也就是说、只有在应用程序启动它时才会执行它。

    您的应用程序中是否存在导致软件复位的任何其他情况? 如果是、那么您的系统中是否有任何内容可以告诉您上次软件复位是由系统中的致命错误引起的? 复位处理程序需要能够识别这一点。 然后、您无需存储关键 RAM 内容并启动 PBIST 和存储器初始化、只需直接检查错误原因并向用户报告即可。

    此致、Sunil

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

    您好、Sunil、

    遗憾的是、在某些错误情况下、我们会受到严格约束、以导致应用程序复位。如果检测到堆栈溢出或数据中止等内容、我们使用的操作系统(sciopta)将落入其错误挂钩中。 这一点我们不能改变。 在这种情况下、唯一的恢复是通过 CPU 的复位进行的、因此我们需要再次执行所有启动自检、包括 FMEDA 为我们的安全认证确定的 PBIST。

    通常、软件中的错误会包括在任何正常情况 下都不应发生的代码路径(例如 switch 语句中的未知情况)、这些错误也会导致应用程序中的异常处理程序进行复位(FMEDA 再次要求)。

    在所有情况下、我们都必须报告 发生了重置以及事后剖析中的原因(代码中的错误位置编号)(即系统恢复到已知状态后)。

    因此、您可以看到、在主 RAM 的 PBIST 和记忆过程中、错误位置和复位原因必须被保存在某个位置、然后在之后恢复。

    此致

    Chris

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

    尊敬的 Chris:

    如果要使用 CAN2 RAM 来恢复数据、则没关系。 CAN2 RAM 从0x0x121c0000开始。

    若要直接访问 CAN RAM、请执行以下操作:

    CAN 模块必须处于测试模式

    2.测试寄存器中的 RDA 位必须置位:

      canInit();

      canREG2->CTL |=(1 <<7);

      canREG2->test |=(1 <<9);

      对于(i=0;i<100;i++){

        * ptr = 0x5a5a0000 + I;

         PTR++;

      }

    注意:写入保留位无效。 (0x10的高16位、0x14/0x18/0x1C/0x34/0x38/0x3c/...的所有位 不能使用)

    在下图中、交叉区域保留。