Other Parts Discussed in Thread: SYSCONFIG
HI all:
如下图,我在使用NVS时,在sysconfig中,配置了如下图的nvs区域,

初始化之后,通过NVS_write(g_nvsHandle, info->offset, (void *)data, info->len, NVS_WRITE_POST_VERIFY);写入数据,第一次写入的成功,之后如果想覆盖写入不同的数据,会写入失败,除非擦除这一页之后,再写入才能写入成功,这是为什么?
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.
HI all:
如下图,我在使用NVS时,在sysconfig中,配置了如下图的nvs区域,

初始化之后,通过NVS_write(g_nvsHandle, info->offset, (void *)data, info->len, NVS_WRITE_POST_VERIFY);写入数据,第一次写入的成功,之后如果想覆盖写入不同的数据,会写入失败,除非擦除这一页之后,再写入才能写入成功,这是为什么?
您好,
第一次写入的成功,之后如果想覆盖写入不同的数据,会写入失败,除非擦除这一页之后,再写入才能写入成功,这是为什么?
根据NVS.h File Reference所述,if NVS_WRITE_POST_VERIFY was requested and the destination flash range does not match the source buffer data. 可能是目标闪存范围与源缓冲区数据不匹配,需要重新擦除再写入。
片上划出一块空间,不被其他程序使用,我想写入设备的一些配置信息且在修改部分配置信息时,其他数据信息不会被擦除。
所以现在就是想要修改部分配置信息而不是全部修改。您这么做的目的是什么?
您好,
存在一个标志位,用于擦除从NVS_write()函数指定的偏移量开始的内存字节,这样就不会擦除所有扇区。
您可以查看一下SDK中的 nvsexternal 和 nvsinternal 这两个例程。
您也可以参考这篇api文档:NVSCC26XX_HWAttrs Struct Reference
其中有说到:
您好,
按照上面的描述,我可以理解为将这块NVS区域,划分为几个不同的扇区进行操作,这样每次的擦除只是当前扇区,但存在一个问题,对于cc2642,它的sector size = 0x2000字节,这是固定的,所以每个小的分区,就必须是sector size的整数倍,用0x2000字节空间去保存几个字节的配置信息是否对flash存在严重的资源浪费。如下图:

我的nvs区域总共只有0x2000的空间,那么假如我要写入A、B、C三条信息,那就无法对每条信息都划分一个0x2000的整数倍的空间区域,在这种情况下,我的这三条信息时在同一个扇区上,紧挨着写入的,这时候我要修改B的值,就会导致A和C的值丢失,所以如上回答,并没有解决我的疑问。
我想如何能够做到只修改B的值,而不会导致A和C的值丢失,也就是只对指定的偏移地址开始的指定长度进行擦除和重写。