主题中讨论的其他器件:C2000WARE
您好!
我想知道是否有办法在闪存中的微控制器的电源周期之间保存数据。
我们有一些状态变量要保存在非易失性存储器中,它们必须按一定的时间间隔进行更新--这会排除 OTP,TRM 说 OTP 只能刷写一次。
我们是否需要使用外部非易失性存储器来实现这一点、或者通过某种方式使用此微控制器的内置闪存来实现这一点?
谢谢、
Vishnu
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.
您好!
我想知道是否有办法在闪存中的微控制器的电源周期之间保存数据。
我们有一些状态变量要保存在非易失性存储器中,它们必须按一定的时间间隔进行更新--这会排除 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,
是的;将 ISR 分配给.TI.ramfunc 段。 如果您查看 C2000ware 中提供的基于闪存的链接器命令文件、您会注意到.TI.ramfunc 被映射到闪存以进行加载、并且被映射到 RAM 以供执行。 您的应用程序需要在执行.TI.ramfunc 段中的任何代码之前调用 memcpy。
请查看此常见问题解答: 如何将应用程序从 RAM 配置修改为闪存配置?: https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/878674
谢谢、此致、
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