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:SafeTI &放大器;TRM:ECC DIAGMODE = 7

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/603175/rm48l952-safeti-trm-ecc-diagmode-7

器件型号:RM48L952

您好!

TRM 在第5.2.5.6章中给出了测试步骤:
1.确保真正的 DMA 模块已关闭

这是什么"真正的 DMA 模块"是指 TRM 第16章中提到的"唯一一个 DMA 模块"? 如果是、为什么 SafeTI 在进入条件检查中不检查它? 如果是、则在 DMA 正在运行的情况下、无法运行任何使用此模式的测试(如果您使用 DMA 接收某些内容、实际上没有任何更改来停止它...)?

相同的第5.2.5.6章描述了步骤4中的其余步骤(在步骤2-3中设置 FPAR_OVR 寄存器之前)、DIAGCTRL 寄存器被写入、在步骤5中、故障被注入(在任何地方都不提到 DIAGCTRL "DIAG_TRIG")。

第5.6.2章有何完全相反的指令、它说先将某些值写入 DIAGCTRL、然后再写入其余寄存器、最后设置 DIAG_TRIG (只需一次性)

对于所有模式、最好遵循此序列。
1.将0101写入 DIAG_EN_KEY 寄存器并设置所需的 DIAG_MODE。 这将阻止许多 UERR 源。
2.设置此模式所需的任何数据寄存器。
3.将 DIAG_TRIG 写入一个周期以启动操作并允许发生 UERR。
4.将1010写入 DIAG_EN_KEY 以退出诊断模式

该指令与5.6.2.5中的指令完全相反,该指令指示首先设置除 DIAGCTRL 之外的其他寄存器。

此外5.6.2要求设置 DIAG_TRIG 以实现任何操作(FLASH_ADDRESS_奇 偶校验_self_test 不设置 DIAG_TRIG、但仍会发生某种情况)

"只有 DIAG_EN_KEY=0101将启用任何诊断模式、所有诊断模式均使用 DIAG_TRIG 启动操作"

5.6.5.6未提及任何有关 Add_INV_PAR 的内容 仅 FPAR_OVR 寄存器内容描述表中引用、供 FLASH_ADDRESS_parity 自我测试使用。 自检也不会设置 DAT_INV_PAR、因此基于故障的结果为0 (已检查)应该会"良好"。


我无法理解、TRM 文本包含错误、还尝试通过设置 DIAG_TRIG (并移除隔离层访问)来测试 FLASH_ADDRESS_奇 偶校验_self_test 或其故障注入计数器部件、就像在 SafeTI 的其他闪存测试中一样、但看不到任何差异:
       //_SL_Barche_Data_Access ();
       sl_flashWREG->FDIAGCTRL |= F021F_FDIAGCTRL_DIAG_TRIG;
       flashread =*(volatile UINT32 *) flashBadECC1;

在这个级别中进行此挖掘的原因最初是 FLASH_ADDRESS_parity 自我测试中出现了意外的 DATA_ABORT (这也在 SafeTI 演示应用中发生、表明尽管 DMA 正在运行、但并非我生成该 DATA_ABORT。)
https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/602737


TRM 中还会出现文档错误:

2.将0101b 放入 FPAR_OVR 寄存器(0x7C)的 PAR_OVR_KEY 中、将101b 放入 DAT_INV_PAR 字段(00005Axxh)中。

101b 必须意味着"into bus_par_DIS"、否则00005Axxh 模式不匹配?

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

    您好!

    “真 DMA 模块”是指设备上的 DMA 模块。 在调用 ECC 数据校正诊断模式7的函数之前、必须关闭 DMA。

    诊断模式7的序列中存在故障:

    在设置其他寄存器以阻止其他寄存器导致错误之前、应首先设置 DIAG_MODE 和 DIAG_EN_KEY。 顺序(5.6.2中)正确。  

     模式7序列中的#2应该是:

    2. 将0101b 放入 FPAR_OVR 寄存器(0x7C)的 BUS_PAR_DIS 中、将101b 放入 PAR_OVR_KEY 字段(00005Axxh)中。

     在所有寄存器加载预期值后、需要 DIAG_TRIG (diag_TRIG=1)。 DIAG_TRIG 用于验证诊断结果。 仅当 DIAG_TRIG 设置为 并且诊断逻辑中的故障结果将更新相应的状态标志和位置寄存器时。

    此致、


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

    您好!

    如果 DMA 模块不从闪存中读取任何内容、是否需要关闭(我们的模块仅将数据从外设移动到 CPU RAM、反之亦然、因此没有闪存访问)? 如果是、则 SafeTI 的闪存和 FEE 测试中的入口条件中缺少此关键检查。 如果没有、则 SafeTI 用户手册遗漏了注释中的重要细节、DMA 不应运行闪存...

    如果需要无例外地关闭 DMA (这很可能是不可能的、或者至少是挂起应用程序接收/发送来自/到外部世界的数据的非常复杂的任务)、您是否需要在运行时运行闪存(或 FEE)测试? 对于 STC (和 PBIST)、在"public e2e"中的多个位置中说通常不需要定期执行它们、对于这些测试、还有具有 A/B 选择的唯一标识符)、这个应用程序是不是以某种方式依赖的、还是有什么东西? 基于在 FMEDA Excel 中进行的快速评估、仅 FLA5B 和 FLA7影响 FIT、所有其他 FLA 测试可以为0、FIT (及其他诊断值)保持相同值。一些基本而言、与闪存相关的 SafeTI 测试不会产生任何影响。 这是"您需要运行测试 X"还是"适合"讨论要转到"私有 e2e 范围"?

    在这些测试没有任何影响的情况下、运行这些测试(完全不是启动测试)的安全相关点是什么?

    我还在"建议"的第30个 CPU 启动阶段运行这些测试一次、这与闪存测试有关(http://www.ti.com/lit/an/spna106d/spna106d.pdf 、但禁用 FIQ 或 IRQ 时不相同、因为这样您就无法确定 FIQ 或 IRQ 在实际情况下是否正确发出信号、 FIQ 在闪存和 IRQ 中仅进行1项测试、另一项则生成 DATA_ABORT、该过程也在开始阶段进行。 我还认为、应在启用 FIQ&IRQ 的情况下至少运行一次故障注入测试、以确保真正的故障也在应用级别发生。

    目前、我定期运行所有 FEE 和闪存测试(DMA 也连续运行、但不运行闪存、它只是以永久连续循环的方式将数据从 RAM 移动到 RAM)、而在对 SafeTI 代码(https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/602739)进行一些修改后、我们的应用没有任何已知的副作用/问题。 现在、根据这一讨论、我开始感觉到我在这些特定测试(闪存和费用)上所做的工作、如果不是完全无用的话、可能至少是部分的、因为没有实际效果可以适应、DMA 应该被关闭 (我怀疑我们是否可以在运行时从 Excel 中删除测试)。 当然、在 DMA 启动之前将这些测试移动一次、但启用 FIQ/IRQ 后、如果需要在启用 FIQ&IRQ 的情况下至少运行一次、但由于 FIT 没有变化、是否甚至需要执行这些测试?


    根据您的评论、FLASH_ADDRESS_奇 偶校验_self_test 或其他地方出现了问题(我的理解可能是不是?) 因为它根本不会设置该 DIAG_TRIG 位。 我还从 TRM 中了解到 DIAG TRIG (或整个闪存诊断概念)是一次性的、但此 FLASH_ADDRESS_PARTIFY_SECOVERY_SELF TEST (及其故障注入版本)会持续生成组2 ESM 错误、除非在 SL_ESM.c FIQ 处理程序中未禁用 FPAR_OVR 寄存器、并且该"正常"测试有0x5400写入 (如果在写入0x5400之前测试故障注入版本调用用户 ESM_CALLACK、则 SR[1]再次向上位、在这种情况下设置新的 FIQ 请求、以便代码最终在 FIQ 循环中结束。 当然、也可以通过在应用程序回调中写入相同的0x5400并对重新上升的 SR[1]进行堆栈来避免 FIQ 循环、但由于这是一次性诊断测试、我认为应用程序级别不需要这样做、应该足以检查 SSR2是否已向上位 (对于正常测试、SafeTI 不会检查 SSR2的稳定性、它仅检查 ADD_PAR_ERR 是否处于活动状态、其他测试也会检查 SSR2寄存器内容)。如果此诊断为"一次性"、则不应发生这种情况、或者我只是错过/没有从某个地方注意到一些很小但非常重要的细节。

    也许其中一些讨论应该在这两个主题下进行、所以如果您觉得答案更好、请在其他主题中随意回答...

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

    刚刚注意到、这个 DMA 仅涉及诊断模式7、而不涉及其他诊断模式、所以 FEE 超出范围、FLASH_ECC_ADDR_TAG_REG_MODE 闪存测试 DMA 要求。 因此、至少可以从 DMA 的角度定期运行 FEE 和该1个闪存测试。