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.

[参考译文] 外设 RAM:用作临时数据存储、哪个是"best 和 quot;?

Guru**** 1839620 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/581365/peripheral-rams-using-as-temporary-data-storage-which-is-the-best

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

您好!

我使用 CAN RAM 存储某些数据以承受 TCM RAM PBIST&Init... 当我有少量 (8字节)的数据要存储时、CAN RAM 运行良好、然后在测试和广泛阅读数据表和 TRM 后、我发现外设 RAM 的使用并不重要、因为它最初看起来基于数据表...

看起来也不可能使用 TCM RAM、即使与链接器映射一起使用也是如此、因为 sl_Init_Memory()对于整个 TCM RAM 只有1个参数描述符(RAMTYPE_RAM)。 PBIST 已经将 RAM 拆分为半个 PBIST_RAMGROUP_06_ESRAM1和 PBIST_RAMGROUP_21_ESRAM5、所以 PBISTIN 应该可执行、但不是初始化。
因此、不能使用 ESRAM1中的链接器保留空间来正常保存要备份的结构、然后手动将其复制到 ESRAM5、然后为 ESRAM1执行 PBIST 和 memoryinit、并将备份数据复制回 ESRAM1、然后生成 PBIST 和 init ESRAM5


对于与 CAN、ADC 和 N2HET 相关的外设 RAM、此解释是否正确(只检查了其中的几个 RAM)?

CAN3:0xFF1A_0000 - 0xFF1B_FFFF、实际大小为2KB (如果未实现地址则回绕)
这意味着您需要从 TRM 中了解该2KB 块的实施量以及实施方式
- TRM 24.4.4:看起来每个报文对象(0x20大小=8*32位)只能写入前4个32位块,偏移量0x10也允许写入 lsb 字节,其余的保留量更多或更少
因此、如果不从0x10偏移量中计算 lsb 字节、一个消息对象可以"轻松"存储16字节(4x32位)。
-可以有64个消息对象,总存储空间为64*16bytes=1024,并且在写入和读取时必须跳过其它16字节区域

我假设在 RDA 模式下,TRM 24.5.2提及消息对象64 (地址0x0000)没有意义,而且 RAM 的一部分可以自由使用....

TRM 24.5.4的意思是" CPU 一次只能访问一个字行。"、看起来可以一次写入32位、就像这样

sl_canREG3->CTL = 0x00000481U;//禁用奇偶校验,测试模式,初始化模式, */
SL_CANREG3->TEST = 0x00000200U;/*启用 RAM 直接访问模式*/
#define canRAM3_PTR (volatile UINT32 *) 0xFF1A0000U
*(canRAM3_PTR+0)= 0xAABBCCDD;

此外、看起来也可以逐字节使用8位指针进行写入
   #define canRAM3_PTR_8位((volatile uint8 *) 0xFF1A0000U)
   *(canRAM3_PTR_8bit+0)= 0x11;
   *(canRAM3_PTR_8bit+1)= 0x22;
   *(canRAM3_PTR_8bit+2)= 0x33;
   *(canRAM3_PTR_8bit+3)= 0x44;
   *(canRAM3_PTR_8bit+4)= 0x55;
   *(canRAM3_PTR_8bit+5)= 0x66;
   *(canRAM3_PTR_8bit+6)= 0x77;



ADC2:0xFF3A_0000 - 0xFF3B_FFFF、实际大小为8KB (如果未实现地址则回绕)
这意味着您需要从 TRM 中了解该2KB 块的实施量以及实施方式
-看起来像64个信道=64*32位地址,每个32位数据段中只有低16位可以写入,高16位始终为0
-总数据存储64*2bytes=128字节(如果使用16位数据打包)和64byte (如果只写入 lsb 字节)。

TRM 20.9.2:"在此测试模式下、只允许对 ADC 结果 RAM 进行32位读取和写入。"
-这会阻止按字节写入字节

N2HET:然而、我认为 N2HET 至少是"完全连续 ram"、但看起来它也不是、并且也有一些访问限制
TRM 21.2.2.1:只允许32位写入、每4个地址被保留、不应访问


由于需要深入了解每个外设 RAM 的属性、我认为 CAN RAM 相当易于使用、可以存储大量数据、只需为您想要存储的创建一个结构、然后手动存储即可 (几乎像 memcpy())字节通过使用8位指针和存储16个字节将十个目标指针增加16以跳过该"消息对象的保留区域"并重复、直到数据用完。 通过使用相同的8位指针、从 CAN RAM 恢复数据应该同样简单。 唯一的限制是实现的区域、这意味着1024字节、如果存储了更多的数据并且数据的开始被过度写入、这就相当大。
——这是正确的,当 CTL 寄存器中的 INIT MODE 位置位时,不需要等待什么?
-由于这是与安全相关的数据、因此应计算来自数据的 CRC 并将其添加到实际数据的末尾、或者至少在 CAN RAM 中使用奇偶校验(但是如果不是用8位指针写入完整的32位块、它是否需要 CAN RAM 的内存初始化)?


是否有更多更简单的外设 RAM 用于备份 RM44和 RM48系列中的数据? 没有看过 VIMRAM、因为在调试器复位的情况下、至少 FIQ 可能会通过、因此不想损坏矢量...

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

    您可以使用外部 SPI FRAM 或 EMIF SRAM 从 ESRAM 备份数据。 外设 RAM 不用于备份 ESRAM 数据。 但是、如果您正确配置 DCAN RAM 以避免与消息处理程序发生任何冲突、则可以为此目的使用 DCAN RAM。

    最好在启动时初始化存储器、并在使用时启用奇偶校验。

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

    重点是要备份的数据与安全相关、因此外部 RAM (基于 SPI 或 EMIF)需要具有 ECC、奇偶校验或校验和保护。

    Jarkko、

    更基本的问题来了解您正在做什么。 为什么需要复制/备份数据? 您是否打算在应用程序启动后运行 PBIST? 通常、我们在启动时首先执行 PBIST、然后依赖 ECC。 这是否与断电之间需要很长运行时间的运行配置文件相关? 通常、当与针对 ECC 逻辑的 CPU 锁步保护结合使用时、仅 ECC 就足够了。 请告诉我、我们可以进行更详细的讨论。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    根据建议/建议的 CPU 初始化顺序、在 TCM RAM PBIST 阶段之前完成了一些(SafeTI)测试(STC、CCM、Pbist ROM (故障和通过案例))。 此外、如果我正确理解、并非所有可能的故障都需要停止 CPU (例如初始化阶段7 -检查 ESM 组3故障清楚地表明停止比建议的要多、但其他故障则不是如此)、但这并不是一个非常明确的说法。

    我想存储测试的结果和信息(以及可能的重置原因等) 在 TCM RAM PBIST 之前执行、因此、如果发生不需要停止 CPU 的故障、我们可以通知用户器件损坏、而不是让器件在无限循环内保持静音状态。

    因此我的主要对象是在启动时使用此备份、而不是在实际运行中...

    我实现了 DCAN RAM 写入16字节-跳过16 -写入另外16…… 带 CRC 的模式(CRC 是在将数据写入 DCAN RAM 之前计算得出的)、它看起来工作正常。

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

    感谢您对保存数据的预期目标的详细解释。 我认为这是外设 RAM 的创造性用途、只要有足够的空间。 当然、我会在 CAN RAM 奇偶校验保护之上添加一个 CRC。 您还可以考虑使用闪存仿真 EEPROM (FEE)来最终存储此信息、但如果不首先执行所有安全检查、启动时的 FEE 操作将会太多、并且也会减慢启动速度。

    此外、我们的一些器件在电源域之间划分了 SRAM、因此可以针对每个块单独运行。 这是一个适合您的特定器件的东西、但需要对 HalCoGen 驱动程序进行一些定制。 我不记得您使用的是哪个器件、因此我无法确认这是您可以使用的选项。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否真的需要将奇偶校验与 CRC 一起使用(对于 SIL3),最大1024字节(我们目前使用的是16字节(也可以存储到 CPU 寄存器))应该受到32位 CRC 的良好保护(这是否有直接的答案:)? 如果是、则:
    使用 DCAN RAM 之前是否需要 PBIST -这与奇偶校验不相关、是否需要始终执行此操作、CRC 无法处理的某种错误?
    -使用前是否需要进行奇偶校验测试?
    -是否还需要在启用奇偶校验的情况下初始化 DCAN 存储器以使奇偶校验正常工作(不打算在写入前读取)? 初始化要求是否取决于您是否写入"完整的32位值"、例如32字节流而不是30字节流

    我想、在恢复后、如果使用奇偶校验、您还需要手动检查 ESM 通道、以确定奇偶校验错误未激活。

    我同时使用 RM44和 RM48 (2种不同的产品)、因此我们非常欢迎在这两种产品中使用相同的例程、以最大限度地减少工作。 费用不能用于其他商品。 我认为我对 DCAN 感到满意、它不用于任何其他用途(因此我不需要担心调试器复位情况)、1024字节对我们来说已经足够了。

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

    需要考虑的一些事项:

    PBIST 很好地捕捉"故障累加"、请考虑您多年未重新启动器件并且长时间未访问 DCAN RAM 的情况。 在这种情况下、可能会累积多个故障、根据您选择的 CRC 多项式、您可能无法捕获这些故障。 这是非常理论化的、但应该说明 PBIST 的优点。

    外设 RAM 上的奇偶校验、请注意、外设奇偶校验是由存储器本身执行的、并不涵盖 CPU 和存储器之间的总线。 这意味着这不受锁步监控、您可能需要执行"奇偶校验逻辑的软件测试"、这同样有助于"故障累加"。

    还是理论情况、但请考虑一个故障、在这种情况下、如果不以不同的值种子、则 CRC 将始终读取为"0"。

    我个人的感觉是、当只处理如此少量的数据(16字节)时、您可能更喜欢简单地存储两次数据(反转)。 然后、您可以轻松更改数据、而无需重新计算整个 CRC。

    此致、
    Christian
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您提供的提示、您必须考虑什么是足够的。 所以我担心的是、没有明确的答案应该做什么以及如何完全填充 Y (在本例中为 SIL3)、这取决于这个和那个。

    因此、基本而言、数据反转数据和反转 CRC 的 PBIST&Parity 和 CRC 可以完全确定、 但最可能的"少"也足以完全满足 Y 的需求。也许我刚刚实施了至少 PBIST、并且可能会添加奇偶校验、因为这些检查已经在初始化的稍后阶段完成、所以它将或多或少复制粘贴到 在此处为该1 RAM 添加这些值。 或者只需以反转格式或2个 CRC 值的形式存储 CRC。。。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jarkko、

    为了定义哪种方法最合适、我认为您必须后退一步并分析 RAM 的使用。 首先、如果我们规定我们在 Hercules 中使用的安全岛原理、第一步是使用 PBIST 来证明 RAM 的有效性、该 RAM 将在诊断覆盖率为高时使用、 然后、一旦证明是有用的、一些其他机制或机制可在写入和/或读取数据期间保护数据。 在传输过程中对已写入数据执行回读操作将为传输过程中的数据提供保护、而使用 CRC 将在回读过程中对数据提供保护。 后两种机制还将提供高直流、因此请注意、您对存储元件和要存储的数据具有完全高的诊断覆盖率。

    当然、现在需要注意的是、此数据对安全功能的重要性是多少? 如果它对安全功能并不是真的至关重要、那么也许可以有人提出这样的论点、即这种保护级别可能不是必需的。 我认为、安全诊断库中的假设是、此数据对安全功能不是很重要、因为您会在任何一个故障点立即采取措施、因此无需保存上提供的传递信息、就可以假设到达 PBIST 这意味着所有先前的测试都成功通过。 这是您或您团队中的某个人需要根据您的系统级安全要求定义的行为、因为我们没有应用级可见性来判断这种情况。