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.
工具与软件:
您好!
我正在尝试将安全诊断库(SDL)集成到已有引导加载程序的现有项目中。 引导加载程序基于 TI 的 UART 引导加载程序示例。 对于在此设置中实施 SDL 的最佳实践、我非常感激。
是否有必要在引导加载程序和主应用程序中实施 SDL?或者仅将 SDL 添加到其中一个应用程序是否足够?
文档或示例:是否有任何资源、指南或示例涵盖了带有引导加载程序的项目中此类 SDL 集成? 我无法找到任何东西。
提前感谢您提供任何建议或见解。
你好、llija、
(+) SAFETI_DIAG_LIB:关于通过引导加载程序集成 SafeTI 库的指导-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛
没有将 SDL 集成到应用程序的特殊指导或文档。
您可以参考现有的 SDL 示例并以相同的方式执行。
您可以使用部分例程、也可以根据您的应用程序要求完成 SDL。
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish:
您的答案很一般、我以前在论坛上看到过类似的答案、但它们并没有详细解决问题。 我没有找到任何关于使用引导加载程序实施 SDL 的具体指导。
您能否回答有关 SDL 集成的更具体问题? 在引导加载程序中、我有一个sys_startup.c
由 HalCoGen 生成的文件、它与主项目中的文件类似。 我已经sys_startup.c
根据 SDL 演示示例实现了。 我是否需要在引导加载程序的启动例程中进行调整? 具体来说、我应该修改或注释掉与读取复位原因、执行初始化函数或在引导加载程序中运行 PBIST 相关的部分吗?
当 SDL 与引导加载程序设置集成时、有关处理这些部件的任何详细指导都将非常有用。
谢谢、此致、
Ilija。
尊敬的 Ilija:
我们所拥有的只是 SDL 演示。
甚至我也会参考 SDL 演示代码并根据代码进行回答。 我的建议是、请参考 SDL 演示项目并根据该项目在中创建您的项目。 如果您在实现这一目标方面遇到任何困难、我将与我一道工作、并提供建议。
——
谢谢、此致、
Jagadish。
尊敬的 Jagadish:
我sys_startup.c
按照 SDL 演示应用程序实施了我的文件。 如果在主应用程序之前未刷写引导加载程序、则一切正常。 但是、当引导加载程序存在时、我的主应用程序会卡在以下异常处理程序中、并R14 (undef)
显示寄存器0x00060004
、这不是有效的存储器地址:
#ifdef __TI_COMPILER_VERSION__ #pragma INTERRUPT ( _excpt_vec_udef_instr, UDEF) void _excpt_vec_udef_instr() #endif #ifdef __IAR_SYSTEMS_ICC__ __irq __arm void _excpt_vec_udef_instr() #endif { while(1); }
我在调试模式中跟踪了该问题、发现该问题发生在_SL_Kickoff_STC_execution()
调用函数作为的一部分之后SL_SelfTest_STC(STC_COMPARE_SELFCHECK, TRUE, &stcSelfTestConfig)
。
if (RESET_TYPE_DEBUG == reset_reason) { /* Make sure that the CPU self-test controller can actually detect a fault inside CPU */ stcSelfTestConfig.stcClockDiv = 0; /* STC Clock divider = 1 */ stcSelfTestConfig.intervalCount = 1; /* One interval only */ stcSelfTestConfig.restartInterval0 = TRUE; /* Start from interval 0 */ stcSelfTestConfig.timeoutCounter = 0x1; /* Timeout counter*/ _SL_HoldNClear_nError(); /* mask vim interrupts before running STC */ vimREG->REQMASKCLR0 = 0xFFFFFFFFu; vimREG->REQMASKCLR1 = 0xFFFFFFFFu; vimREG->REQMASKCLR2 = 0xFFFFFFFFu; vimREG->REQMASKCLR3 = 0xFFFFFFFFu; /* ensure no pending ESM GRP2 errors before running STC */ if(esmREG->SSR2 == 0u) { //! Executes CPU Logic Built-In Self Test using Self-Test Controller SL_SelfTest_STC(STC_COMPARE_SELFCHECK, TRUE, &stcSelfTestConfig); } else { while(1); //ESM Group2 error } } else { afterSTC(); } /* USER CODE END */ }
此问题是否与reset_reason
价值有关? 引导加载程序是否可能会更改复位原因或干扰 STC 初始化?
如果您了解可能会发生这种情况的原因以及是否需要在引导加载程序或主应用程序中执行额外步骤来处理此情况、我将不胜感激。
谢谢、此致、
Ilija。
尊敬的 Ilija:
此问题是否与该reset_reason
值有关? 引导加载程序是否可能会更改复位原因或干扰 STC 初始化?
实际上、引导加载程序会擦除复位原因、我在我的一个旧线程中发现了这个问题:
(+) TMS570LC4357:FreeRTOS 引导加载程序应用在 I2C 中遇到问题-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛
请参阅上述主题、并 根据该测试结果进行修改。
——
谢谢、此致、
Jagadish。
尊敬的 Ilija:
对不起,延迟响应,我被其他问题卡住.
我是否需要注释掉引导加载程序中 SYS_exception 的擦除?
您或许可以尝试一下。
就我个人而言、我从未 同时对引导加载程序和应用程序进行过_SL_Kickoff_STC_execution API 的测试。
——
谢谢、此致、
Jagadish。