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.

[参考译文] CC1354P10:需要帮助:在 TI RTOS 上 MCUBoot 样片无法正常工作

Guru**** 2347070 points
Other Parts Discussed in Thread: LP-XDS110, CC1354P10, UNIFLASH, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1485295/cc1354p10-assistance-needed-mcuboot-samples-not-working-correctly-on-ti-rtos

器件型号:CC1354P10
主题中讨论的其他器件: LP-XDS110UNIFLASHSysConfig

工具与软件:

尊敬的 TI 社区:

我不熟悉 TI RTOS、并尝试让 MCUBoot 样本运行、但我会遇到我无法解决的问题。 如果能提供任何指导或故障排除步骤来帮助我使样片正常工作、我将不胜感激。

执行  该设计的链接

  • 电路板:  具有 LP-XDS110编程器的 CC1354P10
  • SDK 版本:  simplelink_cc13xx_cc26xx_sdk_8_30_01_01
  • 开发环境:  带有 CCS Studio  20.0.2.5__1.6.2的 Windows 11 (我没有使用 ccs_20.1.0.00006_win、因为它需要更新我的 XDS110 Programmer、导致电路板无法刷写)

设置说明:

 我在 MCUboot 中启用了跟踪(mcuboot_LP_EM_CC1354P10_1_nortos_ticlang)。

  • 为此、我将 trace.c、trace.h 和 itm_private.h 复制到本地项目。
  • 我 在 mcuboot.syscfg 中启用了功率 TI 驱动程序。
  • 我将升级模式更改为  覆盖
  • 我按如下方式编辑了 trace.c:
      ITM_CONFIG ITM_CONFIG =
      {
       48000000
       ITM_115200   //以前是 ITM_3000000  
      };
  • 我按如下方式更改了映像地址、以便适应由于跟踪而增加的引导加载程序大小:
    • 引导加载程序基址:0x00000000;引导加载程序大小:0x00008000
    • 主映像基址:0x00008000主映像 大小:0x0002B000
    • 辅助映像基址:0x00033000辅助 映像 大小:0x0002B000

MCU Boot_Blinky 说明:

编译后处理步骤:

${CG_TOOL_ROOT}/bin/tiarmhex -order MS --memwidth=8 --romwidth=8 --Intel -o ${BuildArtifactFileBaseName}.hex ${BuildArtifactFileBaseName}
${CG_TOOL_ROOT}/bin/tiarmobjcopy -o 二进制文件${BuildArtifactFileBaseName}.out ${BuildArtifactFileBaseName}-noheader.bin --remove-section=.ccfg


${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/common/mcuboot/imgtool 符号--HEADER-SIZE 0x80 --ALIGN 4 --SLOT-SIZE 0x2b000 --VERSION 1.0.0 --PAD-HEADER --PAD --KEY -noheader.bin ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}${BuildFileBasefactName}/source/third_party/mcuboot/root-ec-p256.pem


${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/common/mcuboot/imgtool  -noheader.bin .p2.bin 符号--HEADER-SIZE 0x80 --ALIGN 4 --SLOT-SIZE 0x2b000 --VERSION 2.0.0 --PAD-HEADER --PAD --KEY ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}${FileBuildFileFileFileName}/source/third_party/mcuboot/root-ec-p256.pem

我更新了  mcuboot_blinky_cc13x4_cc26x4.cmd  如下所示、为匹配引导加载程序大小从0x6000增加到0x8000:

#define FLASH_BASE  0x8080
MCUBOOT_HDR_BASE = 0x8000
重要说明:即使我将 FLASH_BASE 更改为0x9000、该应用程序也会工作一次、在电路板复位时失败。

问题:

  • 当我擦除整个闪存并仅对 MCUboot_blinky 或 OAD_samples 进行编程时、第一个 MCUboot 分区是空的、但样本仍在运行。 为什么此应用程序仍在运行?
  • 此外、为什么应用程序在电路板复位后始终无法运行。 即使 MCUboot 已刷写并正确寻址(我认为是正确的、我可能会被误码)、它也无法运行。
  • 使用 Upgrade_Mode =覆盖时、我获得以下输出:

[INFO][MCB ]:mcuboot_app
[err ][mcb ]:assert: c:/ti/simplelink_cc13xx_cc26xx_sdk_8_30_01_01/source/third_party/mcuboot/boot/ti/source/mcuboot_app/flash_map_backend/f
[err ][mcb ]:assert: c:/ti/simplelink_cc13xx_cc26xx_sdk_8_30_01_01/source/third_party/mcuboot/boot/ti/source/mcuboot_app/flash_map_backend/f
[INFO][MCB ]:图像索引:0、交换类型:无
[INFO][MCB ]:bootRsp:SLOT = 0、OFFSET = 8000、VER=1.0.0.0
[INFO][MCB ]:正在启动主应用程序
[INFO][MCB ]:图像起始偏移:0x8000
[INFO][MCB ]:矢量表起始地址:0x8100

  • 当使用 Upgrade_Mode = XIP 时、我获得以下输出:

[INFO][MCB ]:mcuboot_app
[INFO][MCB ]:主插槽:VERSION=1.0.0+0
[INFO][MCB ]:未找到图像
[INFO][MCB ]:从主插槽引导映像
[INFO][MCB ]:bootRsp:SLOT = 0、OFFSET = 8000、VER=1.0.0.0
[INFO][MCB ]:正在启动主应用程序
[INFO][MCB ]:图像起始偏移:0x8000
[INFO][MCB ]:矢量表起始地址:0x8100

  • 为什么覆盖会产生断言错误、而 XIP 不会产生断言错误?

总结:

请有人提供一些见解、说明如何使用 TI RTOS 开始使用 MCUBoot。 在此阶段、我只想加载 MCUBoot、在 BOARD_RESET 时仍加载闪烁样本。

任何援助都将受到真正的赞赏。

此致

Brenton

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

    尊敬的 Brenton:

    感谢您发送编修。 我将尝试回答您的问题。

    • 当我擦除整个闪存并仅对 MCUboot_blinky 或 OAD_samples 进行编程时、第一个 MCUboot 分区是空的、但样本仍在运行。 为什么此应用程序仍在运行?

    我不确定 OAD_SAMPLES 是什么意思。 您是指 OAD 示例项目吗? 是片上还是片外 OAD?

    您在帖子中没有提到它、但将闪存分区到主要和辅助插槽的主要目的是使用 TrustZone。 您将把安全映像放在主插槽中、将非安全映像放在次插槽中。

    有关 TrustZone 的更多信息、请访问: https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_8_30_01_01/docs/ble5stack/ble_user_guide/html/security-tfm/tfm_architecture.html

    SimpleLink Academy 实验、其中介绍了如何在 TrustZone 中使用 MCUBoot:  

    https://dev.ti.com/tirex/explore/node?node=A__AUd0E-3BcdL8ziAQwp75QQ__com.ti.SIMPLELINK_ACADEMY_CC13XX_CC26XX_SDK__AfkT0vQ__LATEST 

    • 此外、为什么应用程序在电路板复位后始终无法运行。 即使 MCUboot 已刷写并正确寻址(我认为是正确的、我可能会被误码)、它也无法运行。

    为了使用 MCUBoot 运行您的示例、需要一个有效的 OAD 映像标头。 通过 oad_image_tool (在 SDK 的工具文件夹中)运行模型可实现此目标。 对于启用 OAD 的示例、这会作为编译后步骤自动完成、您可以在示例输出文件夹中找到生成的二进制文件。

    • 为什么覆盖会产生断言错误、而 XIP 不会产生断言错误?

    将闪存分为主要和辅助插槽时、仅支持 XIP。

    谢谢、

    Marie

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

    尊敬的 Marie:

    感谢您的答复。

    • 我之前提到的是 OAD_offchip 示例。
    • 我刚刚取得了一些进展、让 MCUBoot 正常工作并读取应用程序代码。 为了使其正常工作、我必须通过 UniFlash 刷写签名的映像。 我还注意到、当我通过 CCS_Studio 刷写 MCU Boot_Blinky 样本时、MCUBoot 幻数(带符号的标头和报尾)缺失。 这就是 MCUBoot 不适合我的原因。

    其他问题

    • 编译后处理步骤如下:
      ${CG_TOOL_ROOT}/bin/tiarmobjcopy ${BuildArtifactFileBaseName}.out --output-target 二进制文件${BuildArtifactFileBaseName}_noheader.bin --remove-section=.ccfg

          ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/common/mcuboot/imgtool 符号--header-size 0x100 --align 4 --slot-size          0xCC000 --version 1.0.0 --pad-header --key ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/source/third_party/mcuboot/root-         EC-P256.pem ${BuildArtifactFileBaseName}_noheader.bin ${BuildArtifactFileBaseName}_v1.bin

          是否可以让 CCS_Studio 刷写签名的映像而不是常规的.bin 文件?

    • 我目前不使用 TrustZone。 我正在尝试运行" basic_ble_oad_offchip_LP_EM_CC1354P10_1_tirtos7_ticlang"  Sample。
      • 引导加载程序基址:0x00000000;       引导加载程序大小:0x00006000
      • 主映像基址:0x00006000    主映像 大小:0x000F6000
      • 辅助映像基址:0x00000000 辅助 映像 大小:0x000F6000
      • 使能 external_flash 和已启用 覆盖 MODE
      • ${CG_TOOL_ROOT}/bin/tiarmobjcopy ${BuildArtifactFileBaseName}.out --output-target 二进制文件${BuildArtifactFileBaseName}_noheader.bin --remove-section=.ccfg
      • ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/common/mcuboot/imgtool _noheader.bin _v1.bin 符号--HEADER-SIZE 0x100 --ALIGN 4 --SLOT-SIZE 0xF6000 --VERSION 1.0.0 --PAD-HEADER --PAD --KEY ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}${BuildBaseFileName}/source/third_party/mcuboot/root-ec-p256.pem}
      • ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/common/mcuboot/imgtool _noheader.bin _v2.bin 符号--HEADER-SIZE 0x100 --ALIGN 4 --SLOT-SIZE 0xF6000 --VERSION 2.0.0 --PAD-HEADER --PAD --KEY ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}${BuildBaseFileName}/source/third_party/mcuboot/root-ec-p256.pem}

                使用带有上述配置的示例时、我会从 simplelink BLE 应用程序加载生成的_v2.bin 文件、然后成功加载映像                刷写到外部闪存;不过、它会重新启动到相同的旧_v1.bin 中。 我通过比较验证了外部闪存是否正确                  带有签名的_v2.bin 映像的外部闪存的二进制文件。 为什么 MCUboot 无法从外部闪存自动加载?

    • 在 CCS_Studio 上、选择 XIP 模式时、无法启用外部闪存。 使用外部闪存是否支持 XIP?

    总结

    我正在尝试使 MCUBoot 使用 " basic_ble_oad_offchip_LP_EM_CC1354P10_1_tirtos7_ticlang"  Sample。 我需要有关如何完成此任务的建议。 我在上面附上了我的环境设置、我认为这些设置是正确的、我不知道为什么 MCUBoot 不会从外部闪存(Slot1)的_v2.bin 映像自动引导。

    任何援助都将受到真正的赞赏。

    此致、

    Brenton

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    • 我还向外部闪存写入了一个 mcuboot_signed 闪烁。 我通过 flash-rover 和 uniflash 验证外部闪存包含准确的二进制文件。
    • 即使 slot0为空、mcuboot 也无法引导至外部闪存。
    • 我通过 FLASH-ROVER 提取了一个二进制文件、并提取了外部闪存、然后通过 uniflash 直接刷写到 slot0、这样就没有问题。
    • 出于某种原因、mcuboot 完全忽略外部闪存。

    有人知道如何将 mcuboot 链接到外部闪存吗?

    我已通过 syscfg 启用外部闪存、而 secondary_image 配置如下:

    • BASE_ADDRESS:0x00000000;IMAGE_SIZE:0x000F6000
    • 覆盖模式
    • Blinky 样本被设置为编译后大小0xF6000、并被填充。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我设法在 TI CC1354p10开发套件上实现了无线更新。

    默认情况下、内部闪存的最大扇区数限制为250。 这必须与扇区大小同时进行调整。
    我列出了以下过程、以便为使用 BLE OAD_Offchip 示例的人员将来提供参考。

    • 将引导加载程序大小调整为 0x00008000 (增加以允许向 mcuboot 添加跟踪)
    • 在 mcuboot->Predefined Symbols 的属性中、将 exclude_trace 更改为 xEXCLUDE_trace 等。
    • 按如下所示调整 mcuboot SysConfig 中的时隙地址:
      • 主时基:0x00008000;    主时钟:0xF4000
      • 次要基地址:0x00000000; 主基地址:0xF4000
    • 对于 BLE_OAD_OffChip 示例、调整 SysConfig->NVS。 将扇区大小更改为0x800
    • 在 cmd 文件中、确保#define MCUBOOT_SIZE   0x8000、  #define PAGE_SIZE    0x800
    • 在"properties"(属性)->"Build"->"Steps"(构建)->"Steps"(步骤)中、将 --slot-size 0xF4000更改
    • 在"Properties"-> Arm Compiler"->"Predefined Symbols"->"APP_HDR_ADDR=0x8000"中   
    • 在"Properties"中->"Arm Compiler"->"Arm   Linker"->"--define=APP_HDR_ADDR=0x8000"中
    • C:\ti\simplelink_cc13xx_cc26xx_sdk_8_30_01_01\source\ti\common\flash\no_rtos\extFlash\ext_flash.h
      更改了#define EXT_FLASH_PAGE_SIZE 2080//4096
    • C:\ti\simplelink_cc13xx_cc26xx_sdk_8_30_01_01\source\ti\common\.meta\temples\mcuboot_config.h.xdt
      #define MCUBOOT_MAX_IMG_SECTIONS 488将从250更改为488
    • 更改 ti/bleapp/util/sw_update/sw_update.c:#define MCUBOOT_SIZE 0x8000

    上述更改将允许 BLE_OAD_Offchip 样本在启用跟踪的 CC1354P10上工作。