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.

[参考译文] TMS320F28P650DH:使用 VCRC 计算大闪存区域的 CRC

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1397601/tms320f28p650dh-crc-calculation-of-large-flash-area-using-vcrc

器件型号:TMS320F28P650DH

工具与软件:

你(们)好

我可以成功计算一个块 CRC、正如我从文档中了解到的那样、如果存储器较大、我们需要将其拆分成<= 0xFFFF、结果将成为下一个块的种子。

闪存区域为0x30000 -2 (0x60000 -4字节)字。 我将为循环提供95 x 4096字节、并在循环之后休息4092。 遗憾的是没有 成功。  

for (u16i = 0;u16i < 95;u16i++)

// myVCRC0_CRC.pMsgBuffer =(uint16_t *) u16DataPointer;


memcpy (u16Array、(const void*) u16DataPointer、sizeof (u16Array));/**/

myVCRC0_CRC.run(myVCRC0_Handle);

u16DataPointer+=(4096/2);

myVCRC0_CRC.seedValue = myVCRC0_CRC.crcResult;
}

myVCRC0_CRC.nMsgBytes = 4092;

memcpy (u16Array、(const void*) u16DataPointer、(sizeof (u16Array));/**/

myVCRC0_CRC.run(myVCRC0_Handle);

谢谢、此致

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

    Muhammad

    请检查 sizeof (u16Array)的值、并告诉我。 是2048还是4096?

    谢谢!

    SIRA

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

    尊敬的 Sira:

    则为2048。 我可以正确地获得单个块的结果。

    BR

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

    尊敬的 Muhammad:

    这就是我认为的问题-它需要4096。

    这是 F28x 架构的效果、不可按字节寻址-因此它为您提供的 sizeof (uArray)为2048、而不是4096。

    但是、VCRC 函数需要以字节数输入。 你应该尝试一下

    memcpy (u16Array、(const void*) u16DataPointer、( 2 * sizeof (u16Array));

    谢谢!

    SIRA

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

    尊敬的 Sira:

    我相信、如果我在 uint16中从2048个地址读取、结果将自动为4096字节。 正如我提到的、如果在2048个阵列中只计算一个4096字节的块、那么我可以获得正确的 CRC。  

    但是我尝试过、结果和以前一样。

    BR

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

    Muhammad

    我不知道还在做什么。 或许用2个块进行故障排除、看看您是否获得正确的结果。

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

    是适用于两个块。  

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

    是的、使用前一个块中的 CRC 结果来加载下一个块的种子是正确的方法。

    如果它适用于2个块、那么它应该适用于更多。 也许尝试更大的块大小、看看它失败了什么。

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

    感谢提示。

    它会一直工作、直到块32的块31发生故障

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

    这意味着它适用于32个块、或128KB 的内存。 您计算 CRC 的闪存地址范围是多少?

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

    1.5 bank

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

    在32块化情况下、您能否在 CRC 计算后检查其余 VCRC 配置参数以查看它们是否仍在预期值或是否已更改为一些不正确的值?

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

    Datapointer 和其它初始设置看起来正常。 我已经添加了 INIT 和 VCRC INIT 结构的32个块之后的值。

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

    尊敬的 Sira:

    感谢您的帮助。 我找出问题,它是损坏的数据块32之后。

    此致

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

    很高兴听到穆罕默德的声音! 导致此腐败的原因是什么?

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

    这是写入闪存的闪存例程。