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.

[参考译文] TMS320F280023C:使用闪存模块在两个电源周期之间保存数据

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1187034/tms320f280023c-using-flash-module-to-save-data-between-power-cycles

器件型号:TMS320F280023C
主题中讨论的其他器件:C2000WARE

您好!

我想知道是否有办法在闪存中的微控制器的电源周期之间保存数据。

我们有一些状态变量要保存在非易失性存储器中,它们必须按一定的时间间隔进行更新--这会排除 OTP,TRM 说 OTP 只能刷写一次。

我们是否需要使用外部非易失性存储器来实现这一点、或者通过某种方式使用此微控制器的内置闪存来实现这一点?

谢谢、

Vishnu

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

    您好,Vishnu,

    您可以在专用闪存扇区中对这些状态变量进行编程  您可以使用闪存 API 对这些值进行编程。

    F28002x (V1.57)参考指南链接: http://www.ti.com/lit/pdf/spnu631

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    感谢您的快速回复。

    我读出在擦除/编程期间不应该有任何闪存访问在我调用 API 时发生-- 因此、这意味着我必须以某种方式使它"阻断"(阻止我的应用程序代码运行、直到该扇区已被编程)、或者以某种方式从 RAM 临时运行代码。

    您能告诉我如何继续进行此限制吗? 在 E/P 周期开始时、是否有一种机制可以对 MCU 进行编程、使其从 RAM 而非闪存执行?

    谢谢、

    Vishnu

    编辑:不用考虑阻止器件、我只需轮询 FSM 的状态、直到它准备就绪。 仍然对 RAM 器件很好奇、有没有办法做到这一点? 仅供参考。

    编辑2:看起来是这样的

    #pragma CODE_SECTION(<function name>, ".TI.ramfunc");
    将从 RAM 执行命名函数、这种理解是否正确?

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

    您好,Vishnu,

    我将能够在下周早些时候进行回顾并与您再次进行讨论。

    谢谢、此致、

    Vamsi

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

    您好,Vishnu,

    是的;将 ISR 分配给.TI.ramfunc 段。  如果您查看 C2000ware 中提供的基于闪存的链接器命令文件、您会注意到.TI.ramfunc 被映射到闪存以进行加载、并且被映射到 RAM 以供执行。  您的应用程序需要在执行.TI.ramfunc 段中的任何代码之前调用 memcpy。

    请查看此常见问题解答: 如何将应用程序从 RAM 配置修改为闪存配置?:     https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/878674 

    谢谢、此致、

    Vamsi

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

    您好,Vishnu,

    您对此还有其他问题吗?  或者、我们可以关闭这个线程吗?

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    很抱歉、我们的回复很晚、两者之间出现了一些问题。

    只需确认-您所指的 memcpy 是"memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);"、对吧?

    另一个小问题。 我在浏览示例代码、看到了其他我不理解的内容- #pragma DATA_SECTION (Buffer、"DataBufferSection");

    涉及闪存的应用代码中是否需要此行? 它实现了什么?

    此致、

    Vishnu

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

    您好,Vishnu,

    是的、您需要在执行分配给.TI.ramfunc 段的任何函数之前调用该函数。  查看 C2000Ware 中基于闪存的链接器命令文件。

    #Pragma DATA_SECTION:用于映射特定地址处的特定数据变量。  请搜索"我们如何在用户 OTP 中对字段进行编程?" 在本常见问题解答中: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/951668/faq-faq-on-flash-api-usage-for-c2000-devices 

    尽管上述问题提到了用户 OTP、但它也适用于闪存空间。

    谢谢、此致、
    Vamsi