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.

LP-CC2652RB: 关于在支持 OAD 功能的 app 中使用内部 flash 问题

Part Number: LP-CC2652RB


以 simple_peripheral_onchip_oad 为例,我在其 syscfg 文件中发现其分别定义了两个 NVS,设置分别如下图:

    

通过搜索可以知道,OAD 功能只用了 CONFIG_NVSINTERNAL1,即地址从 0x0--0x33FFF;而定义的 CONFIG_NVSINTERNAL 并没有使用,其地址从 0x34000 开始。

我想请教一下:

1. 是否我们的一些用户数据可以直接存储在 CONFIG_NVSINTERNAL 的空间内?

2. 我在加了 NVS.h 头文件,并做了如下代码初始化后,为什么 NVS_open() 总是执行失败呢?

( 我还在不支持 OAD 的 simple_peripheral 例程里也试了这个代码,也是 NVS_open() 返回 NULL。但这个初始化过程我是从 nvsinternal 例程里抄过来的呀)

NVS_Params nvsParams_pkg;
NVS_Handle nvsHandle_pkg;
NVS_Attrs  nvsAttrs_pkg;
NVS_init();
NVS_Params_init(&nvsParams_pkg);
nvsHandle_pkg = NVS_open(CONFIG_NVSINTERNAL, &nvsParams_pkg);
if(nvsHandle_pkg == NULL)
{
  Display_printf(dispHandle, 0, 0, "NVS_pkg open failed");
  while(1);
}
else
{
  Display_printf(dispHandle, 0, 0, "NVS_pkg open OK");
}

谢谢大家!

  • 1.可以

    2.你debug看一下卡在哪里,另外串口打印什么信息

  • 谢谢你!

    现在 debug 就是停在了 while(1); 循环里。(从log信息可以看出,display_printf 的输出也还是按指定行数输出,而不是按执行顺序输出)

  • 你這個是NVS_open失敗了。列印的問題,用個全域變數指定行數,每次用完加一不就解決了

  • 问题已经解决:

    我用 CONFIG_NVSINTERNAL 会一直失败,如果删除 CONFIG_NVSINTERNAL 好像也会出问题,但是又找不到哪里用到了这个空间。。。

    我的解决方案是新建两个 NVS 区域,如下:

        

    我试过将 CONFIG_NVSINTERNAL 的空间减小到 0x34000--0x36000,然后在其后再加一个空间,编译可以通过并能正常执行 NVS_open()。

    问题虽然解决,但是原因还不是太清楚。

    还有另外的疑问:

    1. onchip OAD 时需要下载 persistent app,而这个 app 的下载地址就是 0x38000,不知道这个是不是表示,我在应用程序里的 NVS 设置不能超过这个指?

    2. CONFIG_NVSINTERNAL 究竟是干嘛的?最小空间有什么决定?其起始地址只能是 0x34000 吗,是哪里决定的呢?

    3. CONFIG_NVSINTERNAL1 的最小空间又什么决定,从哪里可以确定其最小空间?

    希望知道答案的朋友能够解答一下我的疑问,谢谢大家!