Other Parts Discussed in Thread: MSPM0C1104, MSPM0C1103
器件型号: MSPM0C1104
主题: MSPM0C1103 中讨论的其他器件
根据技术参考手册第 310 页、应用程序可以使用 NVM 部分中的闪存。
www.ti.com/.../slau893c.pdf

根据 MSPM0C1103/MSPM0C1104 第 29 页的数据表、外设 存储器区域中包括闪存子区域。 我假设此区域与技术参考文献指定的闪存区域相同。

在 main 函数开始时、我运行以下代码、但无法从闪存中读取数据。 失败状态返回 DL_FLASHCTL_FAIL_TYPE_INQUIL_ADDRESS。
SYSCFG_DL_init();
DL_FlashCTL_executeClearStatus(FLASHCTL);
DL_FlashCTL_unprotectSector(FLASHCTL, (uint32_t) &device_config_persistent, DL_FLASHCTL_REGION_SELECT_MAIN);
DL_FlashCTL_readVerify32(FLASHCTL, (uint32_t) &device_config_persistent, (const uint32_t*) &device_config);
DL_FlashCTL_waitForCmdDone(FLASHCTL);
DL_FLASHCTL_FAIL_TYPE failType = DL_FlashCTL_getFailureStatus(FLASHCTL);
if (failType != DL_FLASHCTL_FAIL_TYPE_NO_FAILURE) {
__BKPT(0);
}
DEVICE_CONFIG 的类型恰好为 32B、DEVICE_CONFIG_PERSISTENT 的定义如下:
__attribute__((section(".device_config")))
ST_DEVICE_CONFIG device_config_persistent =
{
.setting1 = BL_SHORT_CYCLE,
.setting1 = FALSE,
...
}
如何读取 持久性存储器区域的写入数据和写入数据?
此致
更新:
在取消保护操作之前和之后、保护寄存器保持不变。
FLASHCTL->GEN.CMDWEPROTA = 0xFFFF
FLASHCTL->GEN.CMDWEPROTB = 0x0000
FLASHCTL->GEN.CMDWEPROTC = 0x0000
原因是 sectorNumber 和 sectorInBank 等于 0x1000 (4096)。
此 API 显然并不用于写入该存储器部分。 至少不在我的控制器上。

更新 2:
而是尝试将数据写入 8kB 代码闪存的最后一部分。
但在读取时我一直收到错误 0x20、DL_FLASHCTL_FAIL_TYPE_VERIFY_ERROR。 不清楚原因。
通过 DL_FlashCTL_programMemory32、写入也不起作用、因为 ROM 数据不会更新。
MEMORY
{
FLASH (RX) : ORIGIN = 0x00000000, LENGTH = 0x00001BFF
SRAM (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00000400
DEVICE_CONFIG (RW!x) : ORIGIN = 0x00001C00, LENGTH = 0x000001FF
BCR_CONFIG (R) : ORIGIN = 0x41C00000, LENGTH = 0x000000FF
}