我已经在带有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配置文件。
谢谢你的帮助。
马修
设备:
嗨matthieuW,
使用您在PRO DEV套件上附加的MX25R3235F在POST上附加的.h文件进行了测试10个字节数组,然后删除了标本地址,然后用其他数据重新编写,没有注意到任何损坏,程序都应该完成。
由于MT_dialog
亲爱的对话框,
因此,问题的根本原因不应该是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吗?
是否有我缺少的配置?
问候
马修
嗨matthieuW,
在您执行擦除命令之后,在您尝试在该特定地址上写入任何其他内容之前,您能否检查数据是否被正确擦除?也可以请您提到哪个版本的SDK您正在使用(有一个bug在SDK 1.0.10中擦除flash由于任何类型的中断被取消,这是固定在SDK 1.0.12)。
关于你的问题:
谢谢mt_dialog.
我正在使用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,我就不会有这个让我困惑的问题。
马修
嗨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
我禁用了flash配置文件中的MACRONIX_PERFORMANCE_MODE,一切正常。
谢谢你的帮助。
马修
嗨matthieuW,
谢谢你的暗示。
最好的问候mt_dialog.