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.

[参考译文] 编译器/RM57L843:LCF CRC 算法以匹配安全库

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/893693/compiler-rm57l843-lcf-crc-algorithim-to-match-safety-library

器件型号:RM57L843

工具/软件:TI C/C++编译器

我在 Code Composer 中将 LCF 文件与 TI 的编译器一起使用、以生成 CRC 值、从而与安全库的"SL_CRC_Calculation"函数生成的值进行比较。  由于上下两个字被交换、这两个值不匹配。  文档"spna235"指出这是  TMS570_CRC64_ISO 算法的预期特性。  是否有我可以使用的算法没有此功能、或者有其他方法来纠正问题(除了在比较值之前交换代码中的字节顺序?)

谢谢你

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

    问题代码...

    LCF 段指令

    .text   :{}palign =8、crc_table (_my_crc_table、algoriter=TMS570_CRC64_ISO)> FLASH0 | FLASH1

    运行时检查

    RetVal =(_my_crc_table.recs[i]。crc_value == sl_crc_Calculate ((uint64*)_my_crc_table.recs[i]。addr、_my_crc_table.recs[i]。size / 8u)));

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

    您好!

    我认为您不需要为 RM57这个小端字节序器件换字。 对于 RM57、低32位字被存储在地址的低部分:

    uint64值= 0x0123456789abcdef;假设这个64位字的地址为0x08001500

    0x89abcdef 存储在0x08001500中

    0x01234567存储在0x08001504中

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

    从 sl_Calc_CRC()函数返回的值按照链接器生成的表的相反顺序返回。  在下图中、您可以看到(a)存储返回值的 RO 和 R1寄存器、(b)链接器表的存储器存储位置、以及(c)使用%llx 对两个值进行 printf 输出。  再搜索一下论坛之后、我发现了几个多年前的帖子、似乎提到了这一点、但没有列出使用标准链接文件指令的解决方案。

    https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/339833?TMS570-CRC64-ISO

    http://e2e.ti.com/support/microcontrollers/hercules/f/312/p/104764/785765.aspx#785765

    (a)

    (b)

    (c)

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

    谢谢 Matt。  

    我知道 TMS570需要交换字、但这不适用于 RM57器件。  

    无论如何、我稍后将进行测试。

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

    我认为这条说明... http://downloads.ti.com/docs/esd/SPNU118/a-note-on-the-tms570-crc64-iso-algorithm-stdz0756196.html 指出器件寄存器是小端字节序、但它期望将编译器设置为大端字节序。  根据我使用的初始代码示例、我将编译器设置为小端字节序。  这不是 RM57的典型情况吗?

    谢谢、

    Matt

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

    Matt、您好!

    我使用 LCF、全 CPU 模式下的 HW CRC 模块和 SDL 函数计算 CRC。 我注意到、LCF 在计算 CRC 之前交换了这些字。  

    在全 CPU 模式下使用硬件 CRC 的 CRC 值与 SDL 相同。

    要比较 LCF 和 SDL 的 CRC 值、需要交换 LCF 的 CRC 值的高字和低字。

    TMS570LC43x:

    使用 LCF 的 CRC:

          CRC 值= 0x1EB13F2C CA3C37CE、请交换高字和低字

      

    2.使用 SDL 的 CRC

           CRC 值= 0xCA3C37CE 1EB13F2C

    RM57Lx

    使用 LCF 的 CRC:0xCA3C38F2是低位字、0x1EBA8F97是高位字

         CRC VALEE= 0x1EBA8F97 CA3C38F2       请交换上部字和下部字

    2.使用 SDL 的 CRC

          CRC VALEE= 0xCA3C38F2 1EBA8F97