LIN诊断实现基于UDS协议的OTA升级功能代码及资料(支持AB面升级 ) 产品包括: 1.升级上位机源码; 2.MCU端源码(boot和app),包含LIN协议栈+UDS协议框架(包含常用SID服务代码) 3.LIN学习资料和ISO14229资料 开发板硬件(自行淘宝) 5.根据ldf文件生成满足标准2.1协议代码的配置工具 联系付款后联系我百度下载 (开发版价值一百块左右,MCU为复旦微FM33LE015A车规级芯片,方便移植到其他芯片,我还移植过TI芯片) LIN调试工具为图莫斯USB转LIN工具

摘要

本文基于复旦微电子 FM33FG0xxA 系列 MCU 平台,深入剖析一套完整的 LIN(Local Interconnect Network)总线 + UDS(Unified Diagnostic Services)协议栈实现的 OTA(Over-The-Air)固件升级系统。该系统严格遵循 ISO 14229-1(UDS)与 ISO 15765-2(基于 CAN/LIN 的传输层)标准,具备高可靠性、安全性与可维护性,适用于汽车电子、工业控制等对固件更新有严格要求的嵌入式场景。


一、系统架构概览

整个 OTA 升级系统由 上位机(PC 端)MCU 从机(嵌入式设备) 两部分组成,通过 LIN 总线进行通信:

  • 上位机:基于 MFC(Microsoft Foundation Classes)开发的图形化工具,提供用户界面用于加载固件、触发升级流程、显示状态与日志。
  • MCU 从机:运行在 FM33FG0xxA 芯片上的嵌入式程序,包含 LIN 通信栈、UDS 服务处理模块、Bootloader 以及应用逻辑。

系统采用 双分区(A/B Bank) 设计,确保升级失败时可回滚至旧版本,保障设备可用性。


二、核心功能模块详解

2.1 UDS 服务实现

MCU 端实现了多个关键 UDS 服务(SID),构成 OTA 升级的核心控制逻辑:

(1)SID 0x10 - DiagnosticSessionControl(会话控制)
  • 功能:切换诊断会话模式(默认会话、扩展会话、编程会话)。
  • 关键点:进入 编程会话(Programming Session) 是执行后续写入、擦除、下载等操作的前提。
(2)SID 0x27 - SecurityAccess(安全访问)
  • 功能:实现种子-密钥(Seed-Key)机制,防止未授权访问。
  • 流程
    1. 上位机请求种子(Sub-function = 0x01);
    2. MCU 返回随机种子;
    3. 上位机使用预设算法计算密钥;
    4. 上位机发送密钥(Sub-function = 0x02);
    5. MCU 验证密钥,成功则解锁安全等级(如 UDSSALV1)。

注:SID 0x34/0x36/0x37 等服务依赖此安全等级才能执行。

(3)SID 0x22 - ReadDataByIdentifier(读取数据标识符)
  • 功能:读取设备信息,如软件版本号。
  • 示例:DID = 0xFB88 时,返回 ssoftwarever[3](3 字节版本号)。
(4)SID 0x31 - RoutineControl(例程控制)
  • 功能:执行特定例程,如擦除 Flash、校验升级包完整性。
  • 关键例程
  • 0x0201:擦除指定地址范围的 Flash;
  • 0x0202:校验已接收数据的 CRC;
  • 0xFF01:检查编程依赖条件(如供电电压是否稳定)。
(5)SID 0x34 - RequestDownload(请求下载)
  • 功能:通知 MCU 准备接收指定长度的固件数据。
  • 参数:包含目标地址、数据长度(通常以字节为单位)。
  • 响应:返回最大块长度(Block Length),用于后续分包传输。
(6)SID 0x36 - TransferData(传输数据)
  • 功能:分块传输固件数据。
  • 格式
    c
    uint8t pkgdata[UPGRADEPKGSIZE + 2] = {0x36, blockSequenceCounter, ...data};
  • 关键机制:使用 块序列计数器(Block Sequence Counter) 确保数据顺序正确,防止丢包或乱序。
(7)SID 0x37 - RequestTransferExit(请求退出传输)
  • 功能:结束数据传输阶段,进入校验与激活流程。
  • 行为:MCU 设置状态为 UPGRADEWAITCRC_CHECK,等待上位机发起 CRC 校验(通过 SID 0x31)。

2.2 Flash 管理与双分区设计

  • 分区定义(见 mfconfig.h):
    c
    #define APP
    ZONEASTARTADDR (0x1400U)
    #define APP
    ZONEASIZE (0x7400U)
    #define APPZONEBSTARTADDR (0x8800U)
    #define APPZONEB_SIZE (0x7400U)
  • 升级流程
    1. 当前运行在 A 区;
    2. 新固件写入 B 区;
    3. CRC 校验通过后,更新引导标志;
    4. 重启后 Bootloader 跳转至 B 区运行;
    5. 若 B 区校验失败,则回退至 A 区。
  • Flash 操作接口
  • UTILS_FlashErase():按页/扇区擦除;
  • UTILS_FlashDataWrite():写入数据(需先擦除);
  • 写入后立即读回校验,确保数据一致性。

2.3 上位机交互逻辑

上位机(CLinUdsUpgradeDlg 类)实现以下关键功能:

  • 加载固件OnBnClickedButtonLoadfile() 读取 .bin 文件;
  • 获取版本:发送 SID 0x22 + DID 0xFB88,解析响应;
  • 升级流程控制
    1. 切换至扩展会话(SID 0x10);
    2. 执行安全访问(SID 0x27);
    3. 请求下载(SID 0x34);
    4. 循环发送数据块(SID 0x36);
    5. 请求退出传输(SID 0x37);
    6. 触发 CRC 校验例程(SID 0x31, RID=0x0202);
  • 错误处理:解析 NRC(Negative Response Code),如:
  • NRCSECURITYACCESS_DENIED:密钥错误;
  • NRCWRONGBLOCKSEQUENCECOUNTER:数据包序号错误;
  • NRCGENERALPROGRAMMING_FAILURE:Flash 写入失败。

2.4 通信与底层驱动

  • LIN 栈:基于复旦微官方驱动,实现物理层与数据链路层;
  • UDS 传输层:模拟 ISO 15765-2 的分包/重组机制(因 LIN 帧长度限制为 8 字节);
  • 外设支持
  • 使用 内部 Flash 控制器 进行擦写;
  • 依赖 ADC 监控供电电压(防止低电压下写入失败);
  • 利用 CRC 模块 加速校验计算。

三、升级流程时序图(简化)

上位机                        MCU
  |                              |
  |--- SID 0x10 (0x02) -------->|  切换到扩展会话
  |<-- SID 0x50 -----------------|
  |                              |
  |--- SID 0x27 (0x01) -------->|  请求种子
  |<-- SID 0x67 (seed) ---------|
  |--- SID 0x27 (0x02, key) --->|  发送密钥
  |<-- SID 0x67 -----------------|  安全解锁
  |                              |
  |--- SID 0x34 (addr, len) --->|  请求下载
  |<-- SID 0x74 (maxLen) -------|
  |                              |
  |--- [SID 0x36 x N] --------->|  传输数据块(带序号)
  |<-- [SID 0x76] --------------|
  |                              |
  |--- SID 0x37 ---------------->|  请求退出传输
  |<-- SID 0x77 -----------------|
  |                              |
  |--- SID 0x31 (0x0202, CRC) ->|  触发CRC校验
  |<-- SID 0x71 或 0x7F --------|  成功或失败
  |                              |
  |--- ECU Reset --------------->|  重启激活新固件

四、安全性与可靠性设计

  1. 安全访问机制:防止非法刷写;
  2. 双分区冗余:升级失败可回滚;
  3. CRC 校验:确保固件完整性;
  4. 电压监控:避免低电压写入导致 Flash 损坏;
  5. NRC 错误码体系:精准定位失败原因;
  6. 块序号校验:防止数据错乱。

五、总结

该 LIN+UDS OTA 升级系统在资源受限的 MCU 平台上,完整实现了汽车电子级的固件更新能力。其模块化设计、严格的状态机控制、以及多重安全校验机制,为嵌入式设备的远程维护与功能迭代提供了坚实基础。未来可扩展支持差分升级、加密固件、多节点并行升级等高级特性。

**关键词**:LIN, UDS, OTA, Bootloader, SID 0x34/0x36/0x37, SecurityAccess, 双分区, FM33FG0xxA

LIN诊断实现基于UDS协议的OTA升级功能代码及资料(支持AB面升级 ) 产品包括: 1.升级上位机源码; 2.MCU端源码(boot和app),包含LIN协议栈+UDS协议框架(包含常用SID服务代码) 3.LIN学习资料和ISO14229资料 开发板硬件(自行淘宝) 5.根据ldf文件生成满足标准2.1协议代码的配置工具 联系付款后联系我百度下载 (开发版价值一百块左右,MCU为复旦微FM33LE015A车规级芯片,方便移植到其他芯片,我还移植过TI芯片) LIN调试工具为图莫斯USB转LIN工具

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐