我已经在带有Macronix MX25R3235F的自定义板上实现了DA14681。
我可以在没有问题的情况下在闪存中编程我的应用程序。
我可以使用程序脚本(program_nvparam,program_qspi,erase_qspi)擦除或重写闪存数据,而没有任何问题。
但是,我正在使用NVMS Param和PareC零件来申请。
当我用我的应用程序写入数据时,如果闪光灯在我想要写入的地址空白,则使用AD_NVMS_WRITE一切正常。
但是,当使用AD_NVMS_ERASE_REGION或AD_FLASH_ERASE_REGION或简单地编写“FF”以擦除数据时,擦除数据或将闪存写入新数据或写入新数据时,
然后将闪存数据损坏随机数据。
我怀疑闪存级别的一些配置问题,因为我在DA14680上尝试了使用Winbond闪存的应用程序代码,一切都很好。
您将找到附加的我的Flash Config文件。
谢谢你的帮助。
Matthieu.
设备:
嗨matthieuw,
使用您在PRO DEV套件上附加的MX25R3235F在POST上附加的.h文件进行了测试,i VE写在通用部分分区上(使用直接方案而不是VES,因为您无法在使用VE时擦除数据)10个字节数组,然后删除了标本地址,然后用其他数据重新编写,没有注意到任何损坏,程序都应该完成。
谢谢mt_dialog.
亲爱的对话框,
因此,问题根本原因不应该是Flash Config文件。
我已经进行了多次测试:
- 当闪光灯为空白时,我没有问题将数据写入Param或通用分区。
- 当数据已经写入时,我在同一地址编写第二次时,我会随机数据,
这是我使用的命令:
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(0x00000,0x320000,NVMS_GENERIC_PART,0)
- 当我将通用部分更改为VES并降低其大小0x100000时,一切都很好,问题是我的应用程序需要闪存的所有空间。
使用VES分区时是否有分区大小限制?
我可以使用参数分区的VES吗?
有一些配置我缺少吗?
问候
Matthieu.
嗨matthieuw,
在执行erase命令之前,您可以检查数据是否正确擦除了,然后在您尝试在该特定地址上写入其他任何地址?此外,还可以提及您使用的SDK版本(SDK 1.0.10上有一个错误,其中闪存的擦除由于AnySkind中断而取消,这是在SDK 1.0.12上固定的。
关于你的问题:
谢谢mt_dialog.
我正在使用SDK1.0.12,
我检查了,闪光灯通过SWD充分擦除。
这是通过jlink删除后发生的事情的简单日志。
RDMEM 0 64.
0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ..
WRMEM 0 0x0001020304050607.
RDMEM 0 64.
0x000101020304050606FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
WRMEM 0 0xFFFFFFFFFFFFFFFF.
RDMEM 0 64.
0x000101020304050606FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
第二次写入无效。
否则,我理解VES分区原则
但是,如果我将我的分区声明为VES,我就没有这个问题让我困惑。
Matthieu.
嗨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分区表工具验证,数据正确编写了数据,我可以制作的唯一假设是您不使用适配器才能与分区进行交互,所以某些东西侧向,或者在上面的例子中,您正在阅读没有同一任务的数据,而是从不同的任务读取数据,因此您正在删除闪存之前读取数据并使用上一个任务的新数据更新数据。关于VES,如上所述,每次执行新写入时,使用闪存的不同物理地址,它是空的。
谢谢mt_dialog.
我禁用了Flash配置文件中的Macronix_Performance_Mode,一切正常工作正常。
谢谢你的帮助。
Matthieu.
嗨matthieuw,
谢谢你表明。
最好的问候mt_dialog.