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.

[参考译文] RM48L952:RAM 诊断:双端口 PBIST 诊断测试失败

Guru**** 2872490 points

Other Parts Discussed in Thread: HALCOGEN, RM48L952

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1637220/rm48l952-ram-diagnostics-dual-port-pbist-diagnostic-test-failing

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

尊敬的团队:

我遇到了一些问题、我想进行验证、因为它也出现在 sys_startup.c 中通过 Halcgen 生成的代码中。 我的主要目标是在单独的模块中提供与 RAM 相关的测试代码。

下面是附加代码片段:

#define RAM_DIAG_DP_PBIST_RINFOL                        \
 ((uint32_t) 0x00000000U /* EMAC RAM */                     \
  |(Uint32) 0x00000000U /* USB RAM */                     \
  |(Uint32) 0x00000800U /* DMA RAM */                     \
  |(Uint32) 0x00000200U /* VIM RAM */                     \
  /*|(Uint32) 0x00000040U MIBSPI1 RAM(未通过“或“运算整合到掩码中)*/         \
  /*|(Uint32) 0x00000080U MIBSPI3 RAM(未通过“或“运算整合到掩码中)*/         \
  /*|(Uint32) 0x00000100U MIBSPI5 RAM(未通过“或“运算合并掩码)*/         \
  |(Uint32) 0x00000004U /* CAN1 RAM */                     \
  /*|(Uint32) 0x00000008U CAN2 RAM(未通过“或“运算整合到掩码中)*/           \
  /*|(Uint32) 0x00000010U CAN3 RAM(未通过“或“运算整合到掩码中)*/           \
  /*|(Uint32) 0x00000400U ADC1 RAM(未通过“或“运算合并为掩码)*/           \
  |(Uint32) 0x00020000U /* ADC2 RAM */                     \
  /*|(Uint32) 0x00001000U HET1 RAM(未通过“或“运算整合到掩码中)*/           \
  /*|(Uint32) 0x00040000U HET2 RAM(未通过“或“运算放大掩码)*/           \
  /*|(Uint32) 0x00002000U HTU1 RAM(未通过“或“运算整合到掩码中)*/           \
  |(Uint32) 0x00080000U /* HTU2 RAM */                     \
  |(Uint32) 0x00004000U /* RTP RAM */                     \
  |(Uint32) 0x00000000U /*帧 RAM */)

#define RAM_DIAG_DP_PBIST_ALGO                         \
 ((Uint32) PBIT_March13N_DP /* 0x004 */                   \
  |(Uint32) PBI_DOWN1a_DP /* 0x010 */                   \
  |(Uint32) PBIT_MapColumn_DP)/* 0x040—总计 0x054 */

/**相位 2:双端口 PBIST + checkRAMECC(在 PBIST 同时运行
  * 在外设 RAM 上运行—TRM§7.6.1 和§7.6.2 序列)。
  * ALGO = RAM_DIAG_DP_PBIT_ALGO (0x054):March13N_DP | Down1A_DP |
  * MapColumn_DP. MapColumn_DP 对于双端口 RAM 是必需的。 */


  静态 void ram_diag_phase_dpbist_ecc (void){
   pbistRun (RAM_DIAG_DP_PBIT_RINFOL、RAM_DIAG_DP_PBIT_ALGO);

   checkRAMECC();

   /*SAFETYMCUSW 28 D 先生:不适用 “硬件状态位读取检查“*/
   while (pbistIsTestCompleted()!= true){
   }/*等待*/

   if (pbistIsTestPassed()!= true ){
    /*在 pbistFail()—pbistFail() 之前捕获诊断寄存器
    *从不返回(调用 memoryPort0TestFailNotification 可能循环)。
    *快照存储在 s_pbist_fail_snapshot 中;可在调试器下读取。
    * rgs = s_pbist_fail_snapshot.ramt >> 24 标识发生故障的 RAM 组。 */
    RAM_diag_pbist_registers_read (&s_pbist_fail_snapshot.fsrf0、
                   &s_pbist_fail_snapshot.ramt);
    pbistFail();
   }

   pbistStop();
  }

在 RAM_DIAG_DP_PBIST_RINFOL 宏内部、当 I 启用任何外设的存储器偏移时、它会失败、否则会随着当前配置传递。 我想提的是、所有外设都已通过哈可根启用。 如果我们需要实施任何具体的解决方案、或者这是已知问题、请告诉我。

此致

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

    您好 Muhammad、

    我们的内部人工智能建议了一些我们可能错过的重要事项、因此在第一阶段、您可以对它们进行一次验证

    RAM_DIAG_DP_PBIST_RINFOL 宏中启用某些外设 RAM 区域时、PBIST(可编程内置自检)模块在 RAM 测试期间会遇到故障。 即使在 Halcogen 生成的代码中也会出现此问题。

    根本原因分析

    该问题可能与以下常见原因之一有关:

    1. 外设初始化序列:在运行 PBIST 测试之前、需要正确初始化一些外设 RAM。

    2. 时钟配置:某些外设 RAM 要求在测试前启用其各自的外设时钟。

    3. 电源域问题:运行测试时、某些外围设备可能处于低功耗状态。

    4. 保留的存储器区域: TRM 可能指定不应使用特定算法测试的某些内存区域。

    建议解决方案

    1.检查外围设备时钟状态

    确保您要测试的所有外设的时钟均已启用。

    2.修改您的测试方法

    尝试按较小的组而不是同时测试所有外设 RAM。

    3.检查外设初始化

    一些外设需要进行特定的初始化才能测试其 RAM。

    4.咨询 TRM

    RM48L952 TRM 可能对外设 RAM 的 PBIST 测试有特定的要求。 查找有关以下内容的部分:

    • 内存映射限制
    • 针对特定存储器的推荐测试算法
    • 初始化要求

    其他注意事项

    1. 算法选择:并非所有算法都适用于所有的 RAM 类型。 对于双端口 RAM、您正在正确使用 MapColumn_DP、但验证每个外设 RAM 是否有特定的算法要求。

    2. 错误处理:您的错误捕获机制很好,但请考虑添加更详细的诊断。

    --
    此致、
    Jagadish。