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.

[参考译文] Hercules_safety_MCU_demos:SL_CRC_Calculate 用法

Guru**** 2460850 points
Other Parts Discussed in Thread: TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1482795/hercules_safety_mcu_demos-sl_crc_calculate-usage

器件型号:Hercules_safety_mcu_demos

工具与软件:

您好!

在 TMS570LS3137上、使用 SafeTI 库在初始化时使用 CRC 验证闪存完整性、然后定期使用 CRC、我对 sl_CRC_Calculate 函数的使用和限制感到有点困惑、该函数在新的闪存开始和结束地址分配后对我产生问题:  

*@param [in] startAddr -存储器的起始地址(与64位地址边界对齐)。

*@param [in] count64 -以64位的倍数表示的存储器长度(用于计算 CRC)。
uint64 SL_CRC_Calculate (uint64* startAddr、const uint32 count64);

通常、演示显示闪存 CRC 可用于以下用途:  

 crcAtInit_flash = sl_CRC_Calculate ((uint64 *)((uint32) ulFlashStartAddr)、((((Uint32) ulFlashEndAddr)-((Uint32) ulFlashStartAddr)>> 3)

由于使用引导加载程序、我们现在重新分配  ulFlashStartAddr:0x00000000和 ulFlashEndAddr:0x00100000

因此、对于这个起始和结束地址、 SL_CRC_Calculate 现在将崩溃。

问题:  

 SL_CRC_Calculate 可以计算的地址长度存在任何限制。 (CRC 最大值或其他值...) ?  

所提供的起始地址必须始终是8个字节的倍数、例如0x00000000、0x00008000、0x00010000、0x00020000、0x00040000、 0x00080000...

将64位对齐应用于两个输入参数、那么所选起始地址是否有任何长度限制?

谢谢!

此致、

Marc

 

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

    您好!

    还提供了具体的使用案例, 闪存地址 0x20000,其中开始我的应用:

      crcAtInit.flashCrc = SL_CRC_Calculate ((uint64*)(0x20000)X );  
    长度为 X:  
    X = 16384: 128 KB  
    X = 32768: 256KB   
    X = 65536 (或更多) :512 KB -->不起作用
    我打算计算以下闪存扇区的 CRC、不理解最后一个512的闪存扇区为什么不起作用
    我想为我的应用使用闪存的所有区域检查 CRC:(扇区4至10、大小:0x000E0000)  
      crcAtInit.flashCrc = SL_CRC_Calculate ((uint64*) (0x20000)、114688); 长度为:0x000E0000 -> 917504/8 = 114688  
    此致、
    Marc
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    事实证明、问题来自闪存中的相关 ECC 错误。