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 驱动程序:成功写入操作和电源复位后、存储器不同

Guru**** 2510095 points
Other Parts Discussed in Thread: CC1352R, UNIFLASH, BLE-STACK

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1550352/cc1352r-nvs-driver-memory-is-different-after-successful-write-operation-and-power-reset

器件型号:CC1352R
Thread 中讨论的其他器件: UNIFLASHBLE-STACK

工具/软件:

您好:

我正尝试将一些数据存储在 NVS 存储器区域。  

为了运行代码、我使用了 nvsinternal_CC1352R1_LAUNCHXL_tirtos_ccs 示例工程中的代码。

此工程使用 NVS.h 驱动程序函数。

写入和读取工作正常、但 电源复位后存储器区域会被更改。

我没有使用调试模式、因为我读到它会将 NVS 区域作为默认值终止、但连接到已运行的目标以观察数组和变量

}

bool nvs(void)
{
    uint16_t offset = 0x50; //how do I know this does not clash with the bonding table?
	uint8_t readnvsData[8];

    static const uint8_t data[8] =
        {0x0F, 0x42, 0x3F, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A};
 

    bool res = true;
    NVS_Handle nvsHandle;
    NVS_Attrs regionAttrs;
    NVS_Params nvsParams;

    NVS_init();
    NVS_Params_init(&nvsParams);

    nvsParams2 = nvsParams;
    nvsHandle = NVS_open(CONFIG_NVSINTERNAL, &nvsParams);

    if (nvsHandle == NULL) {

        res = false;
    }

    NVS_getAttrs(nvsHandle, &regionAttrs);

    int_fast16_t resRead = NVS_read(nvsHandle, offset, (void *) readnvsData, sizeof(readnvsData)); // on first boot the bytes read here are all 0xFF, after power reset they should match the ones written below
    resRead = NVS_write(nvsHandle, offset, (void *) arrayToWrite, 8, NVS_WRITE_ERASE | NVS_WRITE_POST_VERIFY);
    resRead = NVS_read(nvsHandle, offset, (void *) readnvsData, sizeof(readnvsData));  // matches the written data from a column above
    NVS_close(nvsHandle);
    return res;

}

电源复位后读取数组的内容:

我是在启动后的 BIOS_start() 之前立即调用这个函数;

我不知道这里 NVS 驱动程序的使用是否正确,因为我看到论坛中的大多数人似乎使用的 oasl 功能,这对我来说不起作用。

我在某些器件只允许写入操作的倍数或 4 个字节的地方读取数据。  

CC1352R 是如此吗?

到目前为止、我看到没有其他模块在使用 NVS 驱动程序、是否可以在某个地方设置一些可能会扰乱我的内存? 也许是债券经理?

我还使用了偏移值、将其设置为 0x2000 或 0x50、但结果保持不变。

在电源复位之前、我是否需要做些什么来永久锁定存储器?  

我们使用  SimpleLink CC13x2 26x2 SDK v5.20.0.52、无法更新到较新的版本。

感谢您的支持

Miriam

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

    这就是我使用 UniFlash 读回的内容。

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

    您好、Miriam、

    如果在器件上运行 BLE-Stack、则可能是 GAP 绑定管理器写入 NVS、这是肯定的。 我建议您为应用程序数据指定一个专用的 NVS 部分。  

    如果使用 OSAL_SNV/简单 SNV、请注意、该命令将可用闪存分为句柄、而不会将数据存储在一个特定存储器地址中。 我希望本 UG 章节对您有所帮助:

    https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_5_30_01_01/docs/ble5stack/ble_user_guide/html/ble-stack-common/flash_memory-cc13xx_cc26xx.html?highlight=snv#osal-simple-nv-osal-snv

    谢谢、

    Marie H

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

    您好:  

    诀窍是创建一个新的 NVS 部分并将其用于我的数据。 也许那位高级经理阻碍了他在“NVS"领域“领域的写作。

    谢谢

    Miriam

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

    您好:  

    不幸的是,我现在有另一个问题:数据存储在新创建的 NVS 区域工作。

    但绑定表似乎与 旁边的秒 NVS 区域不一致。

    绑定本身起作用、但当它尝试将绑定信息写入内存时、绑定管理器返回失败。

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

    您好、Miriam、

    您似乎将 NVS_internal 大小从 0x4000 减小到了 0x2000? 您可以保留其原始大小并重试吗?

    谢谢、

    Marie H