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.

[参考译文] TMS320F280021:使用 API 进行编程后出现 fmstat 错误。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1063461/tms320f280021-fmstat-error-after-programing-with-api

器件型号:TMS320F280021
主题中讨论的其他器件:TMS320F280025UNIFLASHC2000WARE

我的一些 TMS320F280021以及一些 TMS320F280025有问题。 我有一个程序通过 JTAG 连接到芯片、然后下载引导加载程序以将数据编程到芯片中。 对于某些器件、一切正常、但有些器件在编程时始终失败。

我尝试使用 UNIFLASH 和我们的 XDS110调试探针对器件进行编程、所有器件都运行良好、因此芯片不会损坏。

我在写入前多次尝试擦除器件、或在写入我们的程序之前使用 UNIFLASH 进行擦除。 在所有情况下,空白检查都成功,但在同一地址编程失败。

我尝试在每次64位写入之间增加一个等待时间、这不会影响编程、并且它们在始终相同的地址失败。

错误是在编程调用后 FMSTAT 不为零、位12和4被置位。

PGV [12]:程序验证。 该位置位时表明、在为程序操作提供最大允许的程序脉冲数之后、一个字未被成功编程

Cstat [4]:命令状态。 FSM 启动后、任何故障都会设置此位。 置位时、该位通知主机编程或擦除命令失败、命令停止。 该位由清除状态命令清除。 对于某些错误、这将是 FSM 错误的唯一指示、因为原因不属于其他错误位类型。

我查看了闪存 API 参考指南、但没有找到任何可以解释这种行为的内容。

我还可以尝试其他什么吗?或者有人知道什么原因会导致这种情况?

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

    Tobias、

    请尝试 C2000Ware 中提供的闪存编程示例、并告知我们它是否按原样为您服务。   

    如果可以、则可以将代码与该示例进行比较。

    1) 1)程序函数是否返回任何错误?  我得到 fmstat 不是零。   

    2) 2)您尝试编程的地址是什么、编程功能使用的长度和编程模式是什么?

    3) 3)在程序命令等待程序操作完成后是否存在等待循环?

    4) 4)闪存 API 是否从 RAM 中执行?

    谢谢、此致、
    Vamsi

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

    Hallo Vamsi、

    到目前为止、我还没有尝试过该示例、我将执行该操作、然后告诉您结果。 我使用该示例作为引导加载程序的指南、在随附的图片中、这两个函数的差异。

    关于您的其他问题:

    1. fapi_issueProgrammingCommand()返回 Fapi_Status_Success。 但是之后的 oFlashStatus = fapi_getFsmStatus();不是零。

    2.我使用 Fapi_AutoEccGeneration 模式并尝试在64位写操作中进行编程。 我将其更改为更小的写入、以便也可用于 OTP 编程。 错误并非总是在同一地址发生、但在大多数情况下、某些错误会导致错误发生。 一个芯片在0x00080530、0x000808B4和0x00080EBC 处有错误、但我没有尝试得到所有可能的错误。

    没有计时等待循环,而是轮询 Fapi_checkFsmForReady()。 我还尝试了轮询之外的等待循环、但它没有提高稳定性。

    4、一切都从 RAM 运行。

    感谢您的帮助、

    托比亚斯

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

    Hallo Vamsi、

    在该示例的测试过程中、我发现时钟配置错误、修复后、编程在所有器件上都工作正常。

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

    您好 Tobias、

    感谢您发布更新/解决方案。  这有助于其他人参阅此帖子。

    谢谢、此致、
    Vamsi