擦除闪存数据

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

我已经在带有Macronix MX25R3235F的自定义板上实现了DA14681。
我可以在没有问题的情况下在闪存中编程我的应用程序。
我可以擦除或重写flash数据使用编程脚本(program_nvparam, program_qspi, erase_qspi)没有任何问题。

但是,我正在使用NVMS Param和PareC零件来申请。
当我写数据与我的应用程序,使用ad_nvms_write一切都是好的,如果闪存是空白的地址我想写。

但是,当使用AD_NVMS_ERASE_REGION或AD_FLASH_ERASE_REGION或简单地编写“FF”以擦除数据时,擦除数据或将闪存写入新数据或写入新数据时,
然后flash数据会被随机数据破坏。

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

谢谢你的帮助。

马修

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

嗨matthieuW,

使用您在PRO DEV套件上附加的MX25R3235F在POST上附加的.h文件进行了测试10个字节数组,然后删除了标本地址,然后用其他数据重新编写,没有注意到任何损坏,程序都应该完成。

由于MT_dialog

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

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

nvms_t nvms = ad_nvms_open(nvms_generic_part);
ad_nvms_write(nvms,addr,data,len);
这里是我使用的分区表:

Partition2(0x000000,0x025000,nvms_firmware_part,0)
PARTITION2(0x025000, 0x001000, NVMS_PRODUCT_HEADER_PART, 0)
PARTITION2(0x026000, 0x001000, NVMS_IMAGE_HEADER_PART, 0)
Partition2(0x027000,0x050000,nvms_fw_exec_part,0)
PARTITION2(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)
Partition2(0x090000,0x050000,nvms_fw_update_part,0)
PARTITION2(0x0E0000, 0x320000, NVMS_GENERIC_PART, 0)

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

问候
马修

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

嗨matthieuW,

在您执行擦除命令之后,在您尝试在该特定地址上写入任何其他内容之前,您能否检查数据是否被正确擦除?也可以请您提到哪个版本的SDK您正在使用(有一个bug在SDK 1.0.10中擦除flash由于任何类型的中断被取消,这是固定在SDK 1.0.12)。

关于你的问题:

  1. VES仅应用于特定分区,这是Generic_part,因为这是应该编写和删除的部分,所以我真的没有得到关于分区大小限制的问题,你可以更具体地对什么你的意思?VES标志将分区的大小划分为同样分隔的区域(8),因此闪光灯的可用空间将是分区大小除以8,您无法在与VES运行时默认擦除,您只需写入另一个定位的位置作为同一地址。
  2. 理论上所有的分区可以支持这个但说,只有在使用的类型是GENERIC_PART分区因为这是分区,更重要的是还有可能被写入和擦除,使用类型参数分区,我不确定这将如何运作,很可能会工作,但是,如果在执行从VES的擦除时出现擦除问题,并试图重写数据,我将期待相同的效果。
  3. 我没有看到您所附加的分区表有任何问题。

谢谢mt_dialog.

matthieuw.
离线
最后看到:4个月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 0xFFFFFFFFFFFFFFFF.
RDMEM 0 64.
0 x0001020304050607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
第二次写入无效。

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

MT_dialog
离线
最后看到:3个月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被擦除和使用上一个任务的新数据更新之前读取数据。对于VES,如上所述,每次执行新的写操作时,都会使用一个已经为空的不同的flash物理地址。

由于MT_dialog

matthieuw.
离线
最后看到:4个月4个星期前
加入:2015-11-20 14:55
我禁用了MACRONIX

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

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

嗨matthieuW,

谢谢你的暗示。

最好的问候mt_dialog.