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.

[参考译文] RTOS/CC2650MODA:函数"osal_SNV_read"和"osal_SNV_write"don't 正确工作。

Guru**** 2587365 points
Other Parts Discussed in Thread: CC2650MODA, CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/595516/rtos-cc2650moda-the-functions-osal_snv_read-and-osal_snv_write-don-t-work-correctely

器件型号:CC2650MODA
Thread 中讨论的其他器件: CC2650

工具/软件:TI-RTOS

大家好、

我有用于  开发项目的 CC2650MODA 模块和带 CC2650F128RGZ IC 的 CC2650 LaunchPad。  

我需要使用内部闪存来存储校准和广播数据。 我对本手册(通过此链接 www.ti.com/.../swru393 )进行了补充,并阅读了 uint8 osal_SNV_read (osalSnvId_t id、osalSnvlen_t len、void *pBuf)和 uint8 osal_SNV_write (osalSnvId_t id、osalSnvlen_t len、void * 3.10.3 pBuf)这两个函数,在* void 3.10.3段中提到。 但是、根据手册、我无法理解如何使用它们:

1.第一个参数 osalSnvId_t id 是什么? 它必须具有哪些数据? 该数据是闪存中的地址吗? 如果是、为什么将其指定为8位值? -页面上既不能全局也不能局部的值。 如果该参数不是存储器中的地址、它还能是什么?

2.在此例中,此参数(osalSnvId_t id)作为值0x80给出,为什么此值不能为示例0x00?

3.这些不正确地写入数据。 如果我存储数据、它将不正确地重新读取。 更重要 的是、当我尝试通过闪存编程器对这些数据进行 Loock 时、它是碎片化的、这意味着数据的一部分存储在所用碎片的开头、而部分存储在中间。

4.当我尝试在程序运行期间(校准后)保存数据时、函数"osal_SNV_write"会显示错误0x02:INVALIDPARAMETER、而不是0x0A:nV_OPER_FAILED、如手册中所述。

该误差 INVALIDPRAMETER 是什么意思?  osalSnvId_t id 的给出方式为0x80、如示例所示。

感谢您的关注

此致

Boris Fridman

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

    请参阅软件开发人员指南中有关将 SNV 用于闪存存储的部分: software-dl.ti.com/.../platform.html
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Marie H、

    我已经对本手册进行了版手册的编写、但其中包含的信息与我所询问的链接相同。 您或任何其他人能否在给出答案的地方提出问题或提供任何其他手册?

    此致

    Boris Fridman

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

    Boris 您需要了解的所有内容都包含在该手册中、但下面是概述:

    对于您的应用、TI 人员为您留下了16 256字节的块供您编写数据。

    osal_函数处理使闪存正常工作所需的所有内容、即移动内容、以便不会一直达到相同的闪存位等

     传递的"ID"基本上是您可以向其中一个预先分配的16个块写入数据的句柄。

    该 ID 的定义位于 bcomdef.h 中

    //客户 NV 项目-范围0x80 - 0x8F -这必须与绑定条目的数量相匹配
    #define BLE_NVID_CUST_START 0x80 //!<客户 NV ID 的开头
    #define BLE_NVID_CUST_END 0x8F //!<客户 NV ID 结束

    因此、如果要写入第一个用户可访问块、您的调用如下所示:

    (注-伪代码)

    uint8_t[] mybuffer ={0};

    if (成功=osal_snv_read (0x80、sizeof (mybuffer)、&mybuffer)))

    {//我读了一个东西}

    其他

    //我没有读取

    确保 mybuffer 小于256、您可以继续操作。  请注意、这些函数位于隐藏在 ICall 接口后面的 BLE 堆栈中、因此在尝试使用它们之前必须对 ICall 进行初始化(即在应用程序线程中的应用级代码中执行、而不是在主函数启动时尝试执行)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、David Rubie、
    非常感谢!
    您的回答使我暂时中断。

    此致
    Boris Fridman