⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
8个职位/ 0个新职位
最后发表
matthieuW
离线
最后看到:3个月4个星期前
加入:2015-11-20 14:55
擦除闪存数据

我已经实现了DA14681在一个自定义板与宏宏MX25R3235F。
我可以毫无问题地在flash中编写应用程序。
我可以擦除或重写flash数据使用编程脚本(program_nvparam, program_qspi, erase_qspi)没有任何问题。

然而,我正在使用nvms参数和通用部分为我的应用程序。
当我写数据与我的应用程序,使用ad_nvms_write一切都是好的,如果flash是空白的地址,我想写。

然而,当使用ad_nvms_erase_region或ad_flash_erase_region擦除数据或写入新数据时,或简单地写入'FF'来擦除数据,
然后,闪存数据被随机数据破坏。

我怀疑在flash级别上有一些配置问题,因为我在DA14680上用winbond flash尝试了相同的应用程序代码,一切都很好。
你会发现附加我的flash配置文件。

谢谢你的帮助。

马修

设备:
MT_dialog
离线
最后看到:2个月3个星期前
工作人员
加入:2015-06-08 34
嗨matthieuW,

嗨matthieuW,

测试附带. h文件,在发布一个MX25R3235F pro开发工具包,我已经写在通用部分分区(使用直接的方案而不是类型,因为实际上你不能擦除数据类型在使用)一个10个字节数组,然后擦除speciifc和额外的数据地址,然后重写,没有注意到任何腐败,程序也按照规定完成了。

由于MT_dialog

matthieuW
离线
最后看到:3个月4个星期前
加入:2015-11-20 14:55
亲爱的对话框,

亲爱的对话框,
因此问题的根本原因不应该是flash配置文件。
我做了多个测试:
-我没有问题写数据到param或通用分区时,闪存是空白。
-当数据已经写入,我得到随机数据时,第二次写入相同的地址,
下面是我使用的命令:

nvms_t nvms = ad_nvms_open (NVMS_GENERIC_PART);
Ad_nvms_write (nvms, addr, data, len);
下面是我使用的分区表:

分区2(0x000000, 0x025000, NVMS_FIRMWARE_PART, 0)
分区2(0x025000, 0x001000, NVMS_PRODUCT_HEADER_PART, 0)
分区2(0x026000, 0x001000, NVMS_IMAGE_HEADER_PART, 0)
分区2(0x027000, 0x050000, NVMS_FW_EXEC_PART, 0)
分区2(0x077000, 0x006000, NVMS_LOG_PART, 0)
PARTITION2(0x07D000, 0x002000, NVMS_PLATFORM_PARAMS_PART, PARTITION_FLAG_READ_ONLY)
PARTITION2(0x07F000, 0x001000, NVMS_PARTITION_TABLE, PARTITION_FLAG_READ_ONLY)
PARTITION2(0x080000, 0x010000, NVMS_PARAM_PART, 0)
分区2(0x090000, 0x050000, NVMS_FW_UPDATE_PART, 0)
分区2(0x0E0000, 0x320000, NVMS_GENERIC_PART, 0)

-当我将通用部分改为VES并将其大小减少到0x100000以下时,一切都很好,问题是我的应用程序需要flash的所有空间。
使用ves分区时是否有分区大小限制?
我可以在参数分区中使用ves吗?
有什么配置我遗漏了吗?

问候
马修

MT_dialog
离线
最后看到:2个月3个星期前
工作人员
加入:2015-06-08 34
嗨matthieuW,

嗨matthieuW,

在您执行erase命令并尝试在该特定地址上写入任何其他内容之前,您能检查数据是否被正确地删除了吗?你也可以提到你使用的SDK版本(在SDK 1.0.10上有一个bug, flash的删除会因为任何类型的中断而取消,这个在SDK 1.0.12上被修复)。

关于你的问题:

  1. 类型仅适用于一个特定的分区,这是GENERIC_PART,因为这是应该经常写和擦除的部分,所以我不把问题关于分区大小限制,你可以更具体的对你这是什么意思?VES标志将分区的大小划分为等分的区域(8),因此闪存的可用空间将是分区大小除以8,当使用VES操作时,您不能显式地擦除,您只需要写入被视为相同地址的另一个位置。
  2. 理论上所有的分区可以支持这个但说,只有在使用的类型是GENERIC_PART分区因为这是分区,更重要的是还有可能被写入和擦除,使用类型参数分区,我不确定这将如何运作,很可能会工作,但是,如果在执行VES的擦除和试图重写数据时,擦除有问题,我希望得到相同的效果。
  3. 我没有看到你所附的分区表有任何错误。

由于MT_Dialog

matthieuW
离线
最后看到:3个月4个星期前
加入:2015-11-20 14:55
我正在使用SDk1.0.12,

我正在使用SDk1.0.12,

我检查过了,闪电已经在swd上完全消失了。
下面是通过jlink擦除后发生的简单日志。
rdmem 0 64
0 xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
wrmem 0 0 x0001020304050607
rdmem 0 64
0 x0001020304050607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
wrmem 0 0 xffffffffffffffff
rdmem 0 64
0 x0001020304050607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
第二次写入是无效的。

否则,我就理解了分割原理
然而,如果我声明我的分区为ves,我就不会有这个困扰我的问题。
马修

MT_dialog
离线
最后看到:2个月3个星期前
工作人员
加入:2015-06-08 34
嗨matthieW,

嗨matthieW,

对不起,但我不能复制你所说的,使用相同的闪存,使用你提到的驱动程序和下面的代码片段,uint8_t data_buf_1和2只是包含40字节数据的数组:

generic_part_hndl = ad_nvms_open (NVMS_GENERIC_PART);
Ad_nvms_write (generic_part_hndl, 0x00, data_buf_1, sizeof(data_buf_1));
Ad_nvms_write (generic_part_hndl, 0x00, data_buf_2, sizeof(data_buf_2));

我能够更新数据flash,并验证它从QSPI分区表工具,数据被正确地写,我唯一可以假设是,要么你不使用适配器来与分区,所以出现,或在上面的例子中你正在读数据不是来自相同的任务,但是从另一个任务中读取数据,因此您是在flash被擦除并使用前一个任务中的新数据更新之前读取数据的。对于ve,如上所述,每次执行新的写操作时,都会使用一个已经为空的闪存物理地址。

由于MT_dialog

matthieuW
离线
最后看到:3个月4个星期前
加入:2015-11-20 14:55
我关掉了MACRONIX

我在flash配置文件中禁用了MACRONIX_PERFORMANCE_MODE,一切工作正常。
谢谢你的帮助。
马修

MT_dialog
离线
最后看到:2个月3个星期前
工作人员
加入:2015-06-08 34
嗨matthieuW,

嗨matthieuW,

谢谢你这么说。

MT_dialog问好