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:蓝牙论坛

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1449527/cc2340r5-bluetooth-forum

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

工具与软件:

专家们、您好!

我目前正在开发一个基本的 BLE OAD 工程、希望添加一项功能、以通过 CC2340R5上的 UART 下载固件。

我的目标是在我的应用中通过 BLE 实现 OAD、并通过 UART 实现 OAD。 我是否需要修改 MCU 启动应用程序以支持通过 UART 进行固件更新?

您能否概述一下实现这一目标需要遵循的步骤? 此外、请告诉我是否有任何相关文档或应用程序可供我参考以获取指导。

谢谢!

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

    您好!  

    我的目标是在我的应用中通过 BLE 实现 OAD 和通过 UART 实现 OAD。 我是否需要修改 MCU 启动应用程序以支持通过 UART 进行固件更新?[/QUOT]

    这应该不是必需的、因为在 UART 固件更新期间不会使用 MCUboot (假设您使用的是 ROM 引导加载程序、如我们在另一主题中讨论的那样)。

    此致、  

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

    Clement、您好!

    如上一主题中所述、我打算使用串行 ROM 引导加载程序(SBL)。 但是、由于 DIO6不在我的定制 PCB 上公开、因此我无法使用默认 SBL 配置。

    为了解决该限制、我计划修改 MCU 引导应用程序(当前用于 OAD 应用程序)、以实现通过 UART 进行固件更新的自定义命令。

    您能否提供有关如何进行此修改的指导? 此外、如果我可以出于此目的使用任何参考资料、文档或示例、我将不胜感激。

    提前感谢您的支持!

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

    您好!  

    明白了、谢谢您的上下文。  
    如果可以的话、我不完全确定该方法是解决我们在另一线程中讨论的限制的最佳方法。  
    我们讨论的限制意味着*如果器件为空白*、您将被迫使用设计中不可能使用的 UART 配置。 在这里、您正在研究修改 MCUboot -必须在器件上刷写它。 如果您可以刷写 MCUboot、我想您可以刷写有效的 CCFG (并为串行引导加载程序选择另一个 UART 配置)。  
    「我知道了,让我看看你的表现。」  

    «、我»似乎极力主张使用适当的引导加载程序(基于 ROM 或 Flah)。 我这样做是因为我真诚地认为这种方法将提供更高效、可定制和可靠的解决方案。 我很高兴在其他方面为您提供帮助、但我认为我的工作也是就系统设计提供意见。 希望你不介意:)

    此致、  

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

    您好!

    感谢您的答复。

    我目前无法编写 CCFG 文件、因为最初我可以使用生产 JIG 中的 Uniflash 刷写模块。 但是、一旦在现场部署该模块、我就只能使用 UART 来更新固件。

    当使用 ROM 引导加载程序并尝试通过 SBL 更新固件时、该过程首先擦除整个闪存。 之后、我可以使用 Linux SBL 工具提供 CCFG 和用户应用程序。 如果在此过程中更新失败、则无法恢复为默认配置、因为 DIO6在定制 PCB 中不可用。

    我的要求与 OAD 应用程序类似。 当 OAD 更新失败时、持久性应用程序仍然可用、从而允许通过 OAD 服务进行固件更新。

    我想以与 OAD 服务用于固件更新相同的方式使用 UART。 这可能需要修改 basic_ble_oad/持久或 MCUboot 应用程序。 我正在寻求有关在 basic_ble_oad 项目中通过 UART 更新固件的理想方法的指导、确保在更新失败时可以重新启动更新。

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

    您好!

    感谢您的参与。 我一开始没想到会有这么好的评价。

    针对您的问题、MCUboot 最初被认为  在正确的映像上启动器件、而不是 接收 映像。
    您肯定会设法扩展 MCUboot 功能以通过 UART 接收映像、但 这真的是您想要做的吗? 这意味着您必须将器件和信号复位到要接收映像的 MCUboot。 我想这可以在 MCUboot 执行开始时完成、其中可以检查引脚的状态。 或者、用户可以依赖复位前设置的闪存变量(或持久 RAM)。
    最后一个元素、 MCUboot 映像不应更新。 在其中添加更多代码时应仔细考虑- reverse 参数是 MCUboot 中的代码空间比应用程序的其余部分受到的限制小。

    另一个选项是在应用程序中获取图像接收代码-即  basic_ble_oad 项目。 对我来说,这种情况下的风险是,你绝对应该确保一次只能收到一个图像。  

    我希望这将有所帮助、

    此致、  

     

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

    Clement、您好!

    感谢您的详细答复和见解。 您的观点有助于阐明在应用中使用 MCUboot 与实现固件更新逻辑之间的细微差别。

    展望未来、感谢您对我考虑的方法的验证和指导:

    1. 示例代码或参考
      是否有任何示例项目或代码参考可用于通过 UART (而不是使用串行 ROM 引导加载程序)实现器件固件更新?

    2. 建议的方法
      根据您的意见、我建议的工作流程如下:

      • basic_ble_oad应用中、我将实现逻辑来检测 UART 上的特定字节。
      • 接收到这个字节后、我打算在闪存中设置 persistent 标志或变量。
      • 设置此标志后、器件将重新启动并引导到持久应用程序。
      • 在此永久应用中、我将实现逻辑以通过 UART 接收新固件、并将映像数据写入当前basic_ble_oad应用所在的位置。
      • 写入完整的固件映像后、器件将复位并启动至新的basic_ble_oad应用程序。
    3. 闪存管理指南

      • 您能否介绍如何在闪存中设置持久性数据以向引导加载程序或持久性应用程序发出信号、从而启动基于 UART 的固件接收?
    4. 固件写入 API 和 CRC 验证

      • 如果我继续执行上述方法、您能为我提供有关 API 或参考的指导吗:
        • 擦除当前固件部分。
        • 执行 CRC 检查以确保数据完整性。
        • 写入新的固件映像数据、直到传输完成。

    非常感谢您对该方法以及在实施这些步骤时可以分享的任何参考资料或最佳实践进行验证。

    感谢您的持续支持!

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

    专家们、您好!

    请针对上述问题提供指导。

    我在印度的计量客户迫切需要这一点。

    谢谢你。

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

    您好!  

    感谢您的耐心。  

    [报价 userid="623668" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1449527/cc2340r5-bluetooth-forum/5574303 #5574303"] 示例代码或参考
    是否有任何示例项目或代码参考可用于通过 UART (而不是使用串行 ROM 引导加载程序)实现器件固件更新?[/QUOT]

    您的请求不存在特定的代码引用。 您可以参考 OAD 示例和 MCUboot 示例。  

    [报价 userid="623668" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1449527/cc2340r5-bluetooth-forum/5574303 #5574303"]

    建议的方法
    根据您的意见、我建议的工作流程如下:

    • basic_ble_oad应用中、我将实现逻辑来检测 UART 上的特定字节。
    • 接收到这个字节后、我打算在闪存中设置 persistent 标志或变量。
    • 设置此标志后、器件将重新启动并引导到持久应用程序。
    • 在此永久应用中、我将实现逻辑以通过 UART 接收新固件、并将映像数据写入当前basic_ble_oad应用所在的位置。
    • 写入完整的固件映像后、器件将复位并启动至新的basic_ble_oad应用程序。
    [报价]

    这听起来很合理。  

    [报价 userid="623668" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1449527/cc2340r5-bluetooth-forum/5574303 #5574303"]

    闪存管理指南

    • 您能否介绍如何在闪存中设置持久性数据以向引导加载程序或持久性应用程序发出信号、从而启动基于 UART 的固件接收?
    [报价]

    如果这是您需要应用程序保留在闪存中的唯一数据段、您将"浪费"整个闪存页(2kB)。 如果您可以接受、请利用 nvsinternal 示例继续操作。  
    或者、您可以使用在重新启动后仍然有效的未初始化 RAM 变量(请参阅此处)。

    [报价 userid="623668" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1449527/cc2340r5-bluetooth-forum/5574303 #5574303"]

    固件写入 API 和 CRC 验证

    • 如果我继续执行上述方法、您能为我提供有关 API 或参考的指导吗:
      • 擦除当前固件部分。
      • 执行 CRC 检查以确保数据完整性。
      • 写入新的固件映像数据、直到传输完成。
    [报价]

    所有这些都可以在 MCUboot 示例中找到。

    我希望这将有所帮助、

    此致、  

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

    您好!

    我目前正在 persistent 应用中实现通过 UART 下载映像功能。 但是、我遇到了以下错误:"程序无法放入可用内存中。"

    相关详情如下:

    • 持久应用程序的起始地址 0x6000
    • 当前持久应用程序大小 175.49 KB
    • 在.cmd 文件中指定持久性时隙大小 0x2BFF0

    为了适应新功能、我需要将永久插槽的大小增加25-30 KB。 您能否指导我进行必要的更改、以增加永久性插槽的大小、同时确保其它内存插槽不重叠?

    具体而言、我想知道:

    1. 需要在链接器命令文件(.cmd)或等效配置中进行哪些更改来调整时隙大小?
    2. 项目设置或内存布局配置中需要进行的任何更新、以防止与其他时隙重叠。
    3. 验证和测试更新的内存配置的步骤。

    非常感谢您的协助、因为此调整对于在永久性应用中实现基于 UART 的 DFU 功能至关重要。

    感谢您的支持!

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

    您好!  

    最后一个问题与初始讨论不完全相关、我已在 https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1459716/cc2340r5-bluetooth-forum---persistent-application-does-not-fit-available-memory?tisearch=e2e-sitesearch&keymatch=%2520user%253A623668#单独的主题中回答了您的问题 

    此致、