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.

[参考译文] TMS320F280038C-Q1:如何使用 DCC 执行时钟完整性检查的故障注入测试

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1539339/tms320f280038c-q1-how-to-perform-fault-injection-test-for-clock-intgerity-check-using-dcc

器件型号:TMS320F280038C-Q1


工具/软件:

TI、您好。

我想了解如何使用 DCC 执行故障注入测试以进行时钟完整性检查。

我已经阅读了 C200 TI 库的示例代码。 所以、请不要告诉我看这个示例。

下面是有关我要执行测试的信息。

[使用 DCC]进行时钟完整性检查

1.计数 1 时钟源: pll

2. PLL 时钟: 120MHz

3.计数 0 时钟源: XTAL CLK

4. XTAL 时钟: 20MHz

5. SYSCLK : 120 MHz

6.实现示例: dcc_continuousMonitor(我已经阅读了示例代码,我已经检查了 syscfg,所以请不要提到这个示例)

我厌倦了为 PLL 设置错误的时钟、期望 DCC 发生故障。 但是、即使输入计数时钟源频率为 10MHz 且实际 PLL 时钟频率为 120MHz、DCC 结果也不会失败。

我 必须使用 DCC 执行有关时钟监控的故障注入测试。

请帮助我。

如果您需要一些实现的代码、请随时告诉我。

提前感谢您、我期待您的详细回答和指南。

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

    尊敬的 Seungeun:

    请允许我看看这个,并在一周结束时回复你。

    此致、

    Aishwarya

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

    Seungeun

    您能否共享数字化错误、异步错误、窗口、counter0/1、valid0、 等等? 您是否还能共享用于模拟错误的 count0/count1/valid0? 如果您也有代码片段、共享代码片段可能会更容易。  

    此致、

    Aishwarya

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

    尊敬的 Aishwarya:

    我共享实现的代码和仿真代码以注入故障。

    如果我的代码中有错误的要点、请告诉我。 我期待您的详细指南。

    【已执行的代码】

      const  uint16_t  dcc_CHCK_RETRY_CNT    = 2U
      const  float32_t PLL_CLK_FREQ       = 120.0f/* PLL 频率:120MHz */
      const  float32_t XTAL_CLK_FREQ       = 20.0f /* 20MHz 频率:Xtal*/
      const  float32_t CLK_TOL          = 1.0f /*容差:1.0%*/
      const  float32_t allow_TOL         = 0.0f /*允许的频率容差:0.0 %*//*此值可通过测试结果修改*/
      const  float32_t SYS_CLK_FREQ       = 120.0f/* 120MHz 频率:sysclk*/

      UINT16_t u16DccErrSts  = CTL_U_CLR
      UINT16_t u16DccRetryCnt = CTL_U_CLR
      UINT16_t u16DccRet    = CTL_U_CLR

      /*使用 XTAL 作为基准时钟来持续监控 PLL 时钟*/
      DCC_CONTINUousMonitor (DCC0_BASEDCC_COUNT1SRC_PLLPLL_CLK_FREQDCC_COUNT0SRC_XTAL、XTAL_CLK_FREQ、 CLK_TOLALLOW_TOL、SYS_CLK_FREQ);

      u16DccErrSts = DCC_getErrorStatus (DCC0_BASE);
      
      if (u16DccErrSts!= CTL_U_CLR)
      {
        if (u16DccRetryCnt < UINT16_OVFL_guard)
        {
          u16DccRetryCnt++
        }
      }
      暴露
      {
        u16DccRetryCnt = CTL_U_CLR
      }

      IF (u16DccRetryCnt > DCC_CHCK_RETRY_CNT)
      {
        u16DccRet = CTL_U_SET
      }
      
      返回 u16DccRet

    [用于注入故障的仿真代码 — 我只需将唯一的 PLL 时钟频率设置为 10MHz 即可导致 DCC 误差、但未发生 DCC 误差]

      const  uint16_t  dcc_CHCK_RETRY_CNT    = 2U
      const  float32_t PLL_CLK_FREQ       = 10.0f;
      const  float32_t XTAL_CLK_FREQ       = 20.0f /* 20MHz 频率:Xtal*/
      const  float32_t CLK_TOL          = 1.0f /*容差:1.0%*/
      const  float32_t allow_TOL         = 0.0f /*允许的频率容差:0.0 %*//*此值可通过测试结果修改*/
      const  float32_t SYS_CLK_FREQ       = 120.0f/* 120MHz 频率:sysclk*/

      UINT16_t u16DccErrSts  = CTL_U_CLR
      UINT16_t u16DccRetryCnt = CTL_U_CLR
      UINT16_t u16DccRet    = CTL_U_CLR

      /*使用 XTAL 作为基准时钟来持续监控 PLL 时钟*/
      DCC_CONTINUousMonitor (DCC0_BASEDCC_COUNT1SRC_PLLPLL_CLK_FREQDCC_COUNT0SRC_XTAL、XTAL_CLK_FREQ、 CLK_TOLALLOW_TOL、SYS_CLK_FREQ);

      u16DccErrSts = DCC_getErrorStatus (DCC0_BASE);
      
      if (u16DccErrSts!= CTL_U_CLR)
      {
        if (u16DccRetryCnt < UINT16_OVFL_guard)
        {
          u16DccRetryCnt++
        }
      }
      暴露
      {
        u16DccRetryCnt = CTL_U_CLR
      }

      IF (u16DccRetryCnt > DCC_CHCK_RETRY_CNT)
      {
        u16DccRet = CTL_U_SET
      }
      
      返回 u16DccRet

     

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

    Seungeun、

    感谢您的分享、让我在本周结束时回复您。

    此致、

    Aishwarya

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

    Seungeun

    在第一个实现中、代码是否按预期工作?  当您直接将值注入 DCC 寄存器时、您是否看到发生了错误?

    运行代码时、您能否在调用错误函数并将其清除之前检查 DCC 错误标志是否被设置好、因为它们是粘滞标志?  该 DCC_getErrorStatus 函数读取 当前 状态寄存器。 如果您在之后立即调用它 DCC_continuousMonitor、DCC 可能尚未完成其第一个测量周期、或者错误条件可能尚未注册。

    此致、

    Aishwarya

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

    Seungeun

    请登录以查看您是否能够解决问题以及您是否 有 任何其他问题

    此致、

    Aishwarya