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.

[参考译文] CCS/TMS320F28035:针对 CAN 修改了2803x_flash_kernel

Guru**** 2577385 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/648425/ccs-tms320f28035-2803x_flash_kernel-modified-for-can

器件型号:TMS320F28035

工具/软件:Code Composer Studio

我已成功修改 CAN 的2803x_flash_kernel (100kbps)。  我能够通过 CAN 引导模式将此内核加载到 RAM 中。  然后、我可以通过 CAN 将我的应用程序从这个内核写入闪存。  这一切正常、但是有一个问题我不太理解。

如果我以10ms 的速率向闪存内核发送 CAN 消息、则写入闪存的操作无法成功完成。  它首先正确写入大部分数据、但随后开始失败、因为进程继续将部分应用程序闪存空间保留为0xFFFF。  我将写入大约2200个存储器位置。

如果我以100ms 的速率向闪存内核发送 CAN 消息、则整个应用程序将成功写入闪存。

为什么闪存内核无法以10ms 的速率处理 CAN 消息的接收?  瓶颈在哪里?

我已附加修改后的闪存内核。

e2e.ti.com/.../1884.f2803x_5F00_flash_5F00_kernel.zip

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

    对2200个内存位置进行编程的闪存编程时间是瓶颈。 我认为您的应用在处理下一批2200个存储器位置之前、无需等待闪存编程操作完成。 每10ms、您尝试编程到闪存中的十六进制代码就会存储在缓冲区中。 但是、如果之前的闪存程序操作未完成。 您的缓冲区将损坏、在完成上一个闪存编程周期之前、下一个闪存编程周期开始。

    表5-14. 60MHz SYSCLKOUT 上的闪存参数、显示16位字的典型闪存编程时间为50us。 在2200内存位置时、预计需要大约100ms 的时间。 因此、如果您必须减小缓冲区大小并决定在100ms 更新 CAN 消息、 如果我是您、由于仅提到典型的闪存编程时间、如果闪存存储器的位置需要超过50us 的时间、我会添加一些缓冲时间。

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

    啊、是的、这是有道理的。 写入一个包含400个位置的缓冲区需要20ms。 在它完成之前(10ms 后)、我已经发送了下一段数据。 我需要以不超过20ms 的时间发送 CAN 消息、并且可能比这慢至少50%。

    我是否理解正确?

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

    您已通过一个小修正正确理解了它。 但是、我想向大家强调、对400个位置进行编程也可能需要20ms 以上的时间。 请记住、我们没有针对闪存编程时间的 MAX 数。 因此、我建议您添加一些缓冲时间。

    简而言之、CAN 速率越快、缓冲器大小就越小。

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