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/CC2541:CC2541 SNV 无法保存

Guru**** 2874030 points

Other Parts Discussed in Thread: CC2541

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/694549/rtos-cc2541-cc2541-snv-failed-to-save

器件型号:CC2541

工具/软件:TI-RTOS

现在我发现了一个问题。 用户数据保存到 SNV 中、调试发现读出的数据全部为0、数据不保存到 SNV 中。

使用 osal_SNV_write()和 osal_SNV_read()函数访问 ID 0x80。

测试代码如下。 此函数也在 osal_snv_init()之后调用:

void cc2541_MAC2snv_test (void)

   uint8 nv_ret;  

   uint8 nv_data_read[128]=0;

   UINT8 NV_DATA_WRITE[128]= 0;  

 

   uint8 ownAddress[B_ADDR_LEN];   

 

   ownAddress[0]=*(unsigned char *)(0x780E);//直接指向指针内容   

   ownAddress[1]=*(unsigned char *)(0x780F);   

   ownAddress[2]=*(unsigned char *)(0x7810);   

   ownAddress[3]=XREG (0x7811);         //定义函数直接读出数据   

   ownAddress[4]=XREG (0x7812);   

   ownAddress[5]= XREG (0x7813);             

    OSAL_memset (nv_data_write、0、sizeof (nv_data_write));//清空缓冲区后,作为接收缓冲区

 

    NV_DATA_WRITE[0]=所有权地址[0];

   NV_DATA_WRITE[1]=ownAddress[1];

   NV_DATA_WRITE[2]=所有权地址[2];

   NV_DATA_WRITE[3]=所有权地址[3];

   NV_DATA_WRITE[4]=ownAddress[4];

   NV_DATA_WRITE[5]= ownAddress[5];

    nv_ret = osal_SNV_write (0x80、128、nv_data_write);

   if (nv_ret!= nv_Oper_failed)

    {

     nv_ret = osal_sv_read (0x80、128、nv_data_read);

   }

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

    您好、Hank、

    我使用此函数测试了 SNV、我从 SimpleBLEPeripheral_Init(..)调用该函数、

    uint8 dataToWrite[22]="这是一个测试字符串";
    uint8 dataToRad[22]="没有读取任何内容";
    
    void snvFunction()
    {
    HalLcdWriteString("读取 SNV",HAL_LCD_LINE_1);
    
    if (成功!= osal_SNV_read (0x80),dataRead (dataRad)
    
    HalLcdWriteString (“无记录优先”,HAL_LCD_LINE_2);
    OSAL_SNV_WRITE (0x80、sizeof (dataToWrite)、dataToWrite);
    
    HalLcdWriteString ("读取 SNV x2"、HAL_LCD_LINE_1);
    if (成功!= osal_SNV_read (0x80、sizeof (dataToRead)、dataToRead)))
    {
    }
    }
    
    HalLcdWriteString (dataToRead、HAL_LCD_LINE_3);
    
    while (1);
    
    } 

    它似乎按预期工作。 这就是如何初始化 SNV 记录的方法。 首先尝试读取、然后写入一些默认值。 下次引导时、您将从闪存读取数据。

    我还尝试了您的功能、它似乎也符合预期。 您可能应该在函数外部分配缓冲区以节省堆栈空间、并使用={0}而不是= 0进行初始化、否则。

    此致、
    Aslak