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.

[参考译文] CC2340R5:需要使用串行 ROM 引导加载程序通过 UART 更新 basic_ble_oad 固件

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1444853/cc2340r5-required-to-update-the-basic_ble_oad-firmware-over-the-uart-using-serial-rom-bootloader

器件型号:CC2340R5
主题中讨论的其他器件: UNIFLASHSysConfig

工具与软件:

专家们、您好!  

  1. 固件更新后引导加载程序模式出现问题
    我将使用 CC2340R5的串行引导加载程序通过 UART 实现固件更新。 最初、我使用该data_stream工程并利用 Linux SBL 工具通过 UART 成功更新固件。 但是、我遇到了一个问题:

    • 在使用 SBL 工具进行首次固件更新期间、CC2340R5会根据我指定的引脚配置按预期进入引导加载程序模式。
    • 固件更新完成后、我无法使用相同的引脚配置将 CC2340R5模块恢复到引导加载程序模式。

    为帮助解决此问题、我附上了:

    • 我使用的引导加载程序配置的屏幕截图。
    • 为 SBL 工具生成的二进制文件:
      • ccfg.bin映射到0x4E020000的存储器范围0x4E020800
      • data_stream.bin从内存范围导出0x000000000x0007BFFF

    请帮助我确定可能导致此行为的原因、并提供解决该问题的建议步骤。


  1. app_ble_oad通过串行 ROM 引导加载程序进行工程的固件更新
    我希望该app_ble_oad工程实现类似的固件更新过程、使用串行 ROM 引导加载程序更新用户应用程序。 我的目标如下:

    • 对于第一次更新、我计划使用 Uniflash 刷写 MCU 引导映像、持久映像和用户应用程序映像。
    • 随后、我想只通过 SBL 工具更新用户应用程序、而无需重新刷新 MCU 引导映像和持久映像。

    请引导我了解以下内容:

    • 为了触发 MCU 进入引导加载程序模式、我应该在 SysConfig 中设置哪些配置?
    • 为了准备二进制文件供 Linux SBL 工具使用、我应该导出多大的存储器地址范围?

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

    您好!  

    感谢您联系我们。  

    在回答您的问题之前、我想问您是否正在考虑通过 BLE OAD 和 UART 实施软件更新? 此细节很重要、因为假定您只需要通过 UART 进行软件更新、那么您就不需要"OAD"项目的额外复杂性。  

    针对您的问题、我认为第一次访问引导加载程序模式是因为器件的闪存为空白、这会导致器件 CCFG CRC 被视为不正确。 不同的说,我的印象是后门销 永远不 工作。  

    为了确保我们的决策正确无误、您能否确认您遵循的方法?  

    1. 您将引脚21与接地端短接
    2. 您按下复位按钮  

    此外、为了再次确认器件是否进入引导加载程序模式、我要添加一个在我的应用程序一开始就闪烁 LED 的简单 while 环路(当然可以稍后将环路删除)。

    我希望这将有所帮助、

    此致、  

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

    您好!  

    抱歉、我忽略了您的第二个问题。  

    CC2340的 ROM 引导加载程序不允许部分擦除闪存(此外、如果不擦除闪存、就无法覆盖闪存)。 对于您的用例、您有两个选项:  

    -选项1:擦除和覆盖整个闪存

    -选项2 :构建您自己的闪存引导加载程序显示附加功能

    我希望这将有所帮助、

    此致、  

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

    尊敬的 Clement:

    我希望这封邮件能让您满意。

    我正在探索如何使用 BLE OAD 和 UART SBL 实现软件更新。 如果您提供有关实现此目的所需配置和步骤的指导、我将不胜感激。

    具体而言、我想澄清以下几点:

    1. firmware_image.binccfg.bin使用 Uniflash 将两个文件导出basic_ble_oad工程的起始和结束存储器地址是多少?
    2. 调用串行引导加载程序(SBL)需要哪些配置? 设置是否与我在data_stream工程中使用的设置类似?
    3. 为了使用 OAD 和 SBL 成功实现固件更新、是否需要考虑任何其他注意事项或步骤?

    你在回答这些问题方面的帮助将是非常宝贵的。

    感谢您的时间和支持。

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

    您好!  

    和解答您的问题  

    firmware_image.binccfg.bin使用适用于basic_ble_oad项目的 Uniflash 导出和文件的起始和结束内存地址是什么?

    这将取决于您设置的配置。 您可以参阅 OAD 闪存布局的用户指南- https://software-dl.ti.com/simplelink/esd/simplelink_lowpower_f3_sdk/8.20.00.119/exports/docs/ble5stack/ble_user_guide/html/oad-mcuboot/flash-layout-on-chip-stack-library.html 

    调用串行引导加载程序(SBL)需要哪些配置? 设置是否应与我在data_stream项目中使用的设置相似?

    是的、应该需要对引导加载程序进行类似配置。  
    唯一的区别是 CCFG 配置(用于配置 SBL)由 MCUboot 项目设置。  

    为了使用 OAD 和 SBL 成功实施固件更新、是否需要考虑任何其他注意事项或步骤?

    请参阅我之前的回答:

    [报价 userid="370266" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1444853/cc2340r5-required-to-update-the-basic_ble_oad-firmware-over-the-uart-using-serial-rom-bootloader/5541055 #5541055"]

    CC2340的 ROM 引导加载程序不允许部分擦除闪存(此外、如果不擦除闪存、就无法覆盖闪存)。 对于您的用例、您有两个选项:  

    -选项1:擦除和覆盖整个闪存

    -选项2 :构建您自己的闪存引导加载程序显示附加功能

    [报价]

    我希望这将有所帮助、

    此致、  

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

    你好

    感谢您的答复和指导。

    我已根据您的建议成功配置了系统、现在可以使用 Linux SBL 工具通过 UART 更新固件。 但是、我在首次固件更新过程中遇到了问题。

    在利用 SBL 更新固件之前、我需要使用 Uni-Flash 对 OAD 应用程序以及 MCU 引导和持久应用程序进行编程。 这允许通过之前在 MCU 引导项目中设置的配置引脚调用串行 ROM 引导加载程序。

    很遗憾、我无法在空白器件上调用引导加载程序。 您能提供有关如何通过 UART 使用串行 ROM 引导加载程序执行初始固件更新的指导吗?

    作为参考、我使用的器件是 CC2340R52NORGER QFN24 (4x4512KB 闪存)。

    期待您的建议。

    此致、

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

    您好!  

    空白器件将始终使用默认引导加载程序配置在串行引导加载程序模式下引导。  

    下表(摘自器件 TRM、第8.5.1.2节- https://www.ti.com/lit/pdf/swcu193)显示了器件的默认配置。 对于 QFN24封装、默认配置为 serialIoCfgIndex = 0。

    我希望这将有所帮助、

    此致、

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

    您好!  

    我在适用于 UART 的定制 PCB 中只暴露了 DIO12、DIO20、DIO22和 DIO13。 我没有 DIO6的访问权限。 请指定在首次使用 SBL 更新固件时是否有任何命令或方法将 serialCfgIndex 0更改为1。  

    或者、如果有任何其他方法使用 SBL 对使用 UART 的空白模块进行 DFU 更新。

    此致。

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

    您好!  

    如果不访问 DIO6、您将无法通过其串行引导加载程序刷写空白4x4 QFN CC2340R。

    如果 SWD 引脚可用、则可以考虑在首次使用这些引脚来刷写器件。  

    我希望这将有所帮助、

    此致、