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.

[参考译文] MSP432E401Y:MSP432E401Y 链接器生成的 CRC

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1317777/msp432e401y-msp432e401y-linker-generated-crc

器件型号:MSP432E401Y

你好

我正在使用 TI MSP432开发与核安全相关的嵌入式应用。

我尝试使用此功能为闪存中的数据区域创建一个 CRC、然后在应用程序启动期间能够 验证此相同数据区域的目标应用计算出的 CRC 是否与链接器生成的 CRC 匹配。

 

我在链接器中尝试了几种不同的设置、如下所示、

   .const :  >0x00080200、crc_table (crc_table_for_const、algorithm= CRC32_PRIME)

   .TI.crctab :>闪存

 

在加载到目标的应用程序中、我将为 CRC 使用 TI 运行时 API、如下所示。

PS… 我尝试过许多设置…。

   // params.byteSwapInput = CRC_BYTESWAP_BYTESWAP_AND_HALF_WORD;  //不起作用

   // params.byteSwapInput = CRC_BYTESWAP_Changed;             //不显示

   // params.byteSwapInput = CRC_BYTESWAP_HALF_WORD;            //不起作用

   params.byteSwapInput = CRC_BYTESWAP_BYTESWAP_BYTES_IN_HALF_WORD;     //不起作用

   params.rectBehavior = crc_return_Behavie_blocking;

   params.polynomial = crc_polynomial_crc_32_IEEE;

   params.dataSize = crc_data_size_32bit;

   params.seed = 0xFFFFFFFF;

 

   status = crc_calculateFull (handle、src、srcSize、&result);

 

无论使用何种设置、都无法提供由链接器计算出的相同 CRC。

 

为了方便测试、已将数据区域设置为仅12字节数据。

如果能够在这里指明正确的方向、也许我需要有关链接器使用的计算的详细信息、我将不胜感激?

提前感谢您。

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

    您好!

     阅读此文章 https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/863682/ccs-msp430fr6043-matching-the-hardware-crc32-method-and-linker-crc32_prime、CRC32_PRIME 使用以下多项式。  

    MSP432E 支持 CRC-32 (0x4C11DB7)和 CRC-32C (0x1EDC6F41)、如 维基百科中所列  

    是否可以使用其他在线 CRC 计算工具来查看是否可以获得与链接器相同的签名。 我只想确保链接器生成的签名与其他工具相同。

    有一个在 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\dk-tm4c129x\CRC32中使用 CRC32的示例。  

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

    您好、感谢您的答复。

    我简化了正在使用的数据、现在仅使用2至32位字。

    0x0,000,0000

    0x111,1111

    在线 crccalc.com 为这些值提供了0xA90A2536的 CRC-32。

    使用的链接器  CRC32_PRIME 为我提供一个值0x0,000,0000 0xBDB3、4FEB

    使用  CRC_polynomial_CRC_32_IEEE 的 MPS432E4的 TI API 为我提供0xD4B7F4B2的 CRC?

    在地图上到处都是?

    有任何建议吗?

    我没有访问 C:\ti\TivaWare_C_Series-2.2.0.295\examples\boards\dk-tm4c129x\CRC32的权限

    提前感谢。

    佩里

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

    我简化了正在使用的数据、现在仅使用2至32位字。

    0x0,000,0000

    0x111,1111

    在线 crccalc.com 为这些值提供了0xA90A2536的 CRC-32。

    [/报价]

    您好!

     这不是我在 https://crccalc.com/ 和 http://www.sunshine2k.de/coding/javascript/crc/crc_js.html 中得到的

    在 https://crccalc.com/中。 您需要使用 RefIn=false、Refout=false 和 XorOut=0x0下的结果。 请参见下方的。 这与 MSP432P 硬件匹配。

    在 http://www.sunshine2k.de/coding/javascript/crc/crc_js.html 中。 请参见下方的。 这与硬件相匹配。  

    使用  CRC32_PRIME 为我提供一个值0x0,000,0000 0xBDB3、4FEB [/报价]

    结果应为32位。 0x00000000来自哪里?

    使用  CRC_polynomial_CRC_32_IEEE 的 MPS432E4的 TI API 为我提供0xD4B7F4B2的 CRC?

    [/报价]

    我还会得到相同的结果、该结果是正确的。 请参阅下面的 g_ui32Result=0xD4B7F4B2的表达式窗口和简单源代码。  

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

    您好,Charles

    感谢响应和信息、是的、对于小样本0x0,000,0000和0x111,111,1111、在运行时调用时、I 得到值0xD4B7F4B2对于在线 CRC 和 TI on taret API 均为0xD4B7F4B2、 我的问题是、让链接器在链接期间生成相同的 CRC、并将其嵌入构建文件中。

    按照 TI Arm 汇编语言工具用户指南(spnu118z.pdf)第8.9节-链接器生成的 CRC 表并使用选项 CRC32_PRIME 和 CRC32_C, 如引用的表所示、该生成函数生成的表在 crc_tbl.h 中定义、它创建了一个64位 CRC、但当我使用这两个选项时、只有前32位是0、最后32位是  

    CRC32:PRIME = 0xBDB34FEB

    CRC32_C = 0x959D569E

    如上所示和下面重复的链接器设置

    .const :  >0x00080200、crc_table (crc_table_for_const、algorithm= CRC32_PRIME)

       .TI.crctab :>闪存

    / /

    typedef 结构 crc_record{

    uint64_t crc_value;

    uint32_t CRC_ALG_ID;/* CRC 算法 ID */

    uint32_t addr;/*起始地址*/

    uint32_t size;/*数据大小(以字节为单位)*/

    uint32_t padding;/*显式填充,因此 ELF 的布局是相同的*//**/}

    CRC_RECORD;

    那么、我的问题是让链接器生成相同的代码吗?

    谢谢

    佩里

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

    尊敬的 Perry:

     我需要将您有关由链接器生成的 CRC 的问题传递给我们的编译器团队。 确认的是、与在线 CRC 工具相比、硬件正在生成预期的签名。  

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

    假设您使用 TI 专有 Arm 编译器。  它的简称为 机箱

    也许我需要链接器使用的计算的详细信息吗?

    请搜索 TI ARM 汇编工具手册 以查看标题为" 链接器生成的 CRC 表"的子章节。  另请查看与 CRC 相关的编译器 RTS 头文件。  它们位于类似的目录位置:

    C:\ti\ccs1200\ccs\tools\compiler\ti-CGT-ARM_20.2.7.LTS\include

    检查文件 crc_tbl.h crc_defines.h 。  该文件 crc_defines.h 有这些行...

    /*****************************************************************************/
    /* CRC Algorithm Specifiers                                                  */
    /*                                                                           */
    /* The following specifications, based on the above cited document, are used */
    /* by the linker to generate CRC values.                                     */
    /*                                                                           */
    /*                                                                           */
    /* ID  Name          Order  Polynomial   Initial     Ref Ref  CRC XOR   Zero */
    /*                                       Value       In  Out  Value     Pad  */
    /*-------------------------------------------------------------------------- */
    /* 0, "CRC32_PRIME",    32, 0x04c11db7,  0x00000000,  0,  0, 0x00000000,  1  */
    /* 1, "CRC16_802_15_4", 16, 0x00001021,  0x00000000,  0,  0, 0x00000000,  1  */
    /* 2, "CRC16_ALT",      16, 0x00008005,  0x00000000,  0,  0, 0x00000000,  1  */
    /* 3, "CRC8_PRIME",      8, 0x00000007,  0x00000000,  0,  0, 0x00000000,  1  */
    /* 11,"CRC32",          32, 0x1edc6f41,  0x00000000,  0,  0, 0x00000000,  1  */
    /* 12,"CRC24_FLEXRAY",  24, 0x005d6dcb,  0x00000000,  0,  0, 0x00000000,  1  */
    

    谢谢。此致、

    -乔治