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.

[参考译文] CC2642R:如何使用 OAD 功能从 CC2642R 内部闪存读取/写入数据?

Guru**** 2589265 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1078468/cc2642r-how-to-read-write-data-from-to-cc2642r-internal-flash-with-oad-function

部件号:CC2642R
“Thread:sysconfigtest”中讨论的其他部件

大家好,

我使用 NVS 在 闪存中写入和读取一些数据,我使用了 simile_peripheral_加 载_offchip_CC26X2R1_LAUNCHXL_TIrtos_CCS 项目。

我发现 regionAttrs.regional Base 是0xFFFFFFFF, regionAttrs.sectorSize 是0x00001000,regionAttrs.regional Size 是0x00200000。 这些值与 以下 syscfg 不匹配。

我的系统配置:


TI_DRIVER_CONFIG.c:

#IF 定义(__TI_Compiler_version__)||定义(__clang__)

静态字符 flashBuf0[0x4000]__attribute__((Retain,noinit,location (0x48000)));
静态字符闪存单元 F1[0x4000]__attribute__((Retain,noinit,location (0x52000)));

#Elif defined(__IAR_SYSTEMS _ICC__)

__no_init 静态字符闪存 buf0[0x4000]@ 0x48000;
__no_init 静态字符闪存 buf1[0x4000]@ 0x52000;

#Elif Defined (__GNUC _)

__attribute__((部分(“.NVS”)))
静态字符闪存 buf0[0x4000];
__attribute__((部分(“.NVS”)))
静态字符闪存 BF1[0x4000];

#endif

NVSCC26XX_Object nvsCC26XX Objects[2];

Static const NVSCC26XX_HWAttrs nvsCC26x (静态连接) MDXHWAttrs[2]={
/* CONFIG_NVSIONNAL *

.regional Base =(void *) flashBuf0,
区域大小= 0x4000
},
/* CONFIG_NVS_0 *

.regional Base =(void *) flashbuf1,
区域大小= 0x4000
},
};


#include <ti/drivers/NVS/NVSSPI25X.h>

/*
* NVSSPI25X 外部 NVS 闪存区域定义
*

/*
*提供大小为的写入验证缓冲区
*指定的最大验证缓冲区大小
*

静态 uint8_t 验证 buf[64];

NVSSPI25X_Object nvsSPI25XObjects[1];

Static const NVSSPI25X_HWAttrs nvsSPI25 (静态连接 NVSSPI25X_HWAttrs nvsSPI25) XWAttrs[1]={
/* CONFIG_NVSEXTERNAL *

.regional BaseOffset = 0x0,
区域大小= 0x200000,
sectorSize = 0x1000,
verifyBuf = verifyBuf,
.verifyBubSize =64,
/* NVS 打开 SPI */
.spiHandle =空,
/* SPI 驱动程序索引*/
.spiIndex = CONFIG_SPI_0,
SpiBitRate = 4000000,
/* GPIO 驱动器引脚索引*/
.spCsnGpioIndex = CONFIG_GPI_0,
.statusPollDelayU =100
},
};

#define config_NVS_count 3.

const NVS_Config NVS_config[CONFIG_NVS_COUNT]={
/* CONFIG_NVSIONNAL *

fxnTablePtr =&NVSCC26XX_fxnTable,
.object =&nvsCC26XX 对象[0],
hwAttrs =&nvsCC26XHWAttrs[0],
},
/* CONFIG_NVS_0 *

fxnTablePtr =&NVSCC26XX_fxnTable,
.object =&nvsCC26XX 对象[1],
hwAttrs =&nvsCC26XHWAttrs[1],
},
/* CONFIG_NVSEXTERNAL *

fxnTablePtr =&NVSSPI25X_fxnTable,
.object =&nvsSPI25XObjects[0],
hwAttrs =&nvsSPI25 XHWAttrs[0],
},
};

const uint_least8_t config_NVSINTERNAL_const = CONFIG_NVSIONNAL;
const uint_least8_t config_NVSEXTERNAL_const = config_NVSEXTERNAL;
const uint_least8_t config_NVS_0_const = config_NVS_0;
const uint_least8_t NVS_count = config_NVS_count;

我是 TI-RTOS 的初学者。 有人可以帮帮我吗?

非常感谢。

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

    您好,

    感谢您的参与。

    我假设您正在尝试写入内部闪存。 我建议查看 这份文件

    [引用 userid="5136100" url=~ë/support/wireless-connectivity /蓝牙组/Bluetooth/f/Bluetooth-forum/1078468/cc2642r-hute-read-write-data-fron-fcc2642r-interne-flash-with -FFcapicity]我发现  区域属性0x0000.001000为 regionAttrs.sectorSize。 这些值与 以下 syscfg 不匹配。

    这些参数不正确,不起作用。 sysconfig 屏幕截图上显示的内容看起来更好。 但是,根据我的回答的第一部分,我不确定您是否需要执行此操作...

    我希望这将有所帮助,

    此致,

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

    您好,

    我 尝试使用 osal SNV ,但 它也不起作用。

    顺便提一下,我在项目中使用了 GapBondMgr。

    它是否可以将一些数据写入 CONFIG_NVSIONNAL 使用的内部闪存 (区域基础: 0x48000)?

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

    您好,

    是的,您可以在内部闪存中写入一些数据。 但是,请确保不要使用堆栈使用的 NVID。 有关  详细信息,请参阅文档。

    此致,

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

    您好,

    感谢您的建议。
    我将 OSAL SNV 示例复制 到我的项目中。 不管用。

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

    您好,

    [引用 userid="5136100" url="~ë/support/wireless-connectivity /蓝牙组/蓝牙/f/Bluetooth-forum/1078468/cc2642r-hut-to-read-write-data-from-to-cc2642r-interne-flash-with-load-function/3992982#3992982"引用无效]。

    请提供有关代码片段实施,所遵循的测试流程,所见结果等的详细信息。

    谢谢,此致,

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

    您好,

    代码为:

    #define BUF_LEN 4
    #define SNV_ID_APP 0x100
    #define SP_NVS_DEBUG         (TBM_ROW_APP + 10)
    uint8 buf[BUF_LEN] ={0,};
    static void SimplePeripheral_taskFxn(UArg a0, UArg a1)
    {
      // Initialize application
      SimplePeripheral_init();
      uint8 status = SUCCESS;
    
      status = osal_snv_read(SNV_ID_APP, BUF_LEN, (uint8 *)buf);
      if(status != SUCCESS)
      {
        Display_printf(dispHandle, 0, SP_NVS_DEBUG, "SNV READ FAIL: %d", status);
        //Write first time to initialize SNV ID
        osal_snv_write(SNV_ID_APP, BUF_LEN, (uint8 *)buf);
      }
    
      //Increment first element of array and write to SNV flash
      buf[0]++;
      status = osal_snv_write(SNV_ID_APP, BUF_LEN, (uint8 *)buf);
      if(status != SUCCESS)
      {
        Display_printf(dispHandle, 0, SP_NVS_DEBUG, "SNV WRITE FAIL: %d", status);
      }
      else
      {
        Display_printf(dispHandle, 0, SP_NVS_DEBUG, "Num of Resets: %d", buf[0]);
      }
    
      // Application main loop
      for (;;)
      {
      //...
      }
    }

    SYSCFG 是:

    发现 SimplePeripheral_taskFxn 未执行后,我使用了 CCS 调试模式和断点。

    但 SimplePeripheral_createTask  已执行。

    作为下面 的屏幕截图,您可以看到内存的区域基准0x48000不正确。

    谢谢,此致,

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

    您好,

    我感到惊讶的是,代码实际上会阻止设备创建任务。

    请您通过注释来验证您是否能够成功创建任务?

    此致,

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

    您好,

    经过几次尝试后 ,代码现在可以正常工作。

    请帮助我  如何确保数据写入 内部闪存中?

     在下面的屏幕截图中,它看起来不成功。

    谢谢,此致,

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

    您好,

    [引用 userid="5136100" url="~/support/wireless-connectivity /蓝牙-组/蓝牙/f/Bluetooth-论坛/1078468/cc2642r-hute-read-write-data-fer-fo-cc2642r-interne-flash-with -load 功能/3995289#3995289"[请  在我的 帮助下写入内部数据]

    我想一个简单的测试是验证读取的值与写入的值是否相同。

    使用内存浏览器时,请确保刷新视图(屏幕右侧的黄色按钮)。

    此致,

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

    你好, 克莱蒙特

    我 已经解决了这个问题。

    非常感谢您的帮助。

    此致,

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

    你好, 克莱蒙特

    我可以使用另一 个地区基础吗?