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.

[参考译文] CC1352R:在简单外设应用中 NVS_OPEN 失败

Guru**** 1788580 points
Other Parts Discussed in Thread: SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/944103/cc1352r-nvs_open-fails-in-simple-peripheral-application

器件型号:CC1352R
Thread 中讨论的其他器件:SysConfig

您好!

我想使用内部闪存来读取和写入一些数据、并在简单外设项目中的 funcion SimplePeripheral_init 中使用以下代码(已添加片上 OAD 功能):

NVS_Handle nvsHandle;
NVS_Attrs 区域 Attrs;
NVS_Params nvsParams;

NVS_INIT ();
NVS_Params_init (&nvsParams);
nvsHandle = NVS_open (CONFIG_NVSIONNAL、&nvsParams);
if (nvsHandle = NULL)
{
log_info0 ("NVS_open() failed!");
返回(NULL);
} 

它始终无法打开、但我参考了 TI 官方文档。 代码片段的上方似乎是正确的、但无法打开。 你能给我一些好的建议吗?

谢谢。

BRS。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我发现这个问题是由基于简单外设(无 OAD)示例项目的 syscfg 中的 NVS 配置错误引起的。 今天、我已根据 simple_peripheral_oad_onchip_app_CC13X2R1_LAUNCHXL_tirtos_ccs 配置了 syscfg、如下所示:

    我现在可以成功打开 NVS。 但我使用以下代码遇到了另一个问题:

    NVS_Handle nvsHandle;
    NVS_Attrs 区域 Attrs;
    NVS_Params nvsParams;
    NVS_INIT ();
    NVS_Params_init (&nvsParams);
    nvsHandle = NVS_open (CONFIG_NVSIONAL1、&nvsParams);
    if (nvsHandle == NULL){
    返回(空);
    }
    NVS_getAttrs (nvsHandle、&regionAttrs); 

    我发现 regionAttrs.regionBase 为0xFFFFFFFF、 regionAttrs.sectorSize 为4096、 regionAttrs.regionSize 为4096。 这些值与上述 syscfg 不匹配。 同时、我在原始 simple_peripheral_oad_onchip_app_CC13X2R1_LAUNCHXL_tirtos_ccs 中使用上述代码、这三个区域 Attrs 值与上述 syscfg 值相同。 是否要在简单外设示例中添加任何其他配置? 有什么建议吗? 谢谢。

    BRS。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢您不断向我们介绍您的最新进展。  

    我已经指派了一位专家进行评论、但同时您能否指定您正在使用的 SDK 版本?

    谢谢、
    ELIN

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Elin:

    谢谢。 我使用以下 SDK 和 CCS:

    SDK: simplelink_cc13x2_26x2_sdk_4_20_00_35

    CCS: Code Composer Studio 10.0.0

    顺便说一下、我将片上 OAD 功能添加到简单的外设示例应用中。

    我发现在 Arm Compiler->Predefined Symbols of Simple peripheral application 中有预定义名称 FLASH_ROM_BUILD、但在具有片上 OAD 应用的 Simple peripheral 中没有。 我尝试在  编译器中删除 FLASH_ROM_BUILD 并重建简单的外设应用程序、但遇到以下链接错误:

    未定义的首次引用
    符号
    ------ --------
    ROM_Init C:/ti/simplelink_cc13x2_26x2_sdk_4_20_00_35/source/ti/ble5stack/libraries/cc13x2r1/StackWrapper.a

    错误#10234-D:未解析的符号仍然存在
    错误#10010:链接期间遇到错误;未构建"simple_peripheral_CC13X2R1_LAUNCHXL_tirtos_ccs.out"

    >>编译失败

    我尝试找到有关 FLASH_ROM_BUILD 的一些信息、但它仍然使我感到困惑、无法解决链接问题。 我不知道此问题是否与 NVS 问题有关。 有什么建议吗?

     谢谢你。

    BRS。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我还在 项目0示例中手动添加 CONFIG_NVSIONAL1、并且 NVS 操作出现同样的问题。

    同时 、我还将 CONFIG_NVSIONAL1的 syscfg 中的"区域类型"从指针更改为"已生成"并重新编译、但会出现以下链接错误:


    错误#10324-D:Bound 段".TI.bound:flashBuf1"跨越现有存储器范围 FLASH_IMG_HDR 的边界
    错误#10099-D:程序不能放入可用内存中。 ".TI.bound:flashBuf1"大小为0x2a000时、运行定位失败
    错误#10010:链接期间遇到错误;未构建"project_zero_app_CC13X2R1_LAUNCHXL_tirtos_ccs.out"

    >>编译失败

    您能否提供一些有关指针和区域类型中生成的差异的更详细的材料?

    谢谢

    BRS。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如果 SysConfig 添加了 NVS、我认为您不需要调用 NVS_Open。 我认为这可能是在 SysConfig 文件中完成的。 希望您可以在那里找到手柄。

    您的目标是在进行 OAD 时覆盖 NV 页吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    目前、我只是尝试读取内部闪存、尤其是 OAD 映像头。 实际上,首先我使用 flash_open() API,但它无法正常工作。 因此、我使用 NVS_Open API 来操作内部闪存。

    顺便 说一下、我可以在 simple_peripheral_oad_onchip_app_CC13X2R1_LAUNCHXL_tirtos_ccs 示例上成功使用 NVS_Open API、但我无法在简单外设和项目零示例上使用这些 API。 与上述代码相同、我只需在 简单外设和项目零示例中手动添加 CONFIG_NVSIONAL1。 也就是说、同一个 API 在一个项目中工作、但在另一个项目中不工作。 为什么会发生这种情况? 您能否重现此问题?

    谢谢。

    BRS。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    今天、我做了以下实验:

    1.我在简单的外设应用程序中添加了上述新的 NVS 配置和 NVS 操作、regionAttrs.regionBase、 regionAttrs.sectorSize、 regionAttrs.regional Size 是正确的、并与 NVS syscfg 进行了调整;

    2.我在项目0 (使用外部闪存片外 OAD)中添加了上述新 NVS 配置和 NVS 操作、但 regionAttrs.regional Base、 regionAttrs.sectorSize、 regionAttrs.regional Size 错误、不能与 NVS syscfg 进行调整;

    3.我在 带有片上 OAD (带有内部闪存)和 regionAttrs.regional Base、 regionAttrs.sectorSize、 regionAttrs.regional Size 的简单外设应用中添加了上述新的 NVS 配置和 NVS 操作;

    4.我自己将片上 OAD 功能添加到简单的 peripheal 应用程序中,并在 我的自定义代码中添加上述新的 NVS 配置和 NVS 操作,但是 regionAttrs.regionBase、 regionAttrs.sectorSize、 regionAttrs.regionSize 错误,不能与 NVS syscfg 进行转换。

    顺便说一下、我根据 Simple Link Academy BLE Enhanced OAD 文档添加了片上 OAD 功能、尽管该文档是关于添加片外 OAD 功能的。

    我怀疑在简单的外设恢复应用中添加片上 OAD 功能时、我是否错过了一些棘手的配置问题。 是否有任何建议?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否将现有的片上 OAD 简单外设项目作为起点并重试?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Marie:

    目前、我们的定制应用仅基于简单的外设示例应用。 此外、我还想自己添加片上功能。 您可以在 Project Zero 中重现此问题吗? 也就是说、您能否在项目0中成功读取和写入内部闪存? 请帮助检查   Project 0中内部闪存的 regionAttrs.regionBase、regionAttrs.sectorSize、regionAttrs.regionSize。 首先、我想确保您可以成功地完成它。

    顺便说一下、我只需在 main 函数中使用以下代码并在 NVS_getAttrs 中添加断点:

    int main()
    {/*
    注册应用程序回调到堆栈中发出的 TRAP 有效状态*/
    RegisterAssertCback (AssertHandler);
    
    Board_initGeneral();
    
    //启用 ICache 预取
    VIMSConfigure (VIMS_base, true, true);
    //启用缓存
    VIMSModeSet (VIMS_base, VIMS_MODE_MODE_DE)
    
    ;//
    
    
    禁用冗余 PowerIdle* PowerIde*(Idle_con_con_con_conset26XX);允许禁用 CC26XX_PowerIdle_Power_Power_con_en_en_ene@Power_PowerIdle_Power_en_en_en_en_en_en_en_en_ene@Power_en_en_ene*(+ Powerset_en_en_en_en_en_
    
    #endif // power_saving
    
    //更新堆栈的用户配置*/
    user0Cfg.appServiceInfo->timerTickPeriod = Clock_tickPeriod;
    user0Cfg.appServiceInfo->timerMaxMillisecond = iCall_getMaxMSecs ();
    
    ////
    NVS_Handle nvsHandle;
    NVS_Attrs 区域 Attrs;
    NVS_Params nvsParams;
    NVS_init();
    NVS_PARAMS_INIT (_nvsParams);
    nvsHandle = NVS_open (CONFIG_NVSIONAL1、&nvsParams);
    if (nvsHandle == NULL){
    返回(NULL);
    }
    NVS_getAttrs (nvsHandle、&regionAttrs);
    //////
    
    。} 

    谢谢。

    BRS。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否将现有的片上 OAD 简单外设项目作为起点并重试?