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.

[参考译文] tm4c123be6pz:TMC4C123 CRC ROM 函数与 TMC4129 CRC 外设

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/648122/tm4c123be6pz-tmc4c123-crc-rom-function-versus-tmc4129-crc-peripheral

器件型号:TM4C123BE6PZ
主题中讨论的其他器件:TM4C123

我正在不断发展 CRC 算法的实现。  

我有引导加载程序、用于计算 CRC 并与闪存中的 CRC 进行比较。  如果它们相同、引导加载程序将跳转到应用程序。

我最初只是在 AVR 目标上使用了 IAR 使用的 CRC16-XMODEM (+2零字节)代码。  当我们转向更大的闪存时、速度会变得太慢。

TMC4C123的 ROM 代码使用 CRC16-IBM。

TMC4C129的外设使用 CRC16-XMODEM。

为什么选择了两种不同的算法?

我注意到、这两种实现方案之间的速度性能基本相同。  它们是相同的吗?  

我本以为 ROM 代码会是这样、并且速度可能与优化算法一样快(明显更快)。  

我本以为外设会使用一组定制晶体管来获得令人印象深刻的速度。

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

    TM4C123中的 CRC16-IBM 是基于软件的 CRC 计算、算法在 ROM 中预编程、而 CRC16-XMODEM 是基于硬件的 CRC 计算。 基于硬件的 CRC 引擎的性能将比基于软件的性能要快得多。 您是否在 TM4C129中使用了基于硬件的 CRC? TM4C129还在 ROM 向后兼容性中实现了 CRC 算法。 但是、如果您需要性能、则应使用基于硬件的 CRC。 请参阅数据表中的 CRC 模块。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没有办法解决你的问题,但我有疑问。 您看到了什么时间? 我确信我不是唯一一个好奇的观察者

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。 现在、我看到外设提供的 CRC16-IBM 与 ROM 相同、至少看起来多项式是相同的。 因此,我的第一个问题已经得到了回答,或者也许不应该被问及这个问题。

    但我对第二个答案感到困惑。 我使用了 SW-TM4C-DRL-UG.2.1.71中定义的 CRC API。 我认为这会使用硬件外设、而不是 ROM 调用。 使用 TM4C123上的 ROM 调用和129上的 TivaWare 调用、我将获得相同的性能。

    TivaWare 示例使用的是硬件、对吧?

    我的代码基于 TM4C Connected Launchpad 中的 CRC32项目。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 John:
    我假设您在 TM4C123中使用 ROM_Crc16()或 ROM_Crc16Array()来计算 CRC、同时使用 CRCDataProcess () API 来计算 TM4C129中的相同 CRC、对吧?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TM4C123上的 ROM_Crc16。
    TM4C129的 ROM_CRCDataProcess (如 CRC32.c 示例中所示)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否显示两者之间的测量值? 我很惊讶没有什么不同。 每种情况的输入数据长度是多少? CRC32示例甚至使用 DMA 将数据输入到 CRC 模块中、这应该比 CPU 更高效地将数据发送到 CRC 模块。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    "您能否显示您的测量值...之间的值?"

    查尔斯,我对拖延答复感到抱歉。

    我们有24和32KB 大小的监视器(也称为引导加载程序)。  128、256、1024数字表示总闪存大小。  因此、到 CRC 的时间是闪存大小-监视器大小- 2页。  通过切换引脚并在示波器上进行跟踪可找到的唯一实验数据是第二列中的时间/页(毫秒)。   显示器闪屏列的百分比是尝试称量大小与速度。

    我仍然想到的问题是、我的数据如何指示外设和 ROM 占用相同的时间。  我的假设是、外设实际上使用非常巧妙的器件来计算 CRC、并且速度应该快于 ROM 代码。  但我已经回读了我的代码、我不认为我有错误。  它们具有相同的持续时间。

    祝您好运、希望这对您有所帮助。  如果您发现外设与 ROM 的结果不同、请告诉我。

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

    CRC16 ROM 调用与 CRC16代码甚至 CRC16优化代码有何不同?