TI中文支持网
TI专业的中文技术问题搜集分享网站

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");
}

谢谢大家!

Kevin Qiu1:

1.可以

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

,

junde deng:

谢谢你!

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

,

YiKai Chen:

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

,

junde deng:

问题已经解决:

我用 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 的最小空间又什么决定,从哪里可以确定其最小空间?

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

赞(0)
未经允许不得转载:TI中文支持网 » LP-CC2652RB: 关于在支持 OAD 功能的 app 中使用内部 flash 问题
分享到: 更多 (0)