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.

[参考译文] RM48L952:CRC 为随机数计算、即使数据块中没有数据变化也是如此。 只是增加了范围内的一个数据块的存储器。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1324235/rm48l952-crc-calculates-random-numbers-even-if-there-is-no-data-change-in-the-data-blocks-just-increased-memory-of-one-of-the-data-blocks-within-range

器件型号:RM48L952

我写信报告一个关于内存分配和 CRC 校验失败的关键问题、目标位置: 费用 RML48l952 器件。  
背景:  

 

更改前正常 :。 在 FEE 区域中,我们定义了两个虚拟扇区,分别包含一个闪存扇区(即0x4000字节)和两个数据块,用于存储我们需要存储的两个特定数据集(其副本也将位于 RAM 中)。 数据块大小是根据需要存储的实际数据长度定义的。  

2.软件会定期对 RAM 中的数据集和存储在 FEE 数据基块中的数据进行 CRC 比较。 如果 CRC 校验失败、RAM 中的数据集将被复制到 FEE 中以解决不匹配问题。  

 

更改后: 这个逻辑电路已经运行到目前为止、但是最近我们必须增加其中一个数据集的大小(从长度0x2B58字节到0x34C0)、现在、即使 RAM 中的数据集没有变化、CRC 不匹配也会持续发生。

首先对数据集1 (FEE 中指定的 RAM 区域和数据锁定1之间)执行 CRC 检查、如果发现错误、RAM 中的数据集将复制到 FEE 数据锁定1。 然后对第二组数据重复检查(在指定的 RAM 区域和数据锁定2之间的 FEE),如果数据不匹配,数据将被复制到 FEE 数据锁定2。 我们在测试之后观察到的问题 第二个数据集的大小增加 数据集1的 CRC 检查在下一次定期检查中再次失败,从而导致另一次 FEE 写入,而数据集2的后续检查也失败,从而导致 FEE 写入,并且这将持续重复。  

 

观察结果:

我们的调查结果似乎表明,写入/读取一个 Dataablock 也在某种程度上影响另一个 Dataablock。 我们还确认,两个数据集的总大小仍与虚拟部门的大小相同。 我们认为代码中的某个位置可能存在大小不兼容问题、我们可能错过了这个问题。 我们已经检查了代码和配置、以确保遵守内存和缓冲区大小限制、到目前为止我们的检查没有发现任何内容。

我们非常希望获得一些指导、说明如何进一步

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

    尊敬的 Zubair:

    是否可以附加这两个代码(在增大数据块的大小之前和增加数据块的大小之后)、以便我可以在最后调试问题。

    您甚至可以向我发送私人消息。

    --
    谢谢。此致、
    Jagadish。

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

    Jagdish 您好!
    我已经将更改发送给了大家、但对于更多的观众、我也会将其发布在这里。  
    在此之前: APPCALRAM (RW): origin=0x0801C010 length=0x00002FF0
    之后  : APPCALRAM (RW): origin=0x0801C010 length=0x00003FF0。

    它的工作原理,如果我们进行以下更改,可能会导致数据重叠导致错误的 CRC 检查

    * @brief Virtual Sector Configuration */
    const Fee_VirtualSectorConfigType Fee_VirtualSectorConfiguration[TI_FEE_NUMBER_OF_VIRTUAL_SECTORS] =
    {
    
    /* Virtual Sector 1 */
    {
    /* Virtual sector number */ 1U,
    /* Bank */ 7U,
    /* Start Sector */ (Fapi_FlashSectorType)0U,
    /* End Sector */ (Fapi_FlashSectorType)1U                    // changed from 0
    },
    /* Virtual Sector 2 */
    {
    /* Virtual sector number */ 2U,
    /* Bank */ 7U,
    /* Start Sector */ (Fapi_FlashSectorType)2U,                 // changed from 1
    /* End Sector */ (Fapi_FlashSectorType)3U                   // chnaged from 1
    }
    ,
    
    };
    
    
    /* Block Configurations */
    /* SourceId : HL_Fee_SourceId_2 */
    /* DesignId : HL_FEE_DesignId_3, HL_FEE_DesignId_8 */
    /* Requirements : HL_FEE_SR2, HL_FEE_SR3, HL_FEE_SR4, HL_FEE_SR6, HL_FEE_SR85, HL_FEE_SR86
    HL_FEE_SR87, HL_FEE_SR88, HL_FEE_SR89, HL_FEE_SR90, HL_FEE_SR91 */
    const Fee_BlockConfigType Fee_BlockConfiguration[TI_FEE_NUMBER_OF_BLOCKS] =
    {
    /* Block 1 */
    {
    /* Block number */ 1U,
    #pragma diag_push
    #pragma diag_suppress 70 /* Justification: Cast needed to get section size from the linker */
    #pragma CHECK_MISRA("-11.3") /* Justification: Needed to access variables from Addresses.h */
    /* Block size */ (uint16_t)((uint32_t)16384U),         // changed from &__FIRMWARE_CAL_SIZE to  16384U                                                                                      
    #pragma CHECK_MISRA("11.3")
    #pragma diag_pop
    /* Block immediate data used */ TRUE,
    /* Number of write cycles */ 0x8U,
    /* Device Index */ 0x00000000U,
    /* Number of DataSets */ 1U,
    /* EEP number */ 0U
    }
    
    ,
    /* Block 2 */
    {
    /* Block number */ 2U,
    #pragma diag_push
    #pragma diag_suppress 70 /* Justification: Cast needed to get section size from the linker */
    #pragma CHECK_MISRA("-11.3") /* Justification: Needed to access variables from Addresses.h */
    /* Block size */ (uint16_t)((uint32_t)16384U),        // changed from &__FIRMWARE_CAL_SIZE to 16384U
    #pragma CHECK_MISRA("11.3")
    #pragma diag_pop
    /* Block immediate data used */ TRUE,
    /* Number of write cycles */ 0x8U,
    /* Device Index */ 0x00000000U,
    /* Number of DataSets */ 1U,
    /* EEP number */ 0U
    }

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

    尊敬的 Zubair:

    我已经向您发送了隐私更改,但对于较大的受众,我也将在这里发布它。  
    在此之前: APPCALRAM (RW): origin=0x0801C010 length=0x00002FF0
    在  : APPCALRAM (RW)之后: origin=0x0801C010 length=0x00003FF0。

    在 RAM 方面、只会将0x1000的存储器增加4KB。 所以,是否真的有必要改变收费方面的重大变动?

    我之前的意思是、您刚刚将每个虚拟扇区配置为一个物理扇区的16KB、但现在您通过将两个物理扇区合并为一个虚拟扇区将其增加到32KB。

    这只是 RAM 端的4KB 块增加、为什么不在 FEE 端保持相同的设置并进行测试呢?

    --
    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!
    谢谢回答、我们已经这样做了、这是第一印象、但失败了。

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

    尊敬的 Zubair:

    最后、我需要您的完整项目或任何其他最简单的项目来调试该问题。 否则、很难通过上述信息找出根本原因。

    --
    谢谢。此致、
    Jagadish。