主题中讨论的其他器件:HALCOGEN
我希望对我们为我们的应用选择的 ESM 配置运行一些最终测试。 这些测试旨在注入故障、然后通过我们的 ESM 处理程序指示哪个诊断使我们跳闸。 我在 Halcogen 中配置了以下诊断、根据它们在我们的应用中的使用情况或作为管理安全标准的要求选择每个诊断。
1:MIBADC2
6:闪存 ECC 单一
7:NHET 奇偶校验
11:内部时钟监控器
15:VIM 奇偶校验
18:MIBSPI3奇偶校验
19:MIBADC1奇偶校验
26:RAM ECC 偶数
27:CPU 自检
28:RAM ECC ODD
31:CCM 自检
35:EEPROM 单通道
36:EEPROM double
37:IOMM Mux 配置
所有 ESM 故障被配置为切换 nERROR 并触发一个低电平中断。
我们的应用和电路板 IO 架构专为使用 nERROR 引脚的所有安全输出而设计、因此在发生 ESM 错误时、我们会切断所有安全输出的电源。
我对 ESM 配置的验证是利用测试构建中的自检例程在启动检查完成后调用 ESM 故障、期望运行 ESM 处理程序、我们将看到故障得到处理。 指示我们已识别的故障可由应用捕获并适当处理。
中断处理程序如下所示
#pragma weak (esmGroup1Notification) void esmGroup1Notification (uint32 channel) { //在用户代码开始和用户代码结束之间输入用户代码。 */ *用户代码开始(1)*/ /*保存 ESM 通道 c:000.SYS.A.115.v7 */ uni_cfg_set_ESM (0U、channel); // *用户代码结束*/} //*用户代码开始(2)*/ *用户代码结束*/ #pragma weak (esmGroup2Notification) void esmGroup2Notification (uint32 channel) {// 在用户代码开始和用户代码结束之间输入用户代码。 */ *用户代码开始(3)*/ /*保存 ESM 通道 c:000.SYS.A.115.v7 */ Uni_cfg_Set_ESM (1U、通道); /*用户代码结束*/ }
uni_cfg_set_ESM 例程会将"通道"保存为 FEE。 随后的加电将允许在复位前询问此值、以便我们有机会确定我们看到的 ESM 故障类型。 我已针对以下渠道成功测试了这一点:
1、7、11、15、18、19、26、10、6、35
在我认为此验证练习已完成之前、我有以下问题、希望 TI 提供您的意见:
1.请确认当时钟监控器诊断失败时 MCU 将恢复到的时钟-是 LPO 吗?
2.确认 checkRAMUERRTest()和 checkFlashEEPROMECC()都将触发 ESM 通道6故障
3.是否有方法注入 RAM ECC 奇校验故障(通道27)?
4.是否有方法注入 EEPROM 双位故障(通道36)?
5.当我从应用程序循环中运行 cpuSelfTest()时,处理器实际上会挂起,并且我已经阅读了许多文章,表明这是预期的。 是否正确地说、在发生真正的运行时 CPU 错误时、我不能指望我的应用程序有机会执行、因此无法尝试记录通道源 ID 以收费?
6.与5类似,CCM 自检例程将不允许我的应用程序捕获并记录信道源 ID 以收费?
7.在每个 ESM 错误的情况下、nERROR 将被驱动为低电平、并在 EKR 寄存器被清除前保持低电平。 我在信道1、7、11、15、18、19、26、10、6、35中成功捕获了这种行为、但对于我上面询问的其他信道、我无法显示 nERROR 保持低电平。
我很感谢这些测试在启动代码中的启动时运行、但为了进行我自己的验证、我希望每个测试至少在工作台上一次触发适当的 nERROR 响应、并记录为 FEE。 如果有一种更好的方法来记录未来的调试、那么触发故障的 ESM 错误也是我感兴趣的。
谢谢
Jamie