Thread 中讨论的其他器件: controlSUITE
工具/软件:Code Composer Studio
你(们)好
我需要处理闪存中的计数器、因此每次断电和通电时、电流值都不会丢失。
闪存中是否存在任何可使用的地址? 如果是、如何访问它们?
谢谢!
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.
工具/软件:Code Composer Studio
你(们)好
我需要处理闪存中的计数器、因此每次断电和通电时、电流值都不会丢失。
闪存中是否存在任何可使用的地址? 如果是、如何访问它们?
谢谢!
Shimon、
TMS320F28377D 每个 CPU 具有512KB 的闪存。 请查看数据表中的表6.3.2闪存存储器映射,网址 为。
您可以为数据指定几个闪存扇区、并可使用它们对计数器数据进行编程。 请参阅以下主题、了解如何使用闪存实现此目的:
您可以使用 F021_API_F2837xD_FPU32.lib (闪存 API 库)擦除/编程闪存。 此库可从 controlSUITE\device_support\f2837xD\V210\F2837xD_common\lib 中获取。
闪存 API 使用示例也可从 controlSUITE\device_support\f2837xD\V210\F2837xD_examples_Dual\flash_programming 获取。
闪存 API 文档位于 controlSUITE\device_support\f2837xD\V210\doc\FlashAPI_Doc.
请注意、在闪存中执行代码时、不能擦除/编程闪存。 因此、您需要具有一个针对闪存 API 函数(以及针对调用闪存 API 函数的函数)的 RAM 运行地址、如上面提到的示例所示。
希望这对您有所帮助。
谢谢、此致、
Vamsi
Shimon、
我想您正在询问我关于从 RAM 运行闪存 API 的建议。 当在 F2837xD 上进行闪存擦除/编程操作时、不应访问该闪存组(用于获取/读取)。 因此、您不能从要执行擦除/编程操作的闪存组执行闪存 API。 相反、您可以将闪存 API 库分配给.TI.ramfunc 部分(检查 controlSUITE\device_support\f2837xd\V210\F2837xD_examples_Dual\flash_programming\cpu01中的 flash_programming_cpu1_flash.cmd 文件)、并在运行时使用 memcpy ()函数执行闪存 API 函数之前将闪存 API 函数从闪存复制到内部 RAM。 这样、闪存 API 被加载到闪存中、但是将被复制到 RAM 中以在闪存组上执行擦除/编程操作。
如果您在 我在上一篇帖子的回复中指向的示例中步入 InitSysCtrl()函数,您将注意到 memcpy()函数的用法。
如果您有任何疑问、请告诉我。
谢谢、此致、
Vamsi
Shimon、
您不必在每次要更新该值时擦除该扇区。 您可以在闪存中实现简单的 EEPROM 仿真方法、如 https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/319481中所述 -这样您就不必为每次更新擦除闪存。
您可以在 RAM 中实现计时器(或在 TRM 中检查 CPU 计时器、网址 为 http://www.ti.com/lit/ug/spruhm8f/spruhm8f.pdf)、并在断电之前更新闪存中的值。 器件中的 CPU 计时器会被复位以进行下电上电/复位。
谢谢、此致、
Vamsi
Shimon、
在 F2823x 器件链接器 cmd 文件中、我们使用两组符号-一组用于 ramfuncs、另一组用于 Flash28_API、复制自下面相应的链接器命令文件。
Flash28_API:
{
-lFlash28335_API_V210.lib (.econst)
-lFlash28335_API_V210.lib (.text)
} 负载= FLASHD、
运行= RAML0、
Load_start (_Flash28_API_LoadStart)、
Load_End (_Flash28_API_LoadEnd)、
RUN_START (_Flash28_API_RunStart)、
PAGE = 0
ramfuncs :LOAD = FLASHD,
运行= RAML0、
load_start (_RamfuncsLoadStart)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
PAGE = 0
对于 F2837xD 和其他最新器 件、我们仅为".TI.ramfunc"部分和闪存 API 库使用一组符号、如下所示:使用 GROUP 指令(以下摘自 controlSUITE\device_support\f2837xd\vx\F2837xD_examples_Dual\flash_programming\cpu01flash_programming_cpu1.cpu1文件)。 这些符号由链接器在链接步骤中定义。 所有这些符号都在 F2837xD_GlobalPrototypes.h 文件中声明。
组
{
.TI.ramfunc
{-l F021_API_F2837xD_FPU32.lib}
负载= FLASHD、
运行= RAMLS03、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0
谢谢、此致、
Vamsi