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.

[参考译文] TMS320F28377S:将闪存 API 复制到 RAM、然后使用如何发布

Guru**** 2465890 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/603294/tms320f28377s-copying-flash-api-to-ram-after-used-how-to-release

器件型号:TMS320F28377S

您好!

客户将 F28377S 用于其应用。

由于 RAM 的大小、客户在 闪存中调用并运行闪存 API 来擦除其他扇区。 在大多数情况下、它会起作用。 我不知道如何向客户解释。

同时、建议将 API 复制并运行到 RAM 中。 但 RAM 大小还不够。 在使用发行 RAM 后、是否有任何方法将 API 复制到 RAM?

非常感谢。

BR、Jordan

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

    由于 F28377S 中有两个闪存组、用户可以从一个组执行闪存 API 来擦除/编程另一个组。 闪存 API 不应从针对擦除/编程操作的同一组中执行。

    谢谢、此致、
    Vamsi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vamsi、
    很抱歉、出现了错误。
    客户正在使用 F28374S。 只有一个组。 闪存 API 在擦除/编程时在同一组中执行。 大多数情况下、它工作正常。
    BR、Jordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    约旦

    如果它是具有一个组的 F28374S、则必须从 RAM 执行闪存 API。  我知道它可能会运行一些时间、但在闪存上进行擦除/编程时从闪存执行 API 可能会导致竞态条件和未定义的行为。  因此、在这种情况下、TI 建议仅从 RAM 执行闪存 API。  

    谢谢、此致、

    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vamsi、
    如果客户将闪存 API 移动到 RAM、在闪存操作后、是否有任何方法可以释放这些 RAM 位置以供其他使用?
    BR、Jordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    约旦

    是的。 闪存操作完成后、RAM 可用于其他用途。 由于闪存 API 将是用户闪存映像的一部分、因此他们可以在需要时再次将其复制到 RAM 中。

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

    Vamsi、

    感谢您提供信息。

    两个问题:

    1) 1)在*。cmd 中将闪存 API 复制到 RAM。 如何释放这些 RAM?

    2)闪存 API 由 memorycopy()在代码中复制,如何释放这些 RAM?

    BR、Jordan

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

    完成闪存 API 执行后,应用程序可以使用一组新的符号来再次调用 memcpy()以加载新代码。

    例如:您可以在链接器命令文件中执行以下操作:
    NewCode:load = flash_x,
    运行= RAM_x、
    Load_start (_NewCodeLoadStart)、
    load_size (_NewCodeLoadSize)、
    Load_End (_NewCodeLoadEnd)、
    RUN_START (_NewCodeRunStart)、
    Run_Size (_NewCodeRunSize)、
    Run_End (_NewCodeRunEnd)、
    PAGE = 0、ALIGN (4)

    您可以在头文件中声明上述外部符号、如下所示:
    extern UINT16 NewCodeLoadStart;
    extern UINT16 NewCodeLoadEnd;
    extern UINT16 NewCodeLoadSize;
    extern UINT16 NewCodeRunStart;
    extern UINT16 NewCodeRunEnd;
    extern UINT16 NewCodeRunSize;

    在代码中、您可以在闪存 API 使用结束后调用 memcpy (&NewCodeRunStart、&NewCodeLoadStart、(size_t)&NewCodeLoadSize)。

    谢谢、此致、
    Vamsi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vamsi、
    这是一种在同一 RAM 中调用其他函数的方法。
    RAM 是否可用于各种参数的应用?
    BR、Jordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    约旦

    我想您在问您是否可以使用释放的空间来存储数据。 由于您将在第0页中为 API 定义该空间、我认为最好将该空间用于代码。 如果要将其用于数据、可以使用指针指向释放的空间。

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

    客户是否尝试了使用一组新符号再次调用 memcpy()以加载新代码的建议? 它是否适合他们? 很好奇。

    谢谢、此致、
    Vamsi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vamsi、
    客户没有试过、因为他们对新逻辑没有信心。
    BR、Jordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    约旦

    感谢您的更新。  我要关闭此 TT。

    此致、
    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vamsi、
    对于 F28x7x、在用户应用程序中编写 CSM 密码的常用方法是什么? 在 F2833x 中、有 CSMPassword.asm。 F28x7x 呢?
    非常感谢。
    BR、Jordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    约旦、您好!

    [引用]对于 F28x7x、在用户应用程序中编写 CSM 密码的常用方法是什么? 在 F2833x 中、有 CSMPassword.asm。 F28x7x 呢? [/报价]

    对于该器件、方法是相同的。 请参阅控制套件中的"blinky_with _dcsm"示例。

    此致、

    Vivek Singh