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/CC2640R2F:在内部闪存中写入和读取

Guru**** 2562120 points
Other Parts Discussed in Thread: CC2640R2F

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/585327/rtos-cc2640r2f-writing-and-reading-in-internal-flash

部件号:CC2640R2F

工具/软件:TI-RTOS

我已开始使用CC2640r2F的SimpleLink示例,并在main函数中添加了代码以写入内部闪存。

目的是在闪存中有一个扇区,以存储应用程序的配置/参数。

为了进行测试,我在main()中添加了以下代码行

UINT8_t数组[]={1,2,3,4,5};

uINT8_t array2[10];
HalFlashErase( 29);
HalFlashWrite( 0x1D000,数组,5);
HalFlashRead(29, 0, array2, 10);

数据读回是指在我开始擦除之前闪存中的数据。 即使我添加了一个非常长的循环,超过30秒,在写入之后,它仍然是读取的值。

如果我重置CPU或让程序运行,闪存中的值将被更新。

我的问题是,它有一个缓存要做的事情,需要刷新它或一些事情。

请不要告诉我使用osal_SNV_READ或WRITE,因为如果不将任务注册到iCall,这似乎是不可能的,而且当我要读取配置时,没有任务启动。

此致 Ørjan

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

    我们建议使用OSAL SNV API将NV数据存储到闪存。 如果不需要,我建议查看调用底层HalFlashX API的SNV源代码。

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

    JXS,您好!

    感谢您的快速响应。

    也许不是我想要的答案,因为我们在应用程序中希望在启动任何线程之前读取参数。 但在我的头碰到键盘几次之后,我终于找到了上述代码不能按预期工作的原因。

    我怀疑是缓存问题。 因此,通过添加几行代码,它可以完美地工作。

    UINT8_t数组[]={1,2,3,4,5};
    uINT8_t array2[10];

    VIMSModeSafeSet (VIMS_BASE,VIMS_MODE_DISABLED,1);
    VIMSKineBufDisable(VIMS_base);

    HalFlashErase( 29);
    HalFlashWrite( 0x1D000,数组,5);

    VIMSKineBufEnable(VIMS_base);
    VIMSModeSafeSet (VIMS_BASE,VIMS_MODE_ENABLED,1);

    HalFlashRead(29, 0, array2, 10);

    请告诉我 这是否完全错误或可能有一些不必要的副作用。 因为我必须重新设计并使用osal_SNV_READ/WRITE。

    此致 Ørjan

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

    我只能相信您能够使用上述示例代码来正确实施您的代码! 这对我来说是恰当的。 感谢您让我们知道它在您的一边工作。

    我唯一建议的是,如果您使用的是高速缓存作为RAM (GPRAM)配置(这不是默认设置),那么您可能需要在禁用/启用高速缓存之前检查高速缓存状态。

    祝你一切顺利