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.

[参考译文] TMS320F28379D:采集数据后写入失败、并在外部复位时进入 ITRAP

Guru**** 2931100 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1651852/tms320f28379d-writing-fails-after-collecting-data-and-goes-into-itrap-on-external-reset

部件号: TMS320F28379D
主题: C2000WARE 中讨论的其他器件

我的代码有时无法编写。  

此外、在外部复位时它会进入 ITRAP。 为什么?

它在调试会话中第一次尝试时可以正常工作、但在外部复位时、它会进入 ITRAP。

没有调试会话、它总是无法写入数据。

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

    您好:

    在深入探讨之前、一些详细信息有助于进一步完善这一点:

    • 到底是什么不能写入? 您是在运行时调用闪存 API、还是指应用程序的初始闪存编程?
    • 配置了什么引导模式? 如果您要引导至闪存、应用程序的 codestart 是否位于闪存入口点?

    此致、
    马特

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

    当我使用 XRS 按钮执行外部复位时、我的数据无法写入闪存。  
    我正在使用 memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);从 RAM 运行闪存 API。

    我不知道为什么会发生这种情况。

    对于第二个问题、我想是的。

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

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

    您好:

    如果您还没有、请将您的工程与 C2000Ware 中提供的闪存编程示例进行比较: C2000Ware_26_00_00\device_support\f2837xd\examples\dual\flash_programming

    对于第二个问题、我猜是的。

    请 100%确认 情况属实。 我还将尝试模拟引导至闪存(通过将 0x00000B5A 写入 0xD00、即 EMU_BOOTCTRL 寄存器)并重置器件。 然后、您可以逐步完成引导流程和应用程序、以查看 ITRAP 发生的位置。

    此致、
    马特

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

    它会第一次写入数据。 但是、如果我第二次尝试、它会进入 ITRAP、因为擦除失败。 因此、我执行了空白检查以进行确认。 是的、即使函数返回成功结果、擦除失败。 空白检查还会返回一个不擦除数据地址的值。 明确表明擦除功能失败的扇区是从开始的。 如果我不执行空白检查,它会在写入闪存时进入 ITRAP。

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

    您好:

    如果您尚未开始、请将您的项目与 C2000Ware 中提供的闪存编程示例进行比较: C2000Ware_26_00_00_00\device_support\f2837xd\examples\dual\flash_programming

    复位时某些内容不能正确初始化。 有关如何执行闪存操作的建议、请参阅此示例和 F2837xD 闪存 API 指南。

    此致、
    马特

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

    我跟随了这个例子。。。 它现在是工作的.. 但如果我再次修改、即使在内存窗口中看到新值、它也会读取较旧的值。 您能帮我解决这个问题吗?

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

    您好:

    ",="" roboto,="" arial,="" sans-serif;="" font-size:="" 16px;="" font-weight:="" 400;="" margin:="" 0px;="" text-decoration:="" none;="" border-bottom:="" 0px="" rgb(230,="" 232,="" 240);"="">过时读取(更新闪存后读取旧/ 缓存数据)几乎总是由闪存预取和数据缓存引起。 当通过 API 写入闪存阵列时、流水线控制器没有收到通知、因此它继续直接从缓存中提供数据或旧代码。

    请使用 Fapi_flushPipeline () 刷新 FMC 数据缓存。 在进行擦除或编程操作后、必须在读取第一个非 API 闪存之前刷新数据高速缓存。

    资料来源: https://www.ti.com/lit/ug/spnu629/spnu629.pdf

    此致、
    马特