工具与软件:
嗨、 团队:
Driverlib 提供了一些 用于写入闪存的 API (例如 programCacheFromRAM8WithECCGenerated)、但它们均在4字节内。 是否有适合大量编写的推荐解决方案? 您是否需要检查某些状态?
谢谢、此致、
Jiahui
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.
工具与软件:
嗨、 团队:
Driverlib 提供了一些 用于写入闪存的 API (例如 programCacheFromRAM8WithECCGenerated)、但它们均在4字节内。 是否有适合大量编写的推荐解决方案? 您是否需要检查某些状态?
谢谢、此致、
Jiahui
您好、Jiahui、
很抱歉,我是9月28日到10月7日的国庆节假期
实际上、64位数据(加上8个 ECC 位)是一个单个闪存字。 所有器件一次支持单个闪存字编程、一些器件还支持多字编程模式、在该模式下、可以通过单个命令操作写入2个、4个或8个闪存字、但 MSPM0G3507无法写入。

一次最多可以将64位数据(加上8个 ECC 位)写入闪存。
如果要写入更多数据、则需要写入多次。
此致、
Janz Bai
您好、Jiahui、
您的基本逻辑是正确的、但需要注意以下几点:
1)。 将数据写入闪存之前、需要首先擦除闪存区域、我们的 M0擦除区域大小为扇区(1KB)或存储体(整个闪存)。 我想一个扇区就足够了、但如果您想使用更多扇区、可以通过修改此函数的低音地址来擦除更多扇区。 我建议基地址 为0x400、0x800、0xC00、TEC、因为一个闪存扇区是1KB (1024字节)。

2)。 M0闪存具有保护功能。

因此、在写入 闪存或擦除闪存之前、需要取消保护 MAIN 存储器中的扇区。 函数为:

此函数将取消保护"MAIN_BASE_ADDRESS"所属的扇区。
3)。 如果您在同一个闪存扇区中执行闪存操作、则无需在 UNPROTECT 函数中修改"u32TargetAddress"的值。
您可以 每次在 RAM64WithECCGenerated 中向"u32TargetAddress"添加8。
4)。 如果使用 u32LenTemp 来计算字节数、则-8没有问题。 如果此变量用于计算其他格式的数量、则需要修改它。
5)。 参考我们 SDK 中的示例代码"flashctl_multiple_size_write"是一种好方法、您可以在"dl_flashctl.h"和"dl_flashctl.c"文件中找到所需的所有函数。 有关闪存控制的相关寄存器的信息、您可以在 TRM 中找到它们。 尝试在 CCS 的调试模式下调试代码、这样可以帮助您查找在编写代码时可以忽略的任何小错误。
我没记得我们已经计划生成用于闪存控制的驱动程序。 我可以讨论并请我的同事确认。
此致、
Janz Bai