单片机/MCU论坛
直播中

吴湛

11年用户 997经验值
擅长:电源/新能源
私信 关注
[问答]

AURIX tc367通过 MCU SOTA 更新逻辑 IC 闪存是否可行?

你好专家:我的用例是 MCU 通过 SPI 连接到逻辑 IC,逻辑 IC 连接到 8MB 闪存,但 MCU PFLASH 大小为 2MB,通过 MCU SOTA 更新逻辑 IC 闪存是否可行?

回帖(1)

李华

2025-8-13 17:51:14

是的,通过 AURIX TC367 的 MCU SOTA 机制更新外部逻辑 IC 控制的 8MB 闪存是可行的。但这需要仔细的设计和实现,而不是开箱即用的功能。让我们分解一下关键点和挑战:


可行性分析:




  1. 核心概念可行: SOTA 的本质是 MCU 接收新固件映像并将其写入目标存储设备。在你的架构中:



    • 目标存储设备: 是逻辑 IC 后面的 8MB 闪存。

    • MCU 的作用: TC367 是 SOTA 更新的控制器和发起者。它需要:

      • 接收新固件数据包(例如,通过 CAN FD, Ethernet, UART,甚至内部通信)。

      • 验证固件的完整性和真实性(使用加密模块)。

      • 通过 SPI 接口与逻辑 IC 通信,发送命令和数据来擦除、编程外部 8MB 闪存。

      • 管理更新过程(状态机、错误处理、回滚机制)。





  2. MCU PFlash 大小 (2MB) 不是直接障碍: 2MB PFlash 限制了 MCU 自身 固件的大小,但不限制它操作 的外部存储。关键点在于:



    • SOTA 引导加载程序 (Bootloader): 一个精简、可靠的引导加载程序需要常驻在 MCU 的 PFlash 中(通常在受保护的引导扇区)。这个引导加载程序负责初始 SOTA 流程(接收更新请求、验证初始包、跳转到更新处理程序)。2MB 足以容纳一个功能丰富的引导加载程序。

    • 应用程序固件: 被更新的目标固件存储在 8MB 外部闪存中,不影响 MCU PFlash 的使用。

    • 更新处理程序代码: 执行实际外部闪存擦除/编程操作的代码可以:

      • 是引导加载程序的一部分(如果引导加载程序足够大且复杂)。

      • 作为第一阶段更新包的一部分下载并临时存储在 MCU PFlash 的应用程序区域(如果当前应用程序已被擦除用于更新)或内部 DSRAM 中(如果代码足够小)。

      • 存储在外部闪存的一个固定、受保护的区域(Bootloader 需要知道如何找到并加载它)。


    • 数据缓冲区: TC367 的 DSRAM(数据 SRAM,几百 KB 级别)用作 SPI 通信和闪存操作的数据缓冲区。你不需要一次性缓冲整个 8MB 映像。更新是按块(例如 4KB, 8KB, 64KB)进行的:

      • 从通信接口接收一个数据块到 DSRAM。

      • 验证该块(可选但推荐,用于传输错误检测)。

      • 通过 SPI 向逻辑 IC 发送命令和数据,将该块编程到外部闪存的特定地址。

      • 重复直到所有块完成。





关键挑战和设计要点:




  1. 逻辑 IC 的角色和接口定义:



    • 核心功能: 逻辑 IC 必须充当 MCU 与外部 8MB 闪存之间的“智能桥梁”。它需要理解 MCU 通过 SPI 发送的命令(如 Sector Erase, Page Program, Read, Read Status Register, Write Enable 等),并生成正确的总线时序和控制信号来操作外部闪存。

    • 协议设计: 你需要在 MCU 和逻辑 IC 之间定义一个 清晰、可靠的命令协议。例如:

      • 0x01 + Addr[31:0] = 擦除指定地址开始的扇区。

      • 0x02 + Addr[31:0] + Length[15:0] + Data[Length] = 在指定地址开始编程指定长度的数据。

      • 0x03 + Addr[31:0] + Length[15:0] = 从指定地址读取指定长度的数据。

      • 0x04 = 读状态寄存器等。

      • 协议应包括响应/确认机制和错误指示。


    • 地址映射: 确保 MCU 的逻辑地址空间视图与外部闪存的物理地址以及逻辑 IC 的地址处理方式一致。8MB 地址空间需要 24 位地址(通常用 3 Bytes 表示)。SPI 传输地址时需考虑字节序。

    • 可靠性: 逻辑 IC 需要稳健地处理命令、CRC 校验(可选但推荐)、超时和错误恢复。




  2. MCU 端 SOTA 固件实现:



    • Bootloader: 需要实现基本的 SOTA 功能:通信接口驱动、固件包接收(处理分包、重组)、安全验证(签名校验、哈希验证 - 利用 AURIX 的 HSM/Crypto 模块)、状态管理(更新中、成功、失败)、回滚标志设置。

    • 外部存储器驱动: 需要实现一个驱动层,该层理解你设计的 SPI 命令协议,并向逻辑 IC 发送正确的命令序列来执行 Init, Erase Sector, Program Page, Read, Verify (可选,推荐) 等操作。这个驱动很可能需要集成到 Bootloader 或第一阶段更新程序中。

    • 分块处理: 设计高效的算法,将大的固件映像分成适合 DSRAM 大小的块进行传输和编程。管理擦除块边界(擦除操作通常比编程操作粒度大得多)。

    • 错误处理与恢复:

      • 通信错误(SPI, 下载通道)。

      • 逻辑 IC 命令执行错误(超时、状态寄存器错误标志)。

      • 编程/验证失败。

      • 电源故障(需要设计回滚机制,如 A/B 分区或状态标志)。


    • 安全:

      • 固件验证: 在写入外部闪存之前,必须验证下载的固件包的完整性和来源真实性(使用数字签名)。

      • 安全启动: MCU 的 Bootloader 应配置为信任链的根,验证从外部闪存加载的应用程序的签名(如果是链式加载)。

      • 加密: 如果需要,可以在传输过程中或存储时对固件进行加密(利用 AURIX Crypto 模块)。





  3. 性能考虑:



    • SPI 速度(需要足够快以减少整体更新时间)。

    • 外部闪存的擦除/编程时间(通常是瓶颈)。

    • MCU 处理开销(通信、验证、任务调度)。




  4. 分区策略:



    • 将外部 8MB 闪存划分为至少两个区域(如 Active Firmware A, Active Firmware B/Staging Area)。

    • 使用双分区(A/B)方案允许回滚:始终有一个已知良好的固件版本可用。新固件写入非活动分区,验证成功后切换活动分区标志(存储在可靠位置,如 MCU PFlash 或外部闪存受保护扇区)。

    • Bootloader 根据分区标志决定加载哪个应用程序。




总结:



  • 可行: AURIX TC367 的 2MB PFlash 大小不是更新外部 8MB 闪存的障碍。关键在于利用 DSRAM 作为缓冲区进行分块处理。

  • 核心挑战:

    • 定义并实现 MCU 与逻辑 IC 之间的可靠 SPI 命令协议。 逻辑 IC 必须能高效、准确地执行闪存操作。

    • 在 TC367 Bootloader/SOTA 处理程序中实现健壮的外部闪存驱动和更新状态机。

    • 设计安全的固件验证和更新流程(签名、A/B分区、回滚)。


  • 必要条件:

    • 精心设计的逻辑 IC FW (FW)。

    • 扩展的 TC367 Bootloader/SOTA 固件,包含外部闪存驱动和更新逻辑。

    • 清晰的闪存分区策略和安全启动配置。



建议步骤:



  1. 精确定义 SPI 命令协议: 涵盖所有必需的闪存操作(擦除、编程、读取、状态、复位)。

  2. 实现和测试逻辑 IC FW: 确保它能可靠地响应 MCU 的命令操作外部闪存。使用 MCU 编写测试程序进行验证。

  3. 设计 TC367 Bootloader/SOTA 架构:

    • 决定 Bootloader 范围和位置。

    • 集成外部闪存驱动。

    • 设计固件接收、验证、分块更新逻辑。

    • 设计 A/B 分区方案和回滚机制。

    • 集成安全验证(签名/哈希)。


  4. 实现和彻底测试 TC367 Bootloader/SOTA:

    • 单元测试驱动功能。

    • 集成测试整个更新流程(包括模拟失败场景)。

    • 进行压力测试和性能评估。


  5. 定义安全启动流程: 配置 Bootloader 如何验证从外部闪存加载的应用程序。


这是一个中等复杂度的嵌入式系统工程任务,需要对 AURIX 架构、SPI 通信、NOR 闪存操作和安全更新原理有深入理解。仔细规划和分阶段实施是关键。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分