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以及一些 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