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.

[参考译文] TMS570LS0432:关于 startup.c 代码

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1004657/tms570ls0432-about-startup-c-code

器件型号:TMS570LS0432

尊敬的团队

我参考安全库2.4演示代码。

 在 sys_startup.c 中、我有一些问题

——————————————————————————————————————————————————————————————————

否则、如果(RESET_TYPE_CPU = resetResason)

SYS_EXception = CPU_RESET;

/*复位可能由 stcSelfCheck 运行或实际的 CPU 自检运行引起*/

/*检查这是否是 stcSelfCheck 运行*/
if ((stcREG->STCSCSCR & 0xFU)== 0xAU)

/*检查自检失败位是否已设置*/
if ((stcREG->STCGSTAT & 0x3U)!= 0x3U)

/* STC 自检失败*/
stcSelfCheckFae();

/* STC 自检已通过*/
其他

/*清除自检模式*/
stcREG->STCSCSCR = 0x05U;

/*清除 STC 全局状态标志*/
stcREG->STCGSTAT = 0x3U;

/*清除 ESM 组1通道27状态标志*/
esmREG->SR1[0U]= 0x08000000U;

/*启动 CPU 自检*/
cpuSelfTest (STC_INTERVAL、STC_MAX_TIMEOUT、TRUE);


/* CPU 自检完成导致的 CPU 复位*/
否则、如果((stcREG->STCGSTAT & 0x1U)== 0x1U)

/*设置自检失败标志*/
if ((stcREG->STCGSTAT & 0x2U)== 0x2U)

/*调用 CPU 自检故障处理程序*/
cpuSelfTestFae();

/*成功完成 CPU 自检*/
其他

/*清除 STC 全局状态标志*/
stcREG->STCGSTAT = 0x1U;

/*在 CPU STC 完成后继续启动序列*/
fterSTC();


/*软件写入 CPU 复位位引起的 CPU 复位*/
其他

/*在此处添加自定义例程以处理软件导致 CPU 复位的情况*/

————————————————————————————————————————————————————————————

我认为 CPU 能够在 CPU 自检(“SL_Self_Test_STC”)复位后进入这里。  

if ((stcREG->STCSCSCR & 0xFU)== 0xAU)

此代码意味着什么?它意味着自检?  在此处输入的情况是什么

和该代码

cpuSelfTest (STC_INTERVAL、STC_MAX_TIMEOUT、TRUE);

 SL_Self_Test_STC 之间的区别是什么

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

    你好  

     我看到 TRM。   STC 间隔0。

    它意味着?

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

    TRM 中提到了两个测试。  

    STC 自检或 CPU 自检:通过将0xA 写入 STCGCR1寄存器的 STC_ENA 来启用此测试

    STC 自检、用于检查 STC 比较逻辑。 通过将0xA 写入 STCSCSCR 寄存器中的 self_check_key 来启用此测试。  只能对 STC 间隔0进行自检。

    无论通过与否、这两个测试都将在测试完成后生成 CPU 复位。

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

    谢谢你  

    何时执行此测试,“SL_Self_Test_STC

    何时执行此测试,cpuSelfTest

    CPU 上电后是否可以执行这两个测试?

    如果((stcREG->STCSCSCR & 0xFU)== 0xAU)可以运行 cpuSelfTest,

    当,AU 时、我找不到

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

    你好

    何时执行此测试,“SL_Self_Test_STC

    何时执行此测试,cpuSelfTest

    CPU 上电后是否可以执行这两个测试?

     我,库实际上有一段代码

    if (reset_type_debug!= resetReason)

    /*确保 CPU 自检控制器能够实际检测到 CPU 内部的故障*/
    stcSelfTestConfig.stcClockDiv = 0;/* STC 时钟分频器= 1 */
    stcSelfTestConfig.intervalCount = 1;/*仅一个时间间隔*/
    stcSelfTestConfig.restartInterval0 = true;//从间隔0开始*/
    stcSelfTestConfig.timeoutCounter = 0x1;//超时计数器*/
    _sl_HoldNClear_nError();

    /*在运行 STC 之前屏蔽 vim 中断*/
    vimREG->REQMASKCLR0 = 0xFFFFFFFFFFu;
    vimREG->REQMASKCLR1 = 0xFFFFFFFFFFu;
    vimREG->REQMASKCLR2 = 0xFFFFFFFFFFu;
    vimREG->REQMASKCLR3 = 0xFFFFFFFFFFu;

    /*在运行 STC 之前确保没有挂起的 ESM 组2错误*/
    if (esmREG->SSR2 == 0U)

    SL_SelfTest_STC (STC_COMPARE_SELFCHECK、TRUE、&stcSelfTestConfig);

    其他

    故障安全 Fun (FFS_CPUSTARTUP_selftest_error);
    while (1);//ESM Group2错误

    如果 CPU 启动可以运行两个代码 “sl_SelfTest_STC”和“cpuSelfTest”

    生成两次 CPU 复位??

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

    通常、这些测试是在启动时执行的。 您还可以定期运行测试。

    是的、STC 自检和 STC 自检将生成 CPU 复位。

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

    你好

    这两个函数中的哪一个首先被执行?

    “sl_SelfTest_STC”“cpuSelfTest”

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

    通常首先执行 STC 自检、以确保 STC 控制器能够实际检测到 CPU 内部的故障。

    如果 需要在特定时间段内定期执行 LBIST 和 PBIST、请咨询评估员或您的安全顾问。  

    在大多数用例中、在引导时执行 LBIST 和 PBIST 已经足够好了。 针对 RAM 的锁步内核和 ECC 逻辑正在持续执行诊断。

    对于锁步内核、第二个内核持续执行与主内核相同的指令/代码、并且每个内核的输出通过内核比较模块持续进行比较。 如果两个内核中的一个出现故障、则诊断(比较)将捕获此故障。

    关于 PBIST、在启动时一次性执行证明了整个 RAM 的完整性。 在应用程序运行期间、SECDED 接管为活动诊断并防止/通知 RAM 出现的任何问题。 请注意、PBIST 不是设计为定期运行、因为它是一个破坏性测试。