打印
[MM32硬件]

FlexCAN OTA 技术详解与应用场景探讨

[复制链接]
191|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
喂什么玩意|  楼主 | 2025-6-21 10:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
随着汽车电子与智能制造的发展,对远程固件升级(OTA,Over-the-Air)的需求不断增加,尤其在车载控制器、工业网关等复杂系统中,通过 CAN 总线进行安全可靠的 OTA 更新 正成为主流选择。

灵动微电子针对该需求推出的 FlexCAN OTA 解决方案,基于标准 UDS(Unified Diagnostic Services)协议,实现了对 MM32 系列 MCU 的高可靠固件升级。

本文将深入剖析该方案的技术原理、关键模块、实现方式及其在实际应用中的价值。


一、核心概念解析1. FlexCAN 是什么?
FlexCAN 是 NXP 首创的一个高鲁棒性 CAN 控制器架构,灵动在其部分 MM32 系列(如 MM32F3270)中参考实现了类似功能,包括:
  • 更完善的帧缓冲管理;
  • 更强的中断控制能力;
  • 适用于工业与车载的复杂 CAN 网络。

相比传统 CAN 控制器,FlexCAN 更适合大规模节点通信及实时响应要求高的场景。
2. 什么是 UDS 协议?
UDS(ISO 14229) 是一套汽车行业标准化诊断通信协议,用于:
  • 读取 ECU 信息;
  • 写入数据块(如 ECU 配置、固件);
  • 控制诊断会话、重启命令等。

在 OTA 场景中,UDS 提供了完整的数据包传输与安全升级流程,包括:
  • 0x10:会话切换(如从默认会话切到编程会话);
  • 0x34/0x36/0x37:固件数据传输相关服务;
  • 0x11:ECU 重启指令。

3. Bootloader 的角色
OTA 的关键组件是 Bootloader,其职责包括:
  • 启动判断:区分是否进入主程序或升级模式;
  • 接收并验证 UDS 传输的数据;
  • 将新固件写入 Flash;
  • 保证升级失败时 MCU 不“变砖”。


二、FlexCAN OTA 系统架构
OTA 过程通常分为如下几步:
plaintext
[ 上位机工具 ] <--UDS--> [ Bootloader 固件(运行在 MCU) ]                             |                      [ Flash 存储区划分 ]

  • 上位机工具:如 CANoe、UDS Flash 工具、PC 软件等,向 MCU 发送 UDS 指令。
  • MCU 端 Bootloader:解析 UDS 请求,通过 Flash 接口完成固件接收、写入与校验。
  • Flash 区域规划
    • Bootloader 区
    • App 主程序区(新旧固件)
    • 参数或备份区(可选)



三、关键代码与功能模块示意1. Bootloader 启动逻辑c
if (received_UDS_enter_program_mode()) {    enter_bootloader(); // 接收固件数据} else {    jump_to_user_app(); // 启动主程序}

2. 典型 UDS 服务处理流程(0x34 数据传输)c
case UDS_REQUEST_DOWNLOAD:    prepare_flash_write();    send_positive_response();case UDS_TRANSFER_DATA:    buffer_write();    send_positive_response();case UDS_REQUEST_TRANSFER_EXIT:    verify_checksum();    send_positive_response();

3. Flash 写入流程c
void write_flash(uint32_t addr, uint8_t* data, uint16_t len) {    FLASH_Unlock();    for (int i = 0; i < len; i += 4) {        FLASH_ProgramWord(addr + i, *(uint32_t*)(data + i));    }    FLASH_Lock();}


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

606

帖子

0

粉丝