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.

[参考译文] CCS:TMS570LC4357 - CRC 模块

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/864939/ccs-tms570lc4357---crc-module

主题中讨论的其他器件:TMS570LC4357HALCOGEN

工具/软件:Code Composer Studio

我使用的是 TMS570LC4357芯片和安全 TI 库。 我对使用 CRC 模块和安全 TI 库有一些问题。

我想使用 CRC 模块。 但是、不会生成 hL_crc.c 文件。 我想知道如何生成 hL_crc.c 文件。

2. CRC 模块 在自我诊断之前执行。 我在 2个位置运行 CRC 模块。

  (1)在初始化自诊断之前(绿线)-没有问题

  (2)初始化自诊断后(红线)-自诊断失败

 ->   我想知道在自 诊断初始化结束后 CRC 模块运行后自检失败的原因。

-使用代码-

   crcInit();
   sl_flash_test_in_boot();  /* CRC 模块运行代码*/

   /*通过 Vic 控制器启用 IRQ 偏移*/
   _coreEnableIrqVicOffset_();

   /*初始化 VIM 表*/
   vimInit();

   /*配置系统对发送给 ESM 组1的错误条件的响应*/
   /*可以从 HALCoGen 的"ESM"选项卡配置此函数*/
   esmInit();
/*用户代码结束*/

   _mpuInit_();
 
/*用户代码开始(23)*/
/*用户代码结束*/

   _cacheEnable_();

/*用户代码开始(24)*/
/*用户代码结束*/


/*用户代码开始(25)*/
   if (resetResason = reset_error){
       systemREG1->SYSECR |=((uint32) 0x03u<<14);
   }
/*用户代码结束*/

       /*初始化全局变量和构造函数*/
   __TI_auto_init();
/*用户代码开始(26)*/
   /*初始化 EPC */
   epcInit();
   /*启用 DMA ECC */
   sl_dmaREG->DMAPCR |=(uint32) 0xAU;

   /*初始化 DMA RAM */
   SL_Init_Memory (RAMTYPE_DMA_RAM);

   /*初始化 ADC */
   adcInit();
   debug_printf ("adc init\n\n"r);
   /*初始化 ADC SRAM */
   SL_Init_Memory (RAMTYPE_MIBADC1_RAM);
   SL_Init_Memory (RAMTYPE_MIBADC2_RAM);

   /*初始化 MIBSPI */
   mibspiInit();

   /*初始化 MIBSPI SRAM */
   SL_Init_Memory (RAMTYPE_MIBSPI1_RAM);

   /*初始化 SCI */
   sciInit();
   gioInit();/* thchung add */
   dmInit();
   gioSetBit (gioPORTB、1U、0);        /*待办事项:移至 HL.gio.h */

   /*初始化 CAN */
   canInit();
   /*初始化 CAN SRAM */
   SL_Init_Memory (RAMTYPE_DCAN1_RAM);
   SL_Init_Memory (RAMTYPE_DCAN2_RAM);
   gioInit();
   rtpInit();

   SL_ESM_Init (ESM_ApplicationCallback);
      _enable_interrupt_();

      uint32 i;
      uint32 size=(uint32)&ulHighHandlerSize;
      for (i=0;<size;i++))
      {
          (((char *)&ulHighHandlerStartAddr)[i]=((char *)&ulHighHandlerLoadStart)[i];
      }

   crcInit();
   sl_flash_test_in_boot(); /* CRC 模块运行代码*/

   SafetyBootMachine();/*自我诊断功能-在安全的 TI 库中*/

此致、

MInwoo

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

    sl_flash_test_in_boot 不是我们在安全诊断库中提供的函数。 函数名称建议在引导时运行。 您能否确认该函数调用 我们在安全诊断库中提供的 sl_CRC_Calculate。

    您能不能通过单步进入 sl_flash_test_in_boot 提供见解、这是故障的性质。 这是签名检查失败还是 CRC 计算失败。 是否有故障扇区? 闪存地址和 CRC 参数初始化是否正确? 您能否将它们与初始化时成功运行的代码进行比较。

    以下有关 Hercules 中 CRC 模块的应用手册提供了详细信息和示例:

    此致、

    Rahul

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

    您好 Rahul、

    sl_flash_test_in_boot 是我使该函数检查预定义的 CRC 以检查二进制完整性。

    代码如下所示、它只是检查预定义 CRC 和 CRC 模块校准 CRC 之间的 CRC。

    void sl_flash_test_in_boot (void)

       crcConfig_t    sCrcParams;


       sCrcParams.crc_channel  = CRC_CH1;
       sCrcParams.mode         = CRC_FULL_CPU;
       sCrcParams.pcount       = 0U;//所有计数器在完全 CPU 模式下被禁用*/
       sCrcParams.scount       = 0U;//所有计数器在完全 CPU 模式下被禁用*/
       sCrcParams.WDG_PRELOAD  = 0U;//所有计数器在完全 CPU 模式下被禁用*/
       sCrcParams.block_PRELOAD = 0U;//所有计数器在完全 CPU 模式下被禁用*/

       crcSetConfig (crcREG、&sCrcParams);
       int i = 0ul;

       对于(i = 0ul;i <_my_crc_table.num_recs;i++)
       {
           volatile uint64 u64Signature = 0ULL;

           crcModConfig_t sCrcModConfig;

           sCrcModConfig.CRC_CHANNEL = CRC_CH1;
           sCrcModConfig.mode        = CRC_FULL_CPU;
           sCrcModConfig.data_length =(_my_crc_table.recs[i].size + 7ul)/ 8ul;
           sCrcModConfig.src_data_pat =(uint64*)_my_crc_table.recs[i].addr;

           /*具有硬件模块、全 CPU 模式的计算 CRC */
           crcChannelReset (crcREG、CRC_CH1);
           crcSignGen (crcREG、&sCrcModConfig);
           u64Signature = crcGetPSASig (crcREG、CRC_CH1);

           /*检查 CRC */
           if (u64Signature!=_my_crc_table.recs[i].crc_value)
           {
               while (1);//失败*/
           }
           其他
           {
               /*通过*/
           }
       }

    我想知道、当 CRC 模块   在初始 化代码和自检代码之间执行时、它会对自我诊断测试产生影响。

    此致、

    米尼宇