工具与软件:
嗨、 团队:
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、
您可以参考示例代码"flashctl_multiple_size_write_lp_MSPM0G3507"、并可找到更多闪存控制 API、例如:
有关闪存控制的说明、请参阅 TRM 中的扇区6.1 NVM 概述。
此致、
Janz Bai
你好、Janz
感谢您的快速回复。
在这种情况下、最多只能写入8个字节。
但我们将会进行大量写入、例如128KB 的数据包。 应使用哪种接口、或者针对这种情况应建议哪种设计解决方案? 是否是对以8个字节写入的接口的直接循环调用?
尊敬的 Janz:
有更新吗?
谢谢、此致、
Jiahui
您好、Jiahui、
很抱歉,我是9月28日到10月7日的国庆节假期
实际上、64位数据(加上8个 ECC 位)是一个单个闪存字。 所有器件一次支持单个闪存字编程、一些器件还支持多字编程模式、在该模式下、可以通过单个命令操作写入2个、4个或8个闪存字、但 MSPM0G3507无法写入。
一次最多可以将64位数据(加上8个 ECC 位)写入闪存。
如果要写入更多数据、则需要写入多次。
此致、
Janz Bai
尊敬的 Janz:
我们是否需要自行调用 driverlib 中的接口来执行循环写入? 请帮助确认以下写入方法是否可接受、以及是否建议检查更多状态以确认写入成功
在 SDK 中、驱动程序中已经封装了一层 ADC、I2C 等。 闪存是否有任何相关的布置、这将反映在后续新版本的 SDK 中、供所有人使用? 如下图所示
谢谢、此致、
Jiahui
您好、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