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.

[参考译文] CC2640:nvocop 错误?

Guru**** 2573785 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/566546/cc2640-nvocop-error

器件型号:CC2640

尊敬的所有人:


在我的项目中、我使用 nvocop.c 和 ncocop.h 从闪存中读取和写入元素。

对于我的应用、我需要在内存中存储大约300个项目、这超过 uint8最大大小。

因此、我设置预处理器变量 OSAL_SNV_UINT16_ID。

在我的程序中、我执行以下操作:

1) 1)向 ID 写入8个字节。

2) 2)稍后、BLE 请求从 ID 读取项目。

误差如下所示:

1) 1)向大于255的 ID 写入8个字节成功。

2)第一次从 Id=255读取成功、我得到正确的值(我知道我之前写入 ID 的值)。

3)从 Id=255读取第二次成功、但我得到的值完全无效(大多数为零)。

对于大于255的所有 ID、我会观察到这种行为。

这是已知的错误吗?

如何解决此问题?

提前感谢您的帮助。

Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否正在使用 BLE 堆栈? 应使用 osal_SNV_read/write 将内容存储在闪存中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回答。
    是的、我使用的是 BLE 堆栈。

    是否有 osal_SNV_read/write 的 API 说明?
    如何使用它?

    此致、
    Peter
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以在我们的软件开发人员指南的第3.10.3节中找到相关信息、该节使用 Simple NV 进行闪存存储
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    再次感谢您的回答。
    我刚刚阅读了这一章。
    在章节中、它将"客户非易失性项目-范围0x80 - 0x8F"。 这是否意味着我最多可以存储15个项目
    我需要存储300件商品。 我如何才能做到这一点?

    此致、
    Peter
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以在写入 SNV 之前压缩数据。 最多可以有2个闪存扇区(总共8kB)用于存储自定义数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这意味着我必须使用一个 SNV-ID 并存储一个包含300*8字节的数组。
    然后、访问元素等于查找数组中项目的偏移量。
    但这意味着每次添加新数据时、我都必须读取和写入整个数组。 这不是很高效、每次都会增加读取/写入周期。

    是否可以将非易失性物品范围扩展到300?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    每个 NV 项目都将产生4字节开销,如果您坚持不捆绑数据,则您将创建4*300 >超过1KB 开销。
    您实际上应该考虑将数据捆绑在一起。

    您的最终应用是什么? 在芯片上存储300件物品需要什么? 您是否会考虑使用外部闪存进行存储?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    终端应用是一个传感器、它已开启一段时间。 在此期间、它会收集传感器数据。 在传感器关闭之前、该传感器数据存储在存储器中。
    如果存在 BLE 连接且智能手机请求数据、则从存储器读取所有数据并将其发送到智能手机。

    我们不考虑使用外部闪存进行存储、因为有足够的内部闪存。