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:如果我从闪存中的程序对闪存进行编程、会发生什么情况?

Guru**** 2555630 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1346666/tms320f28379d-what-will-happen-if-i-program-flash-from-the-program-located-in-flash

器件型号:TMS320F28379D

您好!

由于软件的发展、我无意中通过删除 链接器脚本中在 RAM 中找到 API 的一行、将闪存编程 FAPI 函数从 RAM 移动到闪存:

.TI.ramfunc:{-l F021_API_F2837xD_FPU32.lib
  负载= FLASHC、PAGE = 0
  RUN = RAMD0_1、PAGE = 0、
  Load_start (_RamfuncsLoadStart)、
  Load_Size (_RamfuncsLoadSize)、
  Load_End (_RamfuncsLoadEnd)、
  RUN_START (_RamfuncsRunStart)、
  RUN_SIZE (_RamfuncsRunSize)、
  RUN_END (_RamfuncsRunEnd)、
  表(BINIT)

我只剩下以下内容:

 .TI.ramfunc:load = FLASH
    运行= RAMD0_1、
    表(BINIT)

通过 FAPI 在闪存中 、我看到闪存编程已成功执行。

以下是相关条件:

  1. 数据在扇区 C 中编程、
  2. 编程的闪存位置为空白(仅 FFs)、
  3. 主 FAPI 代码位于另一个闪存扇区(例如扇区 G)中
  4. RAM 中仍有三个次要函数(即:Fapi_setupEepromSectorEnable Fapi_User、Fapi_setupBankSectorEnable、Fapi_serviceWathcdogTimer)、它们位于 Functions.c 中。
  5. 等待编程结束的循环位于 RAM 中:while (Fapi_checkFsmForReady ()== Fapi_Status_Fsm);
  6. 该程序不只执行擦除命令 program-auto-ECC
  7. 中断被禁用
  8. CPU 由 DCSM 进行保护(所有闪存扇区、RAMD、RAMLS 均安全)

我想问:

  1. 如果它会一直在我的条件下工作,或者有一个有时出错的风险?
  2. 如果出现问题、可能会出现哪些错误:
    1. NMI、
    2. 在闪存中编程了错误的数据
    3. 还是在其他位置(甚至扇区)编程数据?

如果代码能够正常工作、我不希望更改、因此我正在寻找相关确认。

此致、

Piotr Romaniuk

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

    Piotr、

    我需要在这方面与其他一些进行检查、但正如您所说的、一般来说、我们不支持在从闪存运行时对闪存进行编程。  原因是、在编程期间、为了进行编程而改变了一些内部节点、这可能会影响闪存的回读。  我不确定我能否在当前设置上给您稳定的绿色指示灯、因为我们可能没有针对不同场景进行任何验证。

    由于您只进行编程而不进行擦除、因此让我看看是否因此而存在一些风险。 我会用更多的信息来回复 tomm。

    此致!

    马修

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

    Piotr、

    我已经联系团队了解了这个问题、这个问题需要在您的项目/链接器中进行修复。  在所有情况下、程序运行有可能失败。

    您对故障的总结是正确的、不过、我认为风险仅限于所使用的领域。

    请注意、由于这是双核器件;属于每个 CPU 的闪存是一个物理上不同的存储体、因此如果我们对 CPU2闪存进行编程、则可以从 CPU1闪存执行、反之亦然。  我相信 CPU1还能够对 CPU2闪存进行编程。  我认为这一点在这里不适用/有用、但我想提一下。

    此致!

    马修

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

    感谢您的答复。

    请注意,因为这是双核器件;每个 CPU 的闪存是物理上不同的存储体,因此如果我们正在对 CPU2闪存进行编程,则可以从 CPU1闪存执行,反之亦然。  我相信 CPU1还能够对 CPU2闪存进行编程。  我认为这不适用/有用,但想提及它。[/报价]

    每个 CPU 和相应的闪存都有单独的总线、恐怕两个部分无法访问。

    此致、
    Piotr Romaniuk

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

    Matthew 和

    您能详细联系我、了解这款处理器架构的人吗?  
    我想和他讨论一下。

    此致、
    Piotr Romaniuk

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

    Piotr、

    我需要回顾有关从 CPU1对 CPU2的存储体进行编程的最后一个答案。

    CPU1无法对 CPU2的闪存存储体进行编程。

    CPU2无法对 CPU1的闪存存储体进行编程。

    每个 CPU 有一个专用的闪存包装程序、它可以擦除/编程其专用存储块。

    如果您有任何其他问题、敬请告知。

    谢谢。此致、
    瓦姆西

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

    尊敬的 Vamsi:

    感谢您额外的确认。 是的,我知道这些事实-这只是一个想法由马修提出。

    我对闪存和 CPU 在我的特定条件下的运行比较感兴趣。
    我看到了,这一切都正常,我感到非常惊讶。
    我需要了解细节。

    此致、

    Piotr Romaniuk

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

    尊敬的 Piotr:

    这种情况下可能会出现未定义的规格问题。

    例如、此勘误表现在将适用于您的应用情况: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1320238/faq-tms320f28003x-tms320f28004x-flash-api-usage-advisory-errata 

    同样、可能还涉及其他远程和/或竞争条件、我们无法将故障输出限制在您概述的范围内。   

    我们建议从该器件的 RAM 中执行闪存 API。

    谢谢。此致、
    瓦姆西

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

    谢谢 Vamsi。

    此致、

    Piotr Romaniuk