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.

[参考译文] LP-EM-CC2745R10-Q1:如何在 CC2745R10中使用 OAD

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1493037/lp-em-cc2745r10-q1-how-to-use-oad-in-cc2745r10

器件型号:LP-EM-CC2745R10-Q1
Thread 中讨论的其他器件: UNIFLASH

工具/软件:

您好、

以下是我的软件和硬件版本:

LP-EM-CC2745R10-Q1

simplelink_lowpower_f3_SDK_8_40_00_61

CCS 版本:20.0.2.5__1.6.2

虽然我已经查看了官方 OAD 指南(https://dev.ti.com/tirex/content/simplelink_lowpower_f3_sdk_8_40_00_61/docs/ble5stack/ble_user_guide/html/ble-stack-5.x-guide/ble5-oad-index-mcuboot-cc23xx.html#)和一些论坛经验、例如: https://e2echina.ti.com/support/wireless-connectivity/bluetooth/f/bluetooth-forum/196338/faq-cc2640r2f-oad。  当我尝试使用 LP-EM-CC2745R10-Q1开发板进行升级时、仍感到困惑。

1. 根据文档、我应  依次编译 MCUboot、basic_persistent_LP_EM_CC2745R10-Q1_freertos_ticlang 和 basic_ble_oad_onchip_LP_EM_CC2745R10-Q1_freertos_ticlang、然后按顺序进行闪存。但我似乎找不到 CC2745R10的 McUboot 相关工程和十六进制文件。  那么、如何运行 OAD?

2. 除了 MCUBoot 之外,我还编译了两个项目,每一个都成了两个固件,一个通常命名,一个是 SB-end ,两者之间有什么区别?

3. 当我尝试刻录 basic_persistent 和 basic_ble_oad_onchip 项目的编译固件时、很多版本的.hex and.bin 我该如何选择? 如何设置刻录地址?

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

    大家好!

    此外、我在以下文章https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1473217/lp-em-cc2745r10-q1-oad-fundamentals/5664838?tisearch=e2e-sitesearch&keymatch=SECURE_BOOT#5664838中看到 、CC2745R 不 使用 MCUBoot 进行 OAD

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

    尊敬的 Ethan:

    是 MCUBoot 不用于 CC27xx。 我们使用安全启动。 安全启动是类似的、但存在于 ROM 中。 下面是启用安全启动的示例工程:
    \examples\nortos\LP_EM_CC2745R10-Q1\secure_boot

    入门自述文件位于:
    \source\ti\common\secure_boot\README.md。

    自述文件包含有关如何设置安全启动的信息。  

    此致、

    Nima Behmanesh

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

    嗨、Nima、

    感谢你的帮助。 在我最近的调查之后、我确认了以下问题:

    CC27XX 不使用 MCUBoot、而是使用安全启动。

    2.以_sb 结尾的文件具有安全启动。

     但仍有一些问题、不清楚:

    1.我在上面的链接中看到了这样的问答

    这让我产生了一个误解、即您只需下载 oad_onchip.hex 即可实现 OAD 功能。 但 我已经测试、只有 basic_ble_oad_onchip_LP_EM_CC2745R10-Q1_freertos_ticlang_sb.hex 无法升级、因为只有 OAD 复位服务、并且固件传输需要 OAD 服务、并且它基于 basic_persistent

    因此、我想再次确认、OAD 需要烧录什么固件?

    2.如果我上述说法正确、我在烧录 basic_persistent_LP_EM_CC2745R10-Q1_freertos_ticlang_sb.hex 和 basic_ble_oad_onchip_LP_EM_CC2745R10-Q1_freertos_ticlang_sb.hex 时遇到存储器冲突、并在0x4020000和0x40400e00发现 cfg 和 scfg 冲突。  比较后、我发现在0x4e020000之后的 xx_sb.hex 器件将比 xx_sb.bin 更多

    因此、我将使用以下不同的组合:

    我两种方式都能成功下载并运行该应用程序、但当我使用 simplelink starter 将器件连接到 OAD 升级时、当我点击 OAD 重置服务的 Reset Target 时、没有发生我预期的任何事情。 跳到持久性、而不是直接向下。

    这些都是我的问题、作为开箱即用的例行程序、我认为应该有清晰的文档供人们理解、而不必在论坛中要求一些看似基本的应用程序。

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

    您好:

    这些都是我的问题、作为一个开箱即用的程序、我认为应该有清晰的文档供人们理解、而不必在论坛中要求一些看似基本的应用程序。

    我同意您的意见、该团队正在编写有关 OAD 和安全启动的更强大的文档。 该过程略有不同、因为我们过去使用了 MCUBoot (并将在4月下旬再次支持 MCUBoot)。

    这让我产生了一个误解、即您只需下载 oad_onchip.hex 即可实现 OAD 功能。 但 我已经测试、只有 basic_ble_oad_onchip_LP_EM_CC2745R10-Q1_freertos_ticlang_sb.hex 无法升级、因为只有 OAD 复位服务、并且固件传输需要 OAD 服务、并且它基于 basic_persistent

    我在这一问题上的回应应该得到澄清:

    basic_ble_oad_onchip  需要  basic_persistent。 我想我对四个 OAD 项目感到困惑。  basic_dual_image  不需要 basic_persistent。 但是、 basic_ble_oad_onchip  确实需要在 basic_persistent 中实现的 OAD 配置文件

    您可以在 README.html 的 basic_oad 项目中找到以下信息:

    请注意、对于 BLE 片上 OAD、由于安全启动、不再需要 MCUBoot。 您可以在 README.html 上找到上述内容的  basic_ble_oad_onchip。 我向团队提交了更新这些自述文件的申请单、其中包括4月下旬发布的 MCUBoot 之外的安全启动说明。

    我自己也会研究这个问题、并提出所需的确切流程。

    但是、我已经测试了 basic_ble_dual_image、这个值很好用、并且所有内容都包含在一个映像中。

    此致、

    Nima Behmanesh

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

    您好:

    所以我自己完成了这个过程、我相信工程的设置存在问题。 目前、    在解决此问题之前、我不建议使用 basic_presstent 和 basic_onchip 项目。

    在尝试这些不同的配置时、您是否遇到电路板对调试器无响应/无法擦除芯片的问题? 我在上面测试过这一过程的两个设备都变成了 软砖。  

    我已将此问题上报给研发团队、并将让您随时了解最新情况。

    此致、

    Nima Behmanesh

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

    嗨、Nima、

    感谢您的耐心。  我将使用 basic_dual_image 验证您的索赔。 对于您提到的问题、我经常遇到固件烧录异常的问题、这需要我反复加电并进行烧录。使用 simplelink 应用升级时、在点击 OAD 重置后出现砖块问题。  我认为这可能与不正确刻录 Presentent 有关、因为我看到 Presentent 在刻录 oad_onchip.bin 和 persistent_xx_sb.hex 后为0xff。

    确保两个固件都成功烧录后、可以通过 OAD 重置服务进行重置、程序可以跳转到持久模式以运行。但它会卡在 MTU 更新中并退出。

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

    嗨、Nima、

    经过几天的测试后、我发现以这种方式烧录固件可以成功执行 OAD 升级。

     1.先刻录 basic_persistent_xx_sb.hex

     2.选中"程序加载前不要擦除"选项

    3. 将 basic_ble_oad_onchip_xx_sb.bin 重新刻录到0x31000。

    我认为以前无法升级的原因是 basic_persistent 位置的固件丢失并变为砖型。这可以通过在刻录完成并重置后重新读取存储器来验证。

    如果您有任何新发现或优化、请联系我。

    谢谢

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

    尊敬的 Ethan:

    感谢您的耐心、感谢您分享调查结果。   当我尝试解决这个问题时、我也已经将两个设备弄坏了。 幸运的是,我还发现,设备 似乎只是 坏了。 如果反复使用芯片擦除、它最终会使器件脱离复位环路、从而导致器件无响应。 因此,任何板,  在这个过程中,从以前可以恢复一些努力。

    我将在我这边尝试、还将更新有关使用安全启动的 OAD 的文档。

    此致、

    Nima Behmanesh

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

    嗨、Nima、

    我很抱歉地问、您的团队是否已确定问题并开始解决? 虽然我的方法暂时成功地进行了 OAD 升级、但这应该是一个临时的过渡。 对于量产、首选将 basic_persistent_xx_sb.hex 和 basic_ble_oad_onchip_xx_sb.hex 脚本编写为一个完整的.hex、然后将其刻录、但这是不可能的。  

    另一个问题是我正在使用 UniFlash CLI 下载固件、并且想询问如何在使用命令烧录应用程序固件时烧录 hsm_fw_v3.0.0.bin 文件。

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

    您好:

    在生产环境中、首选将 basic_persistent_xx_sb.hex 和 basic_ble_oad_onchip_xx_sb.hex 脚本编写为 full.hex、然后将其刻录、但这是不可能的。  [/报价]

    出于好奇、您提到这是不可能的、为什么这不可能实现? 您应该能够将这两个组合起来、只需从其中一个 CCFG/SCFG 即可。 例如、首先刷写的任何文件(即 basic_ble_oad_onchip_xx_sb.hex)都将包含 CCFG/SCFG。 您需要获取 CCFG/SCFG 部分并将其刷写到0x4e020000 (我认为这是 CCFG 的地址、但这是在 TRM 中捕获的)。

    另一个问题是我正在使用 UniFlash CLI 下载固件、并想问如何在使用命令烧录应用程序固件时烧录 hsm_fw_v3.0.0.bin 文件。

    为了确保我正确理解您的问题、您询问如何使用 Uniflash CLI 命令烧录 HSM 固件? 我相信我的团队中有人做到了这一点。 如果我不能正确理解问题、请纠正我。

    此致、

    Nima Behmanesh

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

    嗨、Nima、

    我在上面提到过、已经尝试过、 让我们稍微弄清楚一下

    -对于  basic_persistent_xx_sb.hex 和 basic_ble_oad_onchip_xx_sb.hex、在0x4e020000和0x4e040000处有重复的 CCFG/SCFG

    - basic_ble_oad_onchip_xx_sb.bin 与 basic_ble_oad_onchip_xx_sb.hex 相比, CCFG/SCFG 部分缺失。

    因此、我尝试使用 a.bin 文件和另一个.hex 文件来确保仅使用 CCFG/SCFG 的一个副本。但我发现、复位后 Primary (basic_persistent 应用)的位置全部为0xFF。

    除了我前面提到的方法之外、您是否还测试过其他可以成功下载 basic_persistent 和 basic_ble_oad_onchip 并成功升级 OAD 的方法?

    关于第二个问题、您的理解是正确的、我想使用 CLI 烧录 HSM 固件、下面是我的说明、在这种情况下如何修改也可能会烧录 HSM

    dslite --mode noConnectFlash -c user_files/configs/cc2745r10.ccxml -l user_files/settings/generated.ufsettings -s VerifyAfterProgramLoad="No verification" -e -f -v "user_files/images/basic_ble_oad_onchip_sb.bin,0x31000"

     

    此致、

    Ethan

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

    尊敬的 Ethan:

    关于第二个问题、您的理解是正确的、我想使用 CLI 刻录 HSM 固件、以下是我的说明、如何修改也可以刻录 HSM

    这应该是您需要的。

    ./dslite.bat --mode noConnectFlash --config="<CCS Workspace>\basic_ble_LP_EM_CC2745R10_Q1_freertos_ticlang\targetConfigs\CC2745R10.ccxml" -s HsmImagePath="<sdk_path>\bin\hsm\CC27XX_HSM_FW_v3.3.0.bin" -a ProgramHsmImage

    除了我前面提到的方法之外、您是否还测试过其他可以成功下载 basic_persistent 和 basic_ble_oad_onchip 并成功升级 OAD 的方法?

    我已经测试了其他方式,但我相信你让它工作的方式是正确的方式来做到这一点。 我仍然在研究为什么同时闪烁会导致问题。

    [引述 userid="607598" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1493037/lp-em-cc2745r10-q1-how-to-use-oad-in-cc2745r10/5741985 #5741985"]

     1.先刻录 basic_persistent_xx_sb.hex

     2.选中"程序加载前不要擦除"选项

    3. 将 basic_ble_oad_onchip_xx_sb.bin 重新刻录到0x31000。

    [/报价]

    我倾向于使用 Uniflash 来解决这个问题。 如果您单独刷写它们并在程序加载前禁用擦除功能、则会起作用、因为持久应用程序仍在内存中。

    但是、如果同时刷写这两个闪存、在加载程序之前擦除就无关紧要(因为应该同时加载这两个闪存)。  

    我将尝试合并这两个图像、看看是否可以使其正常工作。 同时、我还将与我们的研发团队联系、了解我是否遗漏了一些信息。

    我会让你知道,不迟于星期五。

    此致、

    Nima Behmanesh

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

    尊敬的 Ethan:

    所以我已经与研发部门讨论过、可以确认他们还必须执行您完成的步骤才能使其正常工作(即单独刷新它们)。  

    现在我要讨论两个方面:

    1.将两个图像组合成一个图像  .hex  文件并测试它。 到目前为止、我看到了同样的问题、结果是2个。

    2.安全启动。 首次刷写 PERSISTENT 时、器件将重置、从而允许安全启动选择 PERSISTENT 作为映像。 同时刷写这两个闪存时、安全启动将使用最高版本(basic_on_chip)执行映像。 这使我认为它可能是安全启动以某种方式删除持久应用程序。

    我将在一周内继续更新您的信息。

    此致、

    Nima Behmanesh

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

    嗨、Nima、

    是否有任何进展?

    此致、

    Ethan

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

    尊敬的 Ethan:

    不,还没有,我将有时间在星期三真正深入研究这一点。 我将在周四之前提供更新(如果时间允许、希望更早)。

    此致、

    Nima Behmanesh

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

    嘿 Ethan、

    我还在研究这一点、但今天我走得更远一些。 若要组合十六进制文件、您需要添加以下编译后处理步骤:

    ${CG_TOOL_ROOT}/bin/tiarmobjcopy -O ihex ${BuildArtifactFileBaseName}.out ${BuildArtifactFileBaseName}_app.hex --remove-section=.scfg --remove-section=.ccfg

    此编译后处理步骤将从十六进制文件中删除 CCFG/SCFG。  

    但是、生成这个.hex 文件后、我使用 imgtool 使用正确的密钥对其进行签名。 该十六进制文件时会发生什么

    C:/ti/SDKs/simplelink_lowpower_f3_sdk_8_40_00_61/tools/common/sbtool/../mcuboot/imgtool sign --header-size 0x80 --align 4 --slot-size 0xb3000 --version 3.0 --pad-header -s 0 --rom-fixed 0x31080 --custom-tlv 0xa0 0xabb0c380 --key C:/ti/workspaces/CCS/pg2/basic_ble_oad_onchip_LP_EM_CC2745R10_Q1_freertos_ticlang/app-rsa-3k-pkcs-priv.pem --public-key-format full basic_ble_oad_onchip_LP_EM_CC2745R10_Q1_freertos_ticlang_app.hex basic_ble_oad_onchip_LP_EM_CC2745R10_Q1_freertos_ticlang_sb.hex

    组合.hex 文件时、看起来它们在0x31000处有点重叠。 我还在努力。  

    总体目标是对持久性进行签名并包含 SCFG/CCFG、oad_onchip 没有 SCFG/CCFG、但仍需签名。  

    此致、

    Nima Behmanesh

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

    嗨、Nima、

    感谢您的持续帮助。 我最近可能无法与您一起测试这个问题、因为我忙于处理其他事情。 如果您和您的团队有任何进展、请与我联系。

    此致、

    Ethan

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

    尊敬的 Ethan:

    没问题! 感谢您的耐心、我将在获得更多信息后更新您。

    此致、

    Nima Behmanesh

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

    嗨、Nima、

    在生产环境中使用 CLI 将固件下载到 CC2745时、我遇到了一些新问题:


    1.关于下载顺序,我应该先下载持久固件还是 HSM 固件? 根据官方文档、我认为应首先下载持久性固件。

    2、根据前面的方法、我可能在下载固件之前进行了批量擦除。 但我却不敢相信 UniFlash 快速入门指南  ( https://software-dl.ti.com/ccs/esd/uniflash/docs/v9_1/uniflash_quick_start_guide.html#erase-the-device-and-other-settings-and-utilities )、但找不到适用于 CC2745的指令

    在使用新芯片进行下载时、我总是会遇到刻录失败的问题、直到成功刻录一次(使用 Uniflash)。 之后,一切都是正常的。 这是否与问题1有关? 事实上、我更改了下载顺序。 先下载 Persisten、然后 HSM 似乎也不起作用。 我想它可能与芯片的 CCFG 有关?

    以下是我的刻录脚本:
    主脚本与三个脚本关联、分别刻录三个固件

    call Bat1.bat
    if %ERRORLEVEL% NEQ 0 (
        @echo [ERROR] Bat1.bat execution failed.
        @echo Press Enter to retry or Ctrl+C to exit.
        pause >nul
        goto START
    )
    
    call Program_HSM.bat
    if %ERRORLEVEL% NEQ 0 (
        @echo [ERROR] Program_HSM.bat execution failed.
        @echo Press Enter to retry or Ctrl+C to exit.
        pause >nul
        goto START
    )
    
    cd /d "%initial_path%\..\Tools\Flash2"
    call Bat2.bat
    if %ERRORLEVEL% NEQ 0 (
        @echo [ERROR] Bat2.bat execution failed.
        @echo Press Enter to retry or Ctrl+C to exit.
        pause >nul
        goto START
    )

    Bat1.bat

    dslite --mode noConnectFlash -c user_files/configs/cc2745r10.ccxml -l user_files/settings/generated.ufsettings -s VerifyAfterProgramLoad="No verification" -e -f "../../bootloader/basic_persistent_LP_EM_CC2745R10_Q1_freertos_ticlang_sb.hex"

    Program_HSM.bat

    dslite --mode noConnectFlash -c user_files/configs/cc2745r10.ccxml -s HsmImagePath="../../bootloader/cc27xxx10_hsm_fw_v3.0.0.bin" -e -a ProgramHsmImage

    Bat2.bat

    dslite --mode noConnectFlash -c user_files/configs/cc2745r10.ccxml -l user_files/settings/generated.ufsettings -s VerifyAfterProgramLoad="No verification" -e -f -v "user_files/images/basic_ble_oad_onchip_sb.bin,0x31000" -r 0

    您能发现任何问题吗?

    我不确定是否要创建新问题。 但对我来说,在这里,我可能不需要再解释为什么我下载它这样的方式。 如有必要、我可以创建一个新的。 再次感谢您

    此致、

    Ethan

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

    尊敬的 Ethan:

    [引述 userid="607598" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1493037/lp-em-cc2745r10-q1-how-to-use-oad-in-cc2745r10/5775000 #5775000"]
    1.关于下载顺序,我应该先下载持久固件还是 HSM 固件? 根据官方文档、我认为应首先下载持久性固件。

    正确、应先下载持久性固件、然后才能刷写 HSM 固件。  

    2.根据之前的方法、我可能在下载固件之前进行了批量擦除。 但我却不敢相信 UniFlash 快速入门指南  ( https://software-dl.ti.com/ccs/esd/uniflash/docs/v9_1/uniflash_quick_start_guide.html#erase-the-device-and-other-settings-and-utilities )、但找不到适用于 CC2745
    的说明

    Uniflash 不支持批量擦除 CC2745、因此我一直与 Uniflash 团队合作、最终顺利完成了这项工作。 不过、该 主题 提供了如何使用 CCS 对 CC2745进行批量擦除的信息。

    3.在使用新芯片下载时、我总是遇到刻录失败的问题、直到成功刻录一次(使用 Uniflash)。 之后,一切都是正常的。 这是否与问题1有关? 事实上、我更改了下载顺序。 先下载 Persisten、然后 HSM 似乎也不起作用。 我想它可能与芯片的 CCFG 有关?

    我看不到您的脚本有任何问题。 但是、如果在刷写 HSM 之前尝试同时烧录 PERSISTENT 和 ON_CHIP、会发生什么情况? 是否看到发生了相同的错误?

    通常我会要求把这个问题放在一个新的主题中,但是,我认为保留这里是好的,所以我们可以继续使用这个主题来解决这个问题。

    此致、

    Nima Behmanesh