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.

[参考译文] CC2745R10-Q1:CC2755R10–尽管具有受保护的扇区配置、但在 CCS 程序加载期间擦除 NVS 闪存区域

Guru**** 2939240 points

Other Parts Discussed in Thread: CC2755R10, UNIFLASH, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1653652/cc2745r10-q1-cc2755r10-nvs-flash-regions-erased-during-ccs-program-load-despite-protected-sector-configuration

器件型号: CC2745R10-Q1
Thread 中讨论的其他器件: CC2755R10UNIFLASHSYSCONFIG

尊敬的 TI 团队:

通过 CCS 进行编程时、CC2755R10 器件上存在 NVS 数据持久性问题。

问题描述

我们使用 NVS 模块将持久数据存储在内部闪存中。 NVS 写入和读取操作可以正常工作、并且存储的数据会按预期在电源复位时持续存在。

但是、每当我们使用 Code Composer Studio (CCS) 对固件重新编程时、之前存储的 NVS 数据都会被擦除。 这种行为会导致开发阻塞、因为我们的应用依赖于在不同固件更新之间保留配置和证书数据。

NVS 闪存区域

以下闪存区域保留用于 NVS 存储:

大得多 地址范围 扇区
CONFIG_NVSINTERNAL 0xDE000–0xE0FFF 444–449
CONFIG_NVS_CSR 0xE1000–0xE17FF 450
CONFIG_NVS_CERT 0xE1800–0xE2FFF 451–453.
CONFIG_NVS_COMM 0xE3000–0xE4FFF 454–457

受保护扇区总范围:

444-457.

预期行为

在固件下载期间、NVS 区域应保持不变、因为这些扇区保留用于持久存储、不打算作为应用程序映像的一部分进行重新编程。

已应用 CCS 配置

根据提供的建议、我们按如下方式配置 CCS:

  1. 已打开“项目属性“。
  2. 导航至:
    Debug→Flash Settings。
  3. 启用:
    “程序加载期间跳过指定的扇区“。
  4. 已输入扇区范围:
    444-457.

随附所应用 CCS 配置的屏幕截图。

测试程序

  1. 对固件进行编程。
  2. 将数据写入 NVS 区域。
  3. 验证数据是否正确存储。
  4. 执行电源复位。
    • 数据仍然正确存在。
  5. 使用 CCS 对固件重新编程。
    • NVS 数据被擦除。
  6. 使用 UniFlash 对固件重新编程。
    • NVS 数据保持不变。

当前状态

即使在应用建议的 CCS 闪存设置并保护扇区 444-457 后、问题仍然存在。 通过 CCS 编程后、NVS 内容将丢失。

请帮助我们了解以下内容:

  • 是否需要其他 CCS 设置来保留这些扇区?
  • 链接器配置是否需要进行任何修改?
  • 尽管采用了跳过扇区配置、CCS 是否正在执行任何仍然可以擦除这些扇区的操作?
  • 在 CC2755R10 上下载固件期间保留 NVS 数据的任何推荐方法?

这一问题目前阻碍了我们的发展活动、因此我们非常希望得到任何指导。

谢谢你。

此致、

Ankur Singh
TRAK N TELL

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

    您好 Ankur、

    为了使闪存保护正常工作、需要在 SysConfig 中添加一些其他设置。

    在 SysConfig 中、依次转到“TI DEVICE“->“Device Configuration“->“Flash Protection Settings“。

    然后、您需要转到“Erase/Retain、Main Sector 256-511。
    您需要设置扇区 444-457 的位、结果应该是 0xFF800000。 说明如下:位 23(扇区 440-447)、位 24(扇区 448-455)和位 25(扇区 456-463)设置为 1、告诉系统在刷写期间保留这些扇区。
    我还附加了 SysConfig 设置的屏幕截图


    此致、
    Josh Alderson

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

    您好、Josh、

    感谢您的建议。

    我已按照建议配置了闪存保护设置:

    • 擦除/保留、主扇区 256-511 = 0xFF800000

    • CCS 闪存设置配置为在编程加载期间跳过扇区 444-457

    在重新构建工程并重新测试后、我仍然观察到只要通过 CCS 对固件进行编程、NVS 数据就会被擦除。

    数据在电源复位时可正确保留、并且在通过 UniFlash 编程时也会保留。 仅通过 CCS 下载应用程序时才会出现该问题。

    您能否告知是否需要配置任何其他 CCS 调试/编程设置、或者是否有办法验证 CCFG 保留设置在编程过程中是否正确应用?

    此致、
    Ankur Singh



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

    您好 Ankur、

    请确保重新编译工程、刷写工程并确保先写入 NVS 区域、然后再再次刷写以进行仔细检查。
    此外、请检查您的“闪存擦除“选项并确保还选中了“保留现有 CCFG 中指定的 MAIN 扇区“。
    我有一个工程可以使用 CCFG 设置和这些闪存设置、


    如果仍有问题、请同时发送您的 NVS 设置。

    此致、
    Josh Alderson

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

    您好、Josh、

    感谢您的指导—NVS 数据现在可以在程序加载过程中正确保存。

    根本的原因是我们生成的 ti_devices_config.cchipEraseRetain.mainSectors256_511 = 0xfc000000,这只保留了扇区 464-511,没有涵盖我们的 NVS 区域在扇区 444-457。 syscfg 源已设置为 0xFF800000 (保留扇区 440–511)、但工程尚未重建、因此生成的文件不同步。

    一旦我们重新编译工程以使用正确的值重新生成 CCFG、并结合启用 “保留现有 CCFG 中指定的主要扇区“ 在程序加载期间跳过扇区 444–457、所有内容均按预期工作。

    非常感谢您提供的清晰步骤—它为我们指明了正确的方向。

    此致、Ankur Singh