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.

[参考译文] MSPM0G3507:基于硬件的 CRC 计算以及连接器生成的十六进制文件中的 CRC 校验和

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1389683/mspm0g3507-hardware-based-crc-calculation-in-combination-with-linker-generated-crc-checksum-in-hex-file

器件型号:MSPM0G3507

工具与软件:

尊敬的 Supportteam:

我实际上是在尝试通过链接器文件的文本文件部分激活 CRC 校验和算法。

我明白了如何激活和配置链接器命令文件。

例如:

  .text : palign (8){}> flash | FLASH2, crc_table(crc_table_for_text,algorithm= CRC32_PRIME)
我不确定的是如何使用硬件 CRC 组件在 MSPM0G3507上正确实现它。
据我所知、我必须首先初始化 CRC 组件:
BSL_CRC_Init (void)
  /*重置并启用 CRC */的电源
  DL_CRC_RESET (BSL_CRC);
  DL_CRC_enablePower (BSL_CRC);
  while (DL_CRC_isPowerEnabled (BSL_CRC)!= true){
  }

  /*初始化 CRC 模块*/
  DL_CRC_INIT (BSL_CRC、DL_CRC_32_polynomial、DL_CRC_BIT_REVERRIDE、
    DL_CRC_INPUT_ENDIANESS_LITT_ENDIAN、DL_CRC_OUTPUT_BYTESWAP_DISABLED);
}
但问题开始了。
1)是  CRC32_PRIME 与 DL_CRC_32_polynomial 相同
2) 2)如何调用计算正确、这是 BSL 示例中间接提供的正确方法吗?
uint32_t bsl_ci_calculateCRC (uint8_t *数据、uint32_t dataSize)
  uint32_t bufferIndex =(uint32_t) 0

  /*设置种子值以重置计算*/
  DL_CRC_setSeed32 (BSL_CRC、BSL_CRC_SEED);

  /*将数据馈入 CRC 模块*/
  for (bufferIndex =(uint32_t) 0;bufferIndex < dataSize;bufferIndex++){
    DL_CRC_feedData8 (BSL_CRC、data[bufferIndex]);
  }

  /*返回32位结果*/
  返回(DL_CRC_getResult32 (BSL_CRC));
}
或者 TI 是否提供这份工作的相关示例?
如何获取地址和长度,我发现在另一个帖子:
如何使用已知值来填充间隙和未使用的闪存? - Code Composer Studio 论坛- Code Composer Studio ︎- TI E2E 支持论坛
这解决了该问题、但无法解决如何正确实现硬件 CRC 的使用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Siegfried:

    十六进制文件本身包含 CRC 值信息。 如果您想要计算想要由 CRC 硬件部分通过 BSL 更新到 M0的数据的 CRC 值、以便比较和检查更新后的数据是否正确、您可以参考以下示例代码: crc_calculate_checksum。  

    您可以从最新版本的 M0 SDK 中找到该工具:examples->nortos -> LP_MSPM0G3507 -> driverlib。 希望这对您有所帮助。

    此致、

    Janz Bai

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

    Janz、您好!
    不同的配置变体出现问题。 以下组合正确。

    在命令文件中: .text :palign (8){}> flash | FLASH2、crc_table (crc_table_for_text、algorithm= CRC32_PRIME)

    C 代码中的 CRC 初始化:

      DL_CRC_INIT (CRC、DL_CRC_32_polynomial、DL_CRC_BIT_NOT_REVERRIDE、
        DL_CRC_INPUT_ENDIANESS_LITT_ENDIAN、DL_CRC_OUTPUT_BYTESWAP_DISABLED);

      DL_CRC_setSeed32 (CRC、CRC_SEED);
    CRC_SEED 0x0
    会导致相应的 CRC 校验和。
    问题迎刃而解。  
    但仍有意见、一个正确的总体例子将是有益的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Siegfried:

    非常感谢您的意见、我将就此与我的同事讨论。

    此致、

    Janz Bai