您好!
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 模式不匹配?