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:MCUBoot 示例代码:存储器读取操作

Guru**** 2875350 points

Other Parts Discussed in Thread: CC2340R5, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1633402/cc2340r5-mcuboot-example-code-memory-read-operation

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

TI 团队大家好、

我将使用 CC2340R5 以及 SDK 8.40 和 MCUBoot 示例代码、通过外部接口使用 UART 实现自 FOTA。

现在、我确实使用位于固定地址的 NVM API 将一些数据写入应用程序代码。 下面是代码片段。

我想读取 MCUBoot 中同一个地址的标志以进行交叉验证、但不确定如何进行交叉验证。

因为我想 NVM 相关文件或访问在 MCUBoot 中被禁用。

我想了解如何在应用代码和 MCUBoot 代码中访问同一存储器区域?

         uint32_t flag = 0xA5A5A5A5;

         nvsHandle2 = NVS_open(MCUBOOT_TRIG_FLG_ADDR, NULL);

         nvsRes = NVS_write(nvsHandle2, 0, (uint8_t *)&flag, 4, NVS_WRITE_ERASE | NVS_WRITE_POST_VERIFY);
         if(nvsRes != NVS_STATUS_SUCCESS)
         {
             return nvsRes;
         }

         //Inform to boot-loader that new image is available.
         /*This is tested now that the Application is jumping to MCUBoot*/
        #ifdef SECURE_BOOT
            HapiSbSetId( 3 ); // Indicate to secure boot that new image is ready
        #endif

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

    尊敬的 Rushikesh:

    MCUboot 通常不使用 NVS 等 TI 驱动程序 来保持轻量级运行并消耗最少的闪存存储容量。  您可以在 MCUboot 项目工作区的 flash_map_backend/flash_map_backend.c 内找到闪存打开/关闭/读取/擦除/写入操作、以及在 BootUtil/BootUtil/ src 文件夹内的各种用法。  这些 API 或 NVS 等效项都具有类似的参数、并最终生成 闪存 driverlib API、因此应该使您能够解释应用程序和 MCUboot 使用情况。  您可以按照 BLE OAD SLA 的“调试 OAD 项目“部分 进行其他调试指导。

    此致、
    Ryan

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

    您好、Ryan、

    感谢您的意见。

    我直接在应用程序设置标志时的同一地址读取数据。  

    以下是我读取数据的方式:

    void mcuboot_flash_read (uint32_t addr、void *dst、uint32_t len)

        if(!is_valid_range (addr、len))
          return;//或断言

       memcpy (dst、(const void *) addr、len);
    }

    这种方法适用于我的案例、现在我能够读取由应用程序在固定位置设置的特定标志值。

    我在 MCUBoot 中使用 LED 闪烁进行了确认、

    我有一个跟进问题给您:

    下面是我在 MCUBoot 示例代码的 syscfg 中配置存储器映射、我得到该配置的错误为:  说明资源路径位置类型
    #10325-D 创建内存范围$bound0美元x7c000、以适应绑定部分“.TI.bound:flashBuf0“ mcuboot_LP_EM_CC2340R5_nortos_ticlang C/C++问题

    如果我在这里做什么不对、那么请您纠正我吗?

    MCUboot - NVS

      

    MCUBoot  

    BLE 双图像示例代码存储器映射:

    CONFIG_NVSINTERNAL

    CONFIG_NVSINTERNAL1

    CONFIG_NVS_APP

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

    通过在 MCUboot 工程的 SysConfig 文件中创建 NVS 模块实例、您将创建存储器保留部分、命令链接器文件 (mcuboot_cc2340r5.cmd) 中未涉及到该部分。  这通常是一个警告(指出您的应用程序可能会运行到 NVS 保留区域)、这不会阻止 CCS 完成工程编译。  您可以修改*。cmd、但不需要将 NVS 实例添加到 MCUboot 工程中、因为您未使用 NVS TI 驱动程序 API、并且命令链接器文件的配置使得 MCUboot 闪存绝不会与 0x7C000-0x7FFFF 相交。

    此致、
    Ryan

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

    您好、Jan、

    那么、MCUBoot 中应该使用哪个存储器部分进行内部操作。 同样、我也会在应用中使用。

    例如、我在应用中的内部存储器中某个固定地址设置标志或更新一些元数据、并希望在 MCUBoot 中访问这些元数据以验证该标志/元数据。

    此致、

    Rushikesh。

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

    应用的 NVRAM (0x7C000-0x7FFFF)  可以通过 MCUboot 进行访问、我只是讨论了如何配置 MCUboot 工程、以确保工程编译绝不会与或覆盖 NV 存储器部分、这是您的链接器步骤为其生成警告的部分。

    https://software-dl.ti.com/ccs/esd/documents/ccs_files_in_projects.html
    https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html

    此致、
    Ryan