各位好,
关于nv的读写操作最近遇到几个问题(mcu:CC2642)。
1、想咨询一下nv是否能够频繁进行读写操作。
最近在测试软件复位SysCtrlSystemReset()这个函数,然后每10-20s就会进行一次软件复位,在软件复位之前会进行nv读写操作来进行数据保存。这样就会频繁进行nv的读写操作。但是程序在跑了大概十几小时后,就会出现nv中数据丢失的情况,从代码上读取出来的数据全变为0.造成数据丢失的原因是不是频繁操作nv导致的
2、nv数据丢失后,我们想使用flash programma读取flash的数据,发现在nv那段区域读到的全是FF。
3、另外我们想咨询一下如何来看懂flash中的数据,具体存储逻辑是什么。我们拿一块正常的板子读出来的数据貌似和我们写入的也不太一样。从手册 Develop guider上看到nv id是从80-8F,如果在flash中查看到的数据是连续的吗?
关于这个问题我们测了一个简单测试,往8c里边写入8个byte0x08,往8D里边写入12个byte0x0D,用flash programma读出来的数据如下图,发现数据是连续存储的,另个在这两段数据之后都会出现以0x96为结尾的7byte数据,所以想问下这7byte数据具体代表什么含义?
Viki Shi:
频繁操作可能出现问题,具体原因需要跟同事讨论一下,后续会尽快po上来
user6074090:
回复 Viki Shi:
好的,那现在可以帮忙先解答一下第三个问题吗?
user6074090:
回复 Viki Shi:
Viki Shi,另外和你咨询下,关于NV的读写操作函数在2640和2642上有什么不一样吗。2640里边是调用的osal_snv_write和osal_snv_read这个API,但是刚刚在2642的例程上看到使用的是nvc_read和nvs_write这对API.这两组API有什么不一样的地方吗。如果在2642里边调用了osal_snv_write和osal_snv_read会有什么问题吗?
Viki Shi:
回复 user6074090:
还是可以使用SNV,请看这边dev.ti.com/…/flash_memory-cc13x2_26x2.html
Viki Shi:
回复 user6074090:
请提供一下信息:
1、使用的SDK版本
2、用TI例程nvsinternal 测试是否正常?
3、是否使用SNV driver?
user6074090:
回复 Viki Shi:
1、版本:simplelink_cc13x2_26x2_sdk_3_10_00_532、目前还没有测试nvs的,2642上的工程是我们直接从2640上移植的。近期发现问题后才查找资料看到TI例程上使用的nvs3、现在使用的就是snv driver。
user6074090:
回复 Viki Shi:
Viki Shi:
关于在nvs的读写操作函数中,有offset偏移量这个参数。关于偏移量这个参数具体是如何定义和使用的呢?0和1具体偏移多少
Viki Shi:
回复 user6074090:
/** Copy "sizeof(signature)" bytes from the NVS region base address into* buffer. An offset of 0 specifies the offset from region base address.* Therefore, the bytes are copied from regionAttrs.regionBase.*/NVS_read(nvsHandle, 0, (void *) buffer, sizeof(signature));
API的具体解释请看: software-dl.ti.com/…/_n_v_s_8h.html
Viki Shi:
回复 Viki Shi:
关于你之前的问题,回复如下:
NVS driver进行读写操作需要时间,如果驱动程序需要擦除页面,则更是如此。具体请参考SDK中的_n_v_s_c_c26_x_x_8h.html文档。对于flash中的内容,擦除单个数据的唯一方式是擦除整个page。为了节省时间及flash的生命周期,NVS driver是重新写一遍该变量,而不是每次都擦除整页。这应该就是你所述现象的原因。你可以把 nvsinternal烧进板子测试一下是否正常
user6074090:
回复 Viki Shi:
Viki Shi:你好。关于你刚刚回复中提到的“所述现象”是之前我一开始说的nv频繁操作数据丢失这个现象吗?另外你在刚刚的回复中提到的都是nvs的操作,我们现在使用的是snv driver。针对snv drive在2642上频繁操作会导致数据丢失问题,我们用同样的方法在2640上进行相同的测试,2640并没有发现数据丢失的情况。