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.

[参考译文] TMS320F280037C:在固件更新后尝试写入密钥和 REV 时、闪存 API 失败。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1190539/tms320f280037c-flash-api-fails-when-trying-to-write-key-and-rev-after-a-firmware-update

器件型号:TMS320F280037C

您好!  

我有一个项目、在该项目中、我将下载数据并通过 CAN 更新固件。 我将在整个闪存过程中使用闪存 API。 在写入 KEY (0x5A5A5A5A)和 REV 之前、在下载结束时检查 CRC。 CRC 测试通过、但在写入 KEY 和 REV 时失败。 我查看了寄存器并注意到 INVDAT 位已设置。

此外:

  • 如果应用 程序从组0运行、它可以正常工作、但在组1中失败。
  • 我实现了两种不同的协议、可以执行 LFU、两者都基于 CAN。 它们在处理 ID 和序列号的方式上的工作方式不同(支持两种不同的下载工具)。 这两种协议调用相同的函数来写入密钥和 REV。 但它仅在使用其中一种协议时失败、而不是同时使用这两种协议。  
  • 我尝试写入的地址为0xFFFF。

感谢您的任何提示。

Jonas

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

    你好 Jonas、

    INVDAT 指示您正在尝试通过程序命令进行0 -> 1转换。  这是不可能的。  0 -> 1转换需要擦除命令。

    请检查您是否正在尝试对已编程的位置进行编程-我看到您提到的是0xFFFF。  但是、您可能已经为该位置对 ECC 进行了编程、同时对该64位段中的其他位进行了编程(对齐)。

    谢谢、此致、

    Vamsi

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

    您好、Vamsi、

    好的、所以协议 被建立、这样、如果它们接收到的数据为0xFFFF、它们就不会写入闪存。 阅读此内容后、我仔细检查并注意到 其中一个协议中有一个小错误。 它实际上向闪存写入了0xFFFF、因此 ECC 被编程到该位置。

    感谢您的帮助!

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

    你好 Jonas、

    当您使用 Fapi_AutoEccGeneration 模式对给定64位对齐存储器段中的任何位进行编程时、ECC 将针对整个64位段进行编程、因为每64位(对齐)计算一个8位 ECC。

    谢谢、此致、
    Vamsi