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.

[参考译文] MSPM0C1104:如何每次持续写入闪存1个字节

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1387823/mspm0c1104-how-to-write-flash-continuously-for-1-byte-each-time

器件型号:MSPM0C1104
主题中讨论的其他器件:SysConfig

工具与软件:

大家好、专家:

   我想在 FLASH 中保存一个结构体,所以我将使用 sizeof ()获取结构体的字节,然后将这些字节保存在 FLASH 中,我想知道如何做到这一点吗? 我能做以下的事吗? 另外、我想知道可以将用户数据保存在闪存中的起始地址、谢谢。

法案

/*
*通过清除 STATCMD 确保正确的闪存命令执行
*在执行闪存操作前注册
*/
DL_FlashCTL_executeClearStatus (FLASHCTL);
/*取消保护 MAIN 存储器中的扇区*/
DL_FlashCTL_unprotectSector (
FLASHCTL、addr、DL_FLASHCTL_REGION_SELECT_MAIN);
/*擦除 MAIN 存储器中的扇区*/
gCmdStatus = DL_FlashCTL_eraseMemoryFromRAM (
FLASHCTL、addr、DL_FLASHCTL_COMMAND_SIZE_SECTOR);
if (gCmdStatus == DL_FLASHCTL_COMMAND_STATUS_FAILED){
/*如果命令不成功、则设置断点*/
__BKPT (0);
}

/*
*通过清除 STATCMD 确保正确的闪存命令执行
*在执行闪存操作前注册
*/
DL_FlashCTL_executeClearStatus (FLASHCTL);
/*在没有 ECC 的情况下向主存储器中的闪存进行8位写入*/
DL_FlashCTL_unprotectSector (
FLASHCTL、addr、DL_FLASHCTL_REGION_SELECT_MAIN);

for (i = 0;i < size;i++)

gCmdStatus = DL_FlashCTL_programMemoryFromRAM8 (
FLASHCTL、addr、v + i)
if (gCmdStatus == DL_FLASHCTL_COMMAND_STATUS_FAILED){
/*如果命令不成功、则设置断点*/
__BKPT (0);
}

}

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

    您能否参考 L1306的 EEPROM 代码示例? 您可以将其迁移到 C1104。

    这是文档:

    EEPROM  仿真 B 型设计

    EEPROM  仿真 A 型解决方案

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

    嗨、EASON:

       实际上、我们的数据只需要在受控体中设置一次、因此在这种情况下不需要 EEPROM、您能否帮助确认上面的代码是否正确? 闪存中的起始地址是什么? 谢谢。

    法案

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

    由于最少擦除部件为1KB 扇区、并且在 MCU 复位后、它将自动跳转到0x4。 因此、合适的数据闪存范围为0x400至0x800。 您需要使用指针来访问存储器的这一部分。

    我建议您参考 CMD 以使用闪存和 FLASH2保留存储空间用于保存数据。 则代码不会涵盖此部分。

    e2e.ti.com/.../6758.mspm0l1306.cmd

    另一种简单方法是更改 CMD、就像这样为数据闪存保留最后一个0x400字节。  

    您的代码没问题、因为我想您参考的是该代码示例。 addr 应该类似于0x400 (方法1)或0x3C00 (方法2)。 v+i 可能有一些问题 请记住、v 应为一个指针。

    我建议您尝试一下。

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

    嗨、EASON:

      感谢您的详细说明、另一个问题是如何在 CCS Theia 1.3.1中实施 method2? 我没有看到需要更改 IDE 的设置、所以我没有提到使用 CCS Theia 1.3.1、我找不到可以设置您共享的屏幕截图的位置、所以我假设您使用的是另一个 IDE?

    法案

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

    SysConfig 会为您生成此文件。 你需要禁用这一点并将更改后的.cmd 文件放入你的项目中。