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.

CC2642R-Q1: CC2642 配置 NVS Internal 驱动时 无论我如何设置Region Base,Region size , sector size 返回大小多是固定,这是为什么?

Part Number: CC2642R-Q1

1. NVS 驱动配置如上图

2. NVS 的读取值如上图

3. NVS 的  ExtFlash regionBase 返回值总是 0xFFFFFFF 是正常现象吗?

  • 在 project_zero 工程中使用 内部 NVS

  • 这是正常的,配置 NVS Internal配置的是片上flash, ExtFlash是外部SPI flash,二者没有关系

  • 是的我使用的是片上flash

  • 我以经把 NVS_OPEN的索引改成了 内部flash ,返回结果还是这样?

  • 看起来是代码命名上有一些歧义,你用nvsinternal例程单独测试NVS Internal试试

  • 我需要在project_zero例程中测试NVS区的实际储存大小。结果如下:

    1.我在project_zero 例程中最大,只能申请NVS 申请的大小为 0x6000 字节。

    2. 当在nvs中写入超过1024 个字节时程序会死机,死机现象为终端没有任何输出,memory browser。

    3.而我在nvsinternal例程 可以写入8192字节数据。

    我想知道project_zero例程是否NVS 是否只能储存1k 字节数据,并且与实际申请大小不相符?为什么memory browser后面的NVS区域无法使用,一使用就死机?

    proect_zero 情况如下图:

    1. NVS 配置

    2. NVS 写入

    3. 终端打印

    4. memory broswer 结果

  • 我没有看到project_zero对NVS的限制,唯一的不同是project_zero比NVS例程占用的flash更多,许多区域不能使用,可查看cmd和map文件查看具体分配情况

    在project_zero中0x56000后的地址被分配给bim,因此NVS分配不能超过0x56000,要分配更多空间应该在0x56000之前未使用的空间分配

    为什么memory browser后面的NVS区域无法使用,一使用就死机?

    我不能复现这个问题,也可以使用flash programmer2查看内存地址值

  • 死机是一次性写入2048个字节造成的,这是什么原因?

  • 写入2048个字节时NVS_write返回值是什么,写入成功了吗

  • 1.NVS_write 没有返回 根据代码追踪卡在了SemaphoreP_pend

    2.也没有写入成功,用memory browser查看

  • NVS_write 一定会有返回值,无论是否写入成功

    查看下面的定义:

    int_fast16_t NVS_write	(	NVS_Handle 	handle,
    size_t 	offset,
    void * 	buffer,
    size_t 	bufferSize,
    uint_fast16_t 	flags 
    )		
    Write data to the NVS region associated with the NVS_Handle.
    
    Warning
    Writing to internal flash on most devices can introduce significant interrupt latencies while the write operation is in in progress. The user may want to surround certain real-time critical code sections with NVS_lock() and NVS_unlock() calls in order to prevent uncoordinated flash write operations from negatively impacting performance.
    Parameters
    handle	A handle returned from NVS_open()
    offset	The byte offset into the NVS region to start writing.
    buffer	A buffer containing data to write to the NVS region.
    bufferSize	The size of the buffer (number of bytes to write).
    flags	Write flags (NVS_WRITE_ERASE, NVS_WRITE_PRE_VERIFY, NVS_WRITE_POST_VERIFY).
    Return values
    NVS_STATUS_SUCCESS	Success.
    NVS_STATUS_ERROR	If the internal flash write operation failed, or if NVS_WRITE_POST_VERIFY was requested and the destination flash range does not match the source data. buffer
    NVS_STATUS_INV_OFFSET	If + exceed the size of the region. offsetsize
    NVS_STATUS_INV_WRITE	If NVS_WRITE_PRE_VERIFY is requested and the destination flash address range cannot be change to the values desired.
    NVS_STATUS_INV_ALIGNMENT	If NVS_WRITE_ERASE is requested and is not aligned on a sector boundary offset
    NVS_STATUS_VERIFYBUFFER	If NVS_WRITE_PRE_VERIFY or NVS_WRITE_POST_VERIFY is requested but the verification buffer has not been configured.
    Remarks
    This call may lock a region to ensure atomic access to the region.