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.

[参考译文] F28M36P63C2:memcpy 导致 FaultISR

Guru**** 2577385 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/647699/f28m36p63c2-memcpy-results-in-faultisr

器件型号:F28M36P63C2

 我在读取编程位置时获得 FaultISR。 如果尚未对其进行编程、则其读数正常。

在我使用固件版本 I getFaultISR 对位置进行编程之后。

/*从已知位置读取当前版本*/
memcpy (&appVersion、appVerLoc、sizeof (appVersion));

我在读取之前尝试了 fapi_flushPipeline(),但这没有帮助。

谢谢。

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

    瑞吉斯

    您能否检查是否为该位置编程了 ECC?  希望您使用 Fapi_AutoEccGeneration 模式进行编程。

    谢谢、此致、
    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不、只使用数据!
    您能否进一步说明这是一个问题的原因?
    感谢你的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    瑞吉斯

    如  TRM (http://www.ti.com/lit/spruhe8)的第5.3.10节纠错码(ECC)保护中所述、必须为闪存编程 ECC 以避免 ECC 错误。  复位时、针对闪存读取/取的 ECC 检查被启用。  

    使用 API 时、Fapi_AutoEccGeneration 模式是对 ECC 进行编程的最简单方法。  这要求所有64位数据都可用。  有关  更多详细信息,请阅读 www.ti.com/.../spnu595上闪存 API 参考指南中的第3.2.3节 Fapi_issueProgrammingCommand()。

    如果您有任何疑问、请告诉我。

    谢谢、此致、
    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将查看这些文档。
    使用该程序、我将编写从单独的应用程序代码导出的十六进制数据。

    "仅数据"设置将所有十六进制字节置于正确的位置。
    使用 ECC 时、代码未正确放入闪存中。

    是否有用于为 ECC 编程导出十六进制的设置?
    从 CCS 加载应用程序工作正常。
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    瑞吉斯

    1) 1)使用 ECC 时、代码未正确放入闪存中。

    您能否提供有关此问题的更多详细信息?

    2) 2) 是否有用于为 ECC 编程导出十六进制的设置?

    您可以使用链接器生成的 ECC 选项(在 TI ARM 和 C28x 汇编语言工具用户指南中进行了说明) 来生成 ECC 并将 ECC 附加到输出可执行文件中,作为链接步骤的一部分。  但是、我想了解您在使用 AutoEccGeneration 模式对十六进制数据进行编程时遇到的问题。  如果无法解析 ECC、则可以在只对数据进行编程后对其进行编程。  您可以使用 Fapi_calculateECC()和 Fapi_EccOnly 模式(用于程序)来完成此操作。   

    谢谢、此致、
    Vamsi

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

    我现在对文档进行了更好的了解。

    您能 更详细地解释一下 Fapi_issueProgrammingCommand 的工作原理吗、以帮助我更正我在下面看到的内容吗?

     

    十六进制文件数据:           地址: 002E0050数据:03 F0 9A 为70 47

    编程后在 M3闪存中:

    使用 DataOnly:         地址: 002E0050数据:03 F0 9A 为70 47

    使用 AutoECC:        地址:002E0050数据:03 FF FF FF FF FF FF FF FF FF  

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

    当然、感谢您查看该文档。

    使用 AutoEcc 进行编程时、请确保地址为64位对齐或128位对齐。
    使用此模式时、如果地址是64位对齐的、则可以(并且必须)一次对64位进行编程。 编程不应小于64位。 如果您的编程小于64位、(在您的情况下、您使用 AutoEcc 模式进行了一次 BYE 编程)、则64位中的剩余数据将被视为全部为1、并且 ECC 将被相应地计算。 一旦 ECC 被编程、即使它是1到0、您也不能在该64位切片中再次更改数据、因为 ECC 值将发生变化、并且它将与之前编程的 ECC 发生冲突。

    如果地址是128位对齐的、则可以一次对64位或128位进行编程。 没有其他选择。

    尝试在0x2E0050处一次编程8个字节(64位)。

    在流式传输十六进制文件时、请确保读取给定64位对齐地址的所有64位、并将所有这些位一起编程。

    谢谢、此致、
    Vamsi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很棒的信息 我将更新我的代码、以便一次将8个字节馈送到程序函数。
    谢谢