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.

[参考译文] TMS570LC4357:sl_CRC_Calculate ()给出的 CRC 值不正确

Guru**** 2529580 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1121897/tms570lc4357-crc-value-given-by-sl_crc_calculate-not-correct

器件型号:TMS570LC4357

各位专家、您好!

SafeTILib 中的函数 SL_CRC_Calculate 不会返回正确的 CRC 值。
至于我可以告诉64位返回值的两个32位字、需要进行切换。

例如、函数返回"PSASIG2[31:0] PSASIG2[63:32]"而不是"PSASIG2[63:32] PSASIG2[31:0]"

这会在与预定的 CRC 进行比较时导致错误。

(Q1)这是 SafeTiLib 中的错误还是有原因?

谢谢、此致、
最大

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

    尊敬的 Max:

    我开始研究这个问题、很快我会回来。

    --

    谢谢、
    Jagadish。

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

    尊敬的 Max:

    我没有看到函数"sl_CRC_Calculation"有任何问题、因此我想知道您在代码中使用此函数的确切程度。
    如果可能、  您可以附上您的代码吗?

    --

    谢谢、
    Jagadish。

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

    您好 Jagadish、

    我们使用此计算器确定用于测试 HW-CRC 模块的示例 CRC:
    www.sunshine2k.de/.../crc_js.html

    我们得到以下结果:

    MCU 上的计算结果为:

    如果函数 SL_CRC_Calculate 读为"PSA_SIGREGH1 PSA_SIGREGL1"、则正确。  相反、它显示"PSA_SIGREGL1 PSA_SIGREGH1"

    在查看《技术参考手册》时、我注意到寄存器描述也表明 sl_CRC_Calculate 使用的寄存器顺序错误:

    sl_CRC_Calculate 以不同的顺序使用寄存器的原因是什么?

    谢谢、此致、
    最大

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

    尊敬的 Max:

    我看不到任何问题  

    "PSA_SIGREGH1"应存储 CRC 的较高字、但确实如此、因为它在您的情况下保存的是较高的字0x000000CA。

    类似地、"PSA_SIGREGL1" 应存储  CRC 的低位字、而它确实会在 您的情况下保存低位字0x000006DC。

    我希望您讨论的 是"sl_CRC_Calculation"函数的以下定义

    这里看起来很好、我是说 CRC 是以64位变量计算的、然后返回相同的值。

    --

    谢谢、

    Jagadish。

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

    您好 Jagadish、

    那么、我们的 CRC 计算是正确的。 问题是 SL_CRC_Calculate 返回 CRC、如 0x000006DC 000000CA、而不是0x000000CA 000006DC。 这是由于函数中的64位读取导致的。 它首先读取低字、然后读取高字、这意味着 CRC 字是不按顺序的。

    但如果我理解正确的话,没有特殊的理由,我们可以正确地计算 CRC。我们只需要注意,单词的顺序是正确的。

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

    尊敬的 Max:

    我找到了问题的根本原因,只是因为它的不那么令人厌食。 由于 TMS570是大端字节序、最高有效字将存储在最低地址中、最低有效字将存储在最高地址中。 因此、我们需要在使用 CRC 时交换高字和低字。

    请参阅以下主题  

    (+) RM57L843:RM57L843和 TMS570LC4357:64位多项式的 CRC 算法是否相同? -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    --

    谢谢、

    Jagadish。