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.

[参考译文] CC1312R7:通过串行端口进行更新、修改 BIM 或修改引导加载程序。

Guru**** 2481465 points
Other Parts Discussed in Thread: CC1125, CC1312R7, SYSCONFIG, UNIFLASH

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1276823/cc1312r7-update-throught-serial-port-modify-bim-or-modify-bootloader

器件型号:CC1312R7
主题中讨论的其他器件:CC1125SysConfigUNIFLASH

你好

我在将专有射频´m 从 MSP430 + CC1125移植到 CC1312的过程中、在这种旧系统中、器件使用了引导加载程序密码、以防其读取和写入闪存。

我认为 CC1312的引导加载程序中具有类似的功能、但我感到惊讶的是、如果您在 cfg 中保留启用串行引导加载程序 以进行进一步更新、它还支持闪存读取、而使器件代码不受保护。

此问题有两种可能的解决方案:编写我自己的引导加载程序、该引导加载程序使用密码模拟旧系统、或者禁用读取。

我想´m 的另一个更复杂的问题是 将 带有 OAD 代码的 BIM 移植到 UART、这样可以保护当前程序(禁用引导加载程序访问)、并且当前程序可以将 新程序下载并写入闪存(外部或内部)、 检查新程序(CRC、安全启动等)。 这甚至可能允许对程序进行隐式处理、以便当前程序使用内部密钥对其进行解码。 不是客户能够做任何与该 bin 文件,即使你把它给他在远程支持。  它还将为将来通过无线电传输更新的真正 OAD 奠定基础。

我的建议是:

修改 BIM 和 OAD 以通过串行工作是否可行?

哪一个更容易实现?

我认为从长远来看、这两者都可以实现、但 BIM 的移植听上去比修改引导加载程序困难得多、但它是正确的、将允许更多的可能性。

另外我得说的是、如果相关的话、新计划会使用 NVS 将程序数据存储在某些领域。

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

    Javier、您好!

    今天、我再次向您提供一些答案。

    此致、

    亚瑟

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

    仔细阅读完您的要求后、我认为您应该使用我们的 MCUBOOT 示例作为起点、因为 CC1312R7使您有机会这样做。

    原因在于、它已经附带图像签名功能和加密(需要进行一些移植工作)。 它在嵌入式方面也有些标准、因此您可以获得更多在线支持。

    从这里开始、您可以通过一些 UART 传输扩展 mcuboot_app 应用、并像已经执行 NVS 驱动程序一样使用将该数据存储到正确的插槽。

    此致。

    亚瑟

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

    感谢您 Arthur、在使用此端口 Im 进行一些操作后、发现一些问题:

    • 有一些用于日志记录的函数、但我不知道如何与 UART 或 RTT 一起使用它们。
    • 我用 code composer 刷写 MCU 引导基本事件擦除所有闪存、然后使用 mcuboot_BLINK 在0x56000内刷写器件(我认为这是示例应用项目)。 但它似乎不起作用。

    是否有任何教程或指南可用于开始使用此项目?

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

    Javier、您好!

    在项目的 README.md 顶部、我们有一些堆栈的用户指南: https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/docs/ble5stack/ble_user_guide/html/oad-mcuboot/mcuboot.html#mcuboot-overview

    对于日志记录、您需要禁用 exclude_trace 符号、例如、在工程设置中将"x"附加到该符号中:

    之后、您需要从 CCS 中复制 iTM_private、trace.c 和 trace.h 文件。 sdk_path\source\third_party\mcuboot\ti\source\mcuboot_app\mcuboot_config mcuboot_config 文件夹 mcuboot_app 默认项目。

    最后、将电源驱动程序添加到 SysConfig:

    您在地址0x56000处刷写哪个文件? 它应该是在 mcuboot_闪烁 post-build 步骤。

    此致、

    亚瑟

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

    此外、您可能会收到有关大小的编译器错误:

    mcuboot_cc13x2x7_cc26x2x7.cmd"、第87行:错误#10099-D:程序将无法装入可用内存、或该段包含的调用站点需要无法为此段生成的 trampoline。 对齐放置在段".text"大小0x4694中失败。  可用存储器范围:

    在这种情况下、您必须编辑 mcuboot_cc13x2x7_cc26x2x7.cmd 和修改 #define FLASH_size 0x4000 另一个值、例如0x5000。

    此致、

    亚瑟

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

    做这种改变后,发生了一些奇怪的事情,我能够使程序编译没有问题,并在内存范围内,但我得到下一个错误,同时尝试使它运行:

    Cortex_M4_0:加载程序:程序的一个或多个部分落入无法写入的存储器区域。 这些区域实际上不会写入目标。 检查链接器配置和/或存储器映射。

    这很奇怪、因为我只更改了闪存、我认为它完全位于闪存空间内。

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

    好的,这是因为它是内存不足,只是扩大扇区是不是必需的,上限它的固定(闪存大小),所以如果有人不得不去考虑类似的东西:

    1-减小初级或次级扇区大小,并相应地更改每个扇区的起始地址。

    在本例中、我的计算方式如下:

    第1节 十六进制 12月 第二名1 十六进制 12月 启动加载程序 十六进制 12月
    基础 0 0 基础 56000 352256 基础 AA000 696320
    尺寸 56000 352256 尺寸 54000 344064 尺寸 6000 24576
    结束 56000 352256 结束 AA000 696320 结束 B0000 720896
    最大值 12月 十六进制
    704 720896 B0000

    更改计划中以及 flash_map_backend.h 中的扇区图

    编辑:

    同样对于 CC1312R7、LPI 必须更改:

    1 - 在 trace.c 中将 ITM_3000000连接到 ITM_115200

    2 - IOCPortConfigureSet (IOID_13、IOC_PORT_MCU_SWV、IOC_STD_OUTPUT)更改为 IOCPortConfigureSet (IOID_18、IOC_PORT_MCU_SWV、IOC_STD_OUTPUT);  在 trace.c 中

    并将 CCXML 中的目标配置的连接更改为2引脚高级模式、aux com 是 UART 端口。它们将打开 Tools->Code Analysis->Event Analysis 并配置消息记录。

    谢谢、我将打开一个新主题、进一步提问以避免偏离该主题、


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

    Javier、您好!

    观察 trace.c 可知、我们似乎将输出 DIO 配置为 IOID_13、即连接到 BTN-2的 LP-CC1312-R7上。

    让我们解决这个问题、而是将其输出到 DIO3 ,连接到 Launchpad 的"TXD"接头,从而连接到 LP-XDS110-RXD 的 ET。

    然后、在同一个文件中、我们会看到速度配置为3000000位/秒(ITM_3000000)。

    利用此信息和此修复、我们现在可以从 mcuboo T.

    此致、

    亚瑟

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

    好的、现在在完成更改后、主引导加载程序会根据此更改按预期工作。

    现在、Im 在将扇区大小更改为0x55000的过程中、如果我将引导加载程序的闪存 map.h 更改为:

        #define BOOTLOADER_BASE_ADDRESS             0x000AA000
        #define BOOT_BOOTLOADER_SIZE                0x5F50//(0x80) removed to make space?
    
        #define BOOT_PRIMARY_1_BASE_ADDRESS         0x00000000
        #define BOOT_PRIMARY_1_SIZE                 0x00055000
    
        #define BOOT_SECONDARY_1_BASE_ADDRESS       0x00055000
        #define BOOT_SECONDARY_1_SIZE               0x00055000

    在 Blink 项目的进程后步骤中、我更改了 步骤:

    符号--header-size 0x80 --align 4 --slot-size 0x56000 --version 1.0.0 --pad-header --pad   

    符号--header-size 0x80 --align 4 --slot-size 0x55000 --version 1.0.0 --pad-header --pad  

    并将.cmd 更改为;

     

    #define FLASH_BASE              0x00000080
    #define FLASH_SIZE              0x55000
    #define RAM_BASE                0x20000000
    #define RAM_SIZE                0x24000
    #define GPRAM_BASE              0x11000000
    #define GPRAM_SIZE              0x2000

    然后、我按照与此示例相同的方式、使用 code composer 擦除闪存、然后在 uniflash 中刷写0x55000中的闪烁方式、但引导加载程序在刷写闪烁后无法启动、 如果未刷写 BLINK、则引导加载程序将正常工作、并在完成之前的更改后按预期输出数据。

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

    嗯、经过几次尝试后、我使它工作、但对于一个应用来说、这是一种非常怪异而不实用的方法:

    首先、我选择了擦除所有未受保护的扇区和调试 MCUBoot 基本程序、正常闪烁和按预期调试。

    然后、使用 Uniflash、我在0x55000中写入闪烁程序、但没有任何反应、Im 无法使其工作。

    但如果我调试闪烁程序(选择仅写入程序)、并将其写入从0x0000开始一直到向上的扇区中、则一切开始工作。

    [39m[info][mcb ]: mcuboot_app
    [39m[info][mcb ]:主插槽:未找到图像
    [39m[info][mcb ]:次要插槽:版本=1.0.0+0
    [39m[INFO][MCB ]:从次插槽启动映像
    [39m[info][mcb ]:bootRsp:slot = 0、offset = 55000、ver=1.0.0.0
    [39m[INFO][MCB ]:启动主应用程序
    [39m[INFO_[MCB ]:图像开始偏移:0x55000
    [39m[info][MCB ]:向量表起始地址:0x55080
    [00][39m[info][app ]: Blink_app HDR=0
    [39m[info][app ]: Blink_app ver=255.255.65535。-1[ÿ

    如果我首先写入闪烁程序、然后使用 code composer 调试引导加载程序、引导加载程序会检测到该程序、但无法启动:

    [00][1B][39m[info][MCB ]: mcuboot_app
    [1b][39m[INFO][MCB ]:主插槽:未找到图像
    [1b][39m[info][MCB ]:次要插槽:版本=1.0.0+0
    [1b][39m[INFO][MCB ]:从次插槽启动映像
    [1B][39m[info][MCB ]:bootRsp:slot = 0、offset = 55000、ver=1.0.0.0
    [1b][39m[INFO][MCB ]:正在启动主应用程序
    [1B][39m[INFO][MCB ]:图像起始偏移:0x55000
    [1B][39m[INFO][MCB ]:向量表起始地址:0x55080

    有什么想法吗?显然、我需要一种可靠的方法来重置和启动程序、

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

    Javier、您好!

    如果您已更新插槽大小、则还需要在的 post-build 步骤中更新 imgtool post-build 命令。 mcuboot_闪烁 项目:

    在本例中、它很可能是0x55000

    此致、

    亚瑟

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

    已如上一帖子中所述完成。

    在 Blink 项目的进程后步骤中、我更改了 步骤:

    符号--header-size 0x80 --align 4 --slot-size 0x56000 --version 1.0.0 --pad-header --pad   

    符号--header-size 0x80 --align 4 --slot-size 0x55000 --version 1.0.0 --pad-header --pad  

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

     ´m、我能够使它正常工作、将闪存矢量表的地址更改为0x000AA000、现在引导加载程序可以正常工作、但我无法使它在次级扇区中正常工作。

    这是日志如果映像被写入辅助扇区、引导加载程序会检测到该映像、我想尝试将其挂起:

    [00][00][1B][39m[INFO][MCB ]: mcuboot_app[1B][0m
    [1B][39m[INFO][MCB ]: Primary slot: Image not found[1B][0m
    [1B][39m[INFO][MCB ]: Secondary slot: version=1.0.0+0[1B][0m
    [1B][39m[INFO][MCB ]: Booting image from the secondary slot[1B][0m
    [1B][39m[INFO][MCB ]: bootRsp: slot = 0, offset = 55000, ver=1.0.0.0[1B][0m
    [1B][39m[INFO][MCB ]: Starting Main Application[1B][0m
    [1B][39m[INFO][MCB ]:   Image Start Offset: 0x55000[1B][0m
    [1B][39m[INFO][MCB ]:   Vector Table Start Address: 0x55080[1B][0m

    如果主扇区输出中写入了相同的.bin 映像、则此日志和功能正常、显示闪烁:

    [00][00][1B][39m[INFO][MCB ]: mcuboot_app[1B][0m
    [1B][39m[INFO][MCB ]: Primary   slot: version=1.0.0+0[1B][0m
    [1B][39m[INFO][MCB ]: Secondary slot: Image not found[1B][0m
    [1B][39m[INFO][MCB ]: Booting image from the primary slot[1B][0m
    [1B][39m[INFO][MCB ]: bootRsp: slot = 0, offset = 0, ver=1.0.0.0[1B][0m
    [1B][39m[INFO][MCB ]: Starting Main Application[1B][0m
    [1B][39m[INFO][MCB ]:   Image Start Offset: 0x0[1B][0m
    [1B][39m[INFO][MCB ]:   Vector Table Start Address: 0x80[1B][0m
    [00][1B][39m[INFO][APP ]: blinky_app hdr=0[1B][0m
    [1B][39m[INFO][APP ]: blinky_app ver=1.0.0.0[1B][ÿ

    有什么想法吗?,我想我会是与内存映射或标头相关的东西,但它奇怪,因为装填器检测到图像标头只是正常的。

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

    ´ve 文档后、我能够在次级扇区中运行此映像、将.cmd 配置更改为 如下:

    #define FLASH_BASE              0x00050080
    #define FLASH_SIZE              0x50000-0x080
    #define RAM_BASE                0x20000000
    #define RAM_SIZE                0x24000
    #define GPRAM_BASE              0x11000000
    #define GPRAM_SIZE              0x2000
    
    /* Export the header address to the blinky app */
    
    MCUBOOT_HDR_BASE = 0x00050080;

    现在、让我困惑的是为什么当.cmd config 指向主扇区(0x00)中的闪存时、该示例会将其刷写到0x56000地址中。

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

    Javier、您好!

    在某处必须有一个解释。 今天晚些时候我会回来与您讨论这个问题。

    此致、

    亚瑟

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

    有新消息?