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.

CC2652R: 关于BLE5-Stack中使用的NVS的问题思考

Part Number: CC2652R
Other Parts Discussed in Thread: SYSCONFIG

我用到的示例工程是C:\ti\simplelink_cc13x2_26x2_sdk_5_20_00_52\examples\rtos\CC26X2R1_LAUNCHXL\ble5stack\simple_peripheral_oad_offchip。用的是CLang编译器,IDE是CCS。

打开simple_peripheral_oad_onchip.syscfg -> TI DRIVERS -> NVS,看到有两个NVS区域:CONFIG_NVSINTERNAL和CONFIG_NVSINTERNAL1。其中,CONFIG_NVSINTERNAL1Region Type选择的是Pointer,基地址是0x0,区域大小是0x34000,如下图。

问题1:在simple_peripheral工程中没有CONFIG_NVSINTERNAL1区域只有CONFIG_NVSINTERNAL区域,想问一下在OAD工程中CONFIG_NVSINTERNAL1的作用?基地址是0x0,区域大小是0x34000,这是整个应用程序的固件区域了,需要调用nvs_read和nvs_write做什么,难道需要修改固件自身的代码吗?

CONFIG_NVSINTERNALRegion Type选择的是Generated,基地址是0x34000,区域大小是0x4000,如下图。

编译之后的Memory Allocation如下图所示,整个Flash大小是136KCONFIG_NVSINTERNAL定义的区域被分配到FLASH中的.TI.bound.flashBuf0段,大小是16384(即0x4000

CONFIG_NVSINTERNALRegion Type选择为Pointer,基地址是0x34000,区域大小是0x4000,如下图。

编译之后的Memory Allocation如下图所示,整个Flash大小是120K(正好Region Type为Generated时小16384(即0x4000),未找到CONFIG_NVSINTERNAL定义的区域分配

问题2:按照sysconfig中对Region Type字段的提示说明,Generated—自动生成flash内部区域;Pointer-按照Region Base指定的地址分配区域。BLE的配对绑定信息是保存在CONFIG_NVSINTERNAL定义的区域吗?调用osal_snv_read和osal_snv_write操作的是CONFIG_NVSINTERNAL定义的区域吗,为何配置为Pointer的方式在最终的固件中没有此区域,但为何我测试BLE的配对、绑定,还有osal_snv_read/write的读写都正常?

  • 您好我们已收到您的问题并升级到英文论坛,如有答复将尽快回复您。谢谢!

  • 好的,非常感谢您

  • 想问一下在OAD工程中CONFIG_NVSINTERNAL1的作用?

    为了给OAD image的NVS创造空间。

    BLE的配对绑定信息是保存在CONFIG_NVSINTERNAL定义的区域吗?

    不是的,绑定信息存储在 NV 存储器中。

    调用osal_snv_read和osal_snv_write操作的是CONFIG_NVSINTERNAL定义的区域吗,

    NVS 用于存储数据,而不是指令,因此不太可能在那里存储指令。

    为何配置为Pointer的方式在最终的固件中没有此区域,

    正常情况下都有,关于您的这个问题我们已经寻求其他工程师的帮助,会尽快给您解答。

  • BLE的配对绑定信息是保存在CONFIG_NVSINTERNAL定义的区域吗?

    不是的,绑定信息存储在 NV 存储器中。

    按照ble5-Stack用户向导中的放置OSAL SNV的说明,这个CONFIG_NVSINTERNAL定义的区域就是NV存储器。用NVS_read和NVS_write进行读写,它的上层就是osal_snv_read和osal_snv_write函数

    wei wang 说:
    调用osal_snv_read和osal_snv_write操作的是CONFIG_NVSINTERNAL定义的区域吗,
     
    NVS 用于存储数据,而不是指令,因此不太可能在那里存储指令。

    我的意思并不是存储指令。按照ble5-Stack用户向导中的放置OSAL SNV的说明,osal_snv_read和osal_snv_write操作的区域就是CONFIG_NVSINTERNAL定义的区域,就是用于存储数据的,

  • 您好,查看chip OAD and persistent app项目中定义的 NVS 区域以及.cmd linker files,工程师能够能够验证:CONFIG_NVSIONNAL (即区域 0x00034000-0x00038000) 是 NV 的最后 2 页。 您是正确的,例如,当应用程序使用 osal_SNV_write() 时,将写入该空间。 您可以通过以下快速测试来验证下:执行快速写入 (可能会用到您的 NV 项目) 并在 SmartRF Flash Programmer 中读回此信息以查找写入数据及其写入位置。

    把"Generated" 改为"Pointer"后,您会发现 sysconfig 不再保留使用静态定义的buffer(例如FlashBuf0)的NVS space。因此您在内存分配终端中是看不到特定object的。 您进行这一更改的原因是什么? 如果修改了此选项,可能会影响应用程序,因为它不能够将配对信息存储到 SNV。

    以上回答您请参考,如有遗漏的问题没有回答,请您告知我们,