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.

[参考译文] CC2651R3:在 CC2651R3中实现 UART 后门引导加载程序所需的指南

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1449495/cc2651r3-guidance-required-to-implement-uart-backdoor-bootloader-in-cc2651r3

器件型号:CC2651R3
主题中讨论的其他器件: CC2651P3UNIFLASHCC2652R

工具与软件:

尊敬的德州仪器(TI)支持团队:

CCS 版本  - 12.8.

SDK 版本   simplelink_cc13xx_cc26xx_sdk_7_41_00_17

编译器版本  - 3.2.0 LTS

我非常感谢您在 CC2651R3微控制器上实施 UART 后门引导加载程序功能。

  • 我参考了 串行引导加载程序接口文档 并实施了所述的必要更改、

  • 已将ccfg.c 文件配置为启用后门引导加载程序并设置所需的 激活引脚和逻辑电平

    (ccfg.c 文件路径- bim_offchip_lp_CC2651P3_nortos_ticlang/Application/ccfg_app.c/DeviceFamily_structPath (startup_files/ccfg.c)

    (请参阅以下代码片段以启用引导加载程序)

      

//#####################################
// Bootloader settings
//#####################################

#ifndef SET_CCFG_BL_CONFIG_BOOTLOADER_ENABLE
//#define SET_CCFG_BL_CONFIG_BOOTLOADER_ENABLE            0x00       // Disable ROM boot loader
 #define SET_CCFG_BL_CONFIG_BOOTLOADER_ENABLE         0xC5       // Enable ROM boot loader
#endif

#ifndef SET_CCFG_BL_CONFIG_BL_LEVEL
 #define SET_CCFG_BL_CONFIG_BL_LEVEL                  0x0        // Active low to open boot loader backdoor
//#define SET_CCFG_BL_CONFIG_BL_LEVEL                     0x1        // Active high to open boot loader backdoor
#endif

#ifndef SET_CCFG_BL_CONFIG_BL_PIN_NUMBER
//#define SET_CCFG_BL_CONFIG_BL_PIN_NUMBER                0xFF       // DIO number for boot loader backdoor
#define SET_CCFG_BL_CONFIG_BL_PIN_NUMBER                0x12       // DIO number for boot loader backdoor (SWO Pin 18)
#endif

#ifndef SET_CCFG_BL_CONFIG_BL_ENABLE
 #define SET_CCFG_BL_CONFIG_BL_ENABLE                 0xC5       // Enabled boot loader backdoor
//#define SET_CCFG_BL_CONFIG_BL_ENABLE                    0xFF       // Disabled boot loader backdoor
#endif

但是、在使用 UniFlash 进行固件上传的过程中会遇到问题。

在 UniFlash 中、无法找到 CC2651R3 (引导加载程序) 在器件列表中、选择正确的引导加载程序接口所需的信息。

所需帮助:

  1. 有关在 UniFlash 中为 CC2651R3引导加载程序选择正确器件配置文件的指导。
  2. 确认激活和使用 CC2651R3上的 UART 后门引导加载程序所需的任何其他设置或步骤。

感谢您对这些问题的帮助、并期待您为成功实施引导加载程序提供指导。

此致、

Rajnish Singh

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

    您好!  

    Unknown 说:
    ]确认激活和使用 CC2651R3上的 UART 后门引导加载程序所需的任何其他设置或步骤。

    我觉得您的实现方式是正确的。  

    我希望这将有所帮助、

    此致、

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

    您好、Clement、

    感谢您的快速响应、

    在 Uniflash 中、我目前选择 器件名称  CC2652R1F (引导加载程序)  在 UART BL 后门模式下上传固件。

    (为什么 选择 CC2652R1F (引导加载程序)(因为功能与 CC2651R3和 CC2652R1F 相同)

    请参阅下面的屏幕截图。。

    当我尝试在引导加载程序(BL)模式下上传固件时、我始终会遇到屏幕截图中提到的错误。

    我还尝试了上传.bin文件和手动 CCFG 设置、但结果保持不变。

    您能否告知我是否缺少其他步骤或设置? 非常感谢为解决这一问题提供任何指导。

    此致、

    Rajnish Singh

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

    您好!  

    [报价 userid="570245" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1449495/cc2651r3-guidance-required-to-implement-uart-backdoor-bootloader-in-cc2651r3/5561126 #5561126"]

    在 Uniflash 中、我目前选择 器件名称  CC2652R1F (引导加载程序)  在 UART BL 后门模式下上传固件。

    (为什么 选择 CC2652R1F (引导加载程序)(因为功能与 CC2651R3和 CC2652R1F 相同)

    [报价]

    这将不起作用、因为两个器件 不同、并且 UniFlash 运行的存储器检查将失败。  

    此致、  

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

    您好、Clement、

    感谢您的答复、

    我知道 UniFlash 运行的存储器检查会失败、因为器件不同。 但是、我只是尝试通过选择 CC2652器件类型来上传固件、因为这两个 MCU 是兼容的。

    我当前正在 引导加载程序模式下使用 sblAppEx 库(根据串行引导加载程序接口文档)将固件上传到 CC2651R3、因为由于其他工具缺少支持、这是当前可用的解决方案。 虽然该库可以有效地一次上传单个文件、但我想知道是否有一种方法可以同时或按顺序上传多个文件、而无需手动重新启动每个文件的过程。

    您能否提供有关使用 sblAppEx 库实现此功能的指导或建议? 如果需要修改或其他工具、我希望获取任何相关文档或示例。

    感谢您的支持。

    此致、

    Rajnish

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

    也包括此项、

    完成引导加载程序更改后 ccfg.c 文件、我无法在中启用后门引导加载程序选项 Project -> project_zero.syscfg ->器件配置

    请参阅以下屏幕截图...

    要实现此功能、需要执行哪些步骤?

    此致、

    Rajnish

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

    您好!  

    对于启用 OAD 的项目、应从 MCUboot 项目中配置 CCFG。  

    我希望这将有所帮助、

    此致、  

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

    尊敬的  Cl é ment:

    感谢您的答复、

    我已经在 CC2651R3的对应 MCUboot 项目中进行了更改(您可以找到该主题的起点)、

    [报价 userid="570245" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1449495/cc2651r3-guidance-required-to-implement-uart-backdoor-bootloader-in-cc2651r3 "]

    已将ccfg.c 文件配置为启用后门引导加载程序并设置所需的 激活引脚和逻辑电平

    (ccfg.c 文件路径- bim_offchip_lp_CC2651P3_nortos_ticlang/Application/ccfg_app.c/DeviceFamily_structPath (startup_files/ccfg.c)

    [报价]

    借助 sblAppEx 库、当找到有效的映像时、我能够在引导加载程序模式下更新固件。

    但是、如果闪存中不存在有效映像、则无法在 ROM 引导加载程序模式下烧录固件。

    您能否说明导致此问题的原因?

    此致、

    Rajnish

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

    您好!  

    伟大的进步,感谢你的分享。  

    但是、如果闪存中没有有效映像、我无法在 ROM 引导加载程序模式下烧录固件。

    如果不存在有效图像、则无论后门引脚的状态如何、器件都应该进入串行引导加载程序模式。 请参阅 https://www.ti.com/lit/swra466中的图2-1 

      

    此致、  

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

    尊敬的  Cl é ment:

    感谢您的答复、

    我正在开发一个支持 OAD 的工程(片外 OAD)、在该工程中、如果找不到有效的映像、则需要使用 ROM 引导加载程序上传两个固件文件(BIM 和应用)。

    有了 sblAppEx 库,我目前只能一次上传一个文件。 但是、我注意到上载多个文件的逻辑是在sblAppEx.c文件中实现的、但在sblAppEx.exe GUI 中无法访问该选项。

    (请参阅下面 sblApp.ex.c 的代码片段)  

    flashing:
    
        file = ifstream();
    
        //
        // If we are loding the second binary, there is no need to create and connect a new SBLDevice.
        //
        if (dualBinaryLoaded == false)
        {
    
            //
            // Create SBL object
            //
            pDevice = SblDevice::Create(deviceType);
            if (pDevice == NULL)
            {
                cout << "No SBL device object.\n";
                goto error;
            }
    
    
            //
            // Connect to device
            //
            cout << "\nConnecting (" << comPort << " @ " << baudRate << " baud) ...\n";
            getTime();
            if (pDevice->connect(comPort, baudRate, bEnableXosc) != SBL_SUCCESS)
            {
                goto error;
            }
            printTimeDelta();
    
        }

    我应该采取哪些步骤来在 GUI 中启用和访问此多文件上传选项?

    此致、

    Rajnish

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

    尊敬的  Rajnish:  

    该工具可以重新编译-正如您提到的、源代码已提供。  

    或者、可以在使用该工具之前合并图像。  

    我希望这将有所帮助、

    此致、  

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

    尊敬的  Cl é ment:

    感谢您的答复、

    我曾尝试使用 VS Code 来重建这个库、但是我遇到了编译错误。

    该工具可重新编译-源代码已按您所述提供。  [报价]

    或者、我还尝试使用合并的映像文件:

    1. 使用合并了十六进制(BIM +应用)hexmerge.py(成功生成了合并的十六进制文件)。
    2. 使用将合并后oad_image_tool的十六进制文件转换为 Bin 文件。
    3. 我可以在项目构建目录中看到转换后的合并 Bin 文件、但合并后的 Bin 文件的大小与应用程序 Bin 文件相同。
    4. 已成功将合并的 Bin 文件刷写到器件中、但器件未在广播。 但是、如果我在启动项目文件中刷写相同的合并 Bin 文件、则会起作用。
    5. 根据我的观察、似乎该工具正在生成相同的应用程序 Bin 文件、但将其命名为合并的 Bin 文件。

    请在下面找到该示例的编译后处理步骤。

    ${CG_TOOL_ROOT}/bin/tiarmobjcopy -O ihex ${BuildArtifactFileName} ${BuildArtifactFileBaseName}.hex
    ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/common/oad/oad_image_tool --verbose ccs ${BuildDirectory} 7 -hex1 ${BuildDirectory}/${BuildArtifactFileBaseName}.hex -k ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/common/oad/private.pem -o ${BuildDirectory}/${BuildArtifactFileBaseName}_oad
    python ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/ble5stack/hexmerger/scripts/hexmerge.py		-o ${BuildDirectory}/${BuildArtifactFileBaseName}_merged.hex   ${BuildDirectory}/${BuildArtifactFileBaseName}.hex	${BIM_HEX_DIR}/bim_offchip_LP_CC2651P3_nortos_ticlang.hex
    ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/common/oad/oad_image_tool --verbose ccs ${BuildDirectory} 7 -h ${BuildDirectory}/${BuildArtifactFileBaseName}_merged.hex   -k ${COM_TI_SIMPLELINK_CC13XX_CC26XX_SDK_INSTALL_DIR}/tools/common/oad/private.pem -o ${PROJECT_ROOT}/${ConfigName}/${ProjName}_merged_oad

    此致、

    Rajnish

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

    尊敬的  Rajnish:  

    我目前无法确定问题-我将在两周内外出。  

    作为临时权变措施、我建议使用调试接口/UniFlash 在器件上刷写这两个映像。 在此之后、您可以将器件闪存内容转储到文件中、并使用此文件通过串行引导加载程序进行刷写。  

    我希望这将有所帮助、

    此致、  

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

    尊敬的  Cl é ment:

    感谢您对临时解决方法的建议。 然而、这项任务至关重要、我们不能等待两个星期。

    请您将此问题分配给可以帮助我们快速识别和解决问题的其他人吗? 非常感谢您为确保此任务及时取得进展所提供的支持。

    此致、

    Rajnish  

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

    尊敬的  Cl é ment:

    我现在能够使用 Flash Programmer 2在引导加载程序模式下成功上传固件。 在 Flash Programmer 2中、我选择 CC2652R 作为目标器件类型(因为 CC2651R3的存储器映射与 CC2652R 相同)。 我首先选择 BIM 二进制文件,然后是应用程序二进制文件,并0x560000x0分别分配地址和,以将文件写入自定义内存地址。

    但是、当我在引导加载程序模式下使用 Uniflash 尝试相同的过程时、遇到了限制。 在 Uniflash 中、一次只能上传一个二进制文件。 如果我选择了多个文件、它会尝试将两个文件写入同一个闪存地址、从而导致地址重叠错误。

    与闪存编程器2不同、Uniflash 在引导加载程序模式下不提供为各个文件分配自定义写入地址的选项。 此限制导致 Uniflash 出现问题。

    目前、我使用 Flash Programmer 2在引导加载程序模式下上传固件。

    感谢您的支持、

    此致、

    Rajnish