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:有关 OAD 双映像工程的问题

Guru**** 2867080 points

Other Parts Discussed in Thread: UNIFLASH, SYSCONFIG, CC2745R10-Q1

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1635233/cc2745r10-q1-questions-about-oad-dual-image-project

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

尊敬的 TI 支持团队:

我目前正在使用 SDK 示例实现 OAD 功能  basic_ble_oad_dual_image并通过执行 OAD SimpleLink Connect 移动应用程序。  

我使用该应用成功完成了 OAD 过程。 之后、我使用 UniFlash 检查闪存内容。  
797841.jpg

但是、我观察到辅助插槽不包含预期的图像数据。 相反、映像看起来位于闪存地址 0x72000 、而我配置的辅助插槽地址是 0x38000

闪存地址 0x72000

以下是我的配置:
辅助时隙的 SysConfig 设置  

NVS 设置

我有以下问题:  
为什么映像存储在闪存地址中 0x72000 而不是 0x38000 ?  
2.目的是什么 CONFIG_NVSINTERNAL1 它是什么呢?  

您能否提供有关此行为的指导、并建议如何正确配置和验证 OAD 过程?

感谢您的支持。

此致、  
重量

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

    主时隙的 SysConfig 设置  

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

    您好! 很抱歉晚才回复。

    您能给我分享用于 MCUBoot 工程的 SysConfig 映像吗?

    我怀疑问题来自 MCUBoot 工程中的升级模式。 默认情况下、导入此工程时会将其配置为片上 OAD、因此使用 XIP 升级模式。

    使用双映像时、辅助插槽将用作下载区域。 映像下载完成后、器件将重新启动、MCUBoot 引导加载程序将用辅助插槽/下载映像的内容覆盖第一个插槽/活动映像。 因此、在双映像模式下、MCUBoot 工程的升级模式应该是“覆盖“、就像我的屏幕截图中一样。

    您能否向我发送类似的屏幕截图并检查您的升级模式是否覆盖?

    此致、
    Lea

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

    您好 Lea、

    该文章指出 MCUboot 工程未用于 CC27xx 器件上的双映像工程。

    LP-EM-CC2745R10-Q1:如何在 CC2745R10 中使用 OAD -蓝牙论坛 — BluetoothRegistered︎ — TI E2E 支持论坛

    双映像工程中的 README.html 也显示了相同的内容。



    此致、
    Weiting  

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

    你好、廖先生!

    正确、CC27xx 上不需要 MCUBoot 工程。 我只在 CC23xx 上完成了 OAD、我认为它的行为完全相同、这是我的错。

    这时会发现 SysConfig 中描述的主时隙和辅助时隙被写入器件的 SCFG 中。

    安全启动仅使用这些值来确定应在何处查找有效映像。

    确定地址下载位置的是 CONFIG_NVSINTERNAL1 NVS 指针。 此指针在 C:\ti\simplelink_lowpower_f3_SDK_9_14_02_16\source\ti\common\cc26xx\flash_interface\intern\flash_interface_int_rtos_NVS.c 文件中使用、以打开 NVS 句柄。 然后、服务通过调用 oadImgBlockWrite -> Sws Update_Write ->  writeFlashPg -> NVS_write 来使用此 NVS 句柄 。

    因此、在地址 0x72000 处下载映像的原因是 NVS 指针 CONFIG_NVSINTERNAL1 设置为该地址。 如果要将下载地址更改为 0x38000、则需要将其更改为指向 0x38000。

    请注意、由于您使用 XIP 作为升级模式而不是覆盖、因此如果尝试覆盖主插槽、则需要将此值设置为 0x0。

    此致、
    Lea

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

    尊敬的 Lea:

    我仍然不完全了解 XIP 机制。

    我想使用 A/B 分区机制实现 OAD。 您可以告知应该应用哪些 SysConfig 设置吗?

    此外、您能否提供有关如何正确实施支持 XIP 模式的双映像解决方案的更多详细信息?


    感谢您的支持。

    此致、

    重量

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

    您好!

    在当前工程中唯一需要更改的是 SysConfig 中的 CONFIG_NVSINTERNAL1 变量。 它应该指向闪存的辅助插槽(如果我正确理解了存储器映射,则为 0x38000)。

    MCUBoot: https://docs.mcuboot.com/design.html#direct-xip 的文档中对 XIP 机制进行了最佳说明

    使用覆盖时、只能执行主插槽中的应用程序。 辅助插槽用作新应用程序的“下载空间“、然后复制到主插槽上、擦除过程中的旧映像。

    使用 XIP 时、辅助插槽不仅是一个“下载空间“、还可以直接从辅助插槽执行应用。 但是、这会增加一些复杂性、因为您需要 2 个项目、一个用于主插槽、一个用于辅助插槽。 主插槽的项目是您当前拥有的常规项目。 在辅助插槽的项目中、需要更改 2 项内容才能从辅助插槽执行应用程序:  
    -链接器脚本
    - CONFIG_NVSINTERNAL1 指针

    需要修改链接器脚本 (basic_ble_oad_dual_image_LP_EM_CC2745R10-Q1_freertos_ticlang\cc27xx_freertos.cmd)、才能将应用程序的功能放置在正确的地址处。 默认情况下、 NVS_BASE、 NVS_SIZE、 FLASH_BASE 和 FLASH_SIZE 使用 SysConfig 在 ti_utils_build_linker.cmd.genmap 中生成的变量进行定义。 您需要更改此值以匹配辅助插槽的值

     CONFIG_NVSINTERNAL1 指针是 OAD 应用程序将下载新接收到的应用程序的位置。 默认情况下、它指向辅助插槽。 但是、在辅助插槽项目中、这需要指向主插槽、否则应用程序会在下载过程中覆盖自身、从而导致问题。

    此致、
    Lea