0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文浅谈FlexCAN OTA

jf_pJlTbmA9 来源:灵动MM32MCU 作者:灵动MM32MCU 2023-09-27 16:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1、简介

FlexCAN OTA 是由灵动提供的一种基于 UDS 协议使用 CAN 总线实现对 MCU 的 App 固件更新的解决方案。该解决方案的软件部分主要由:Bootloader、App和PC Tool三部分构成,硬件部分如图 1 所示。

wKgaomUDzKKATx6NAADC5W2H_0Q899.png

图 1 MCU 与 PC 机交互示意图

1.1 关键特性

基于 UDS(ISO14229) 标准

基于 CAN(ISO11891-1) 标准

具备对 App 固件 CRC 完整性校验功能

使用主机上传 Flash driver 到 MCU

在 Bootloader 中进行 App 有效性检查

提供用于验证 App 固件更新的 PC 端上位机工具

1.2 什么是 FlexCAN ?

CAN 是控制器域网 (Controller Area Network, CAN) 的简称,是一种功能丰富的车用总线标准,被设计用于在不需要主机(Host)的情况下,允许网络上的单芯片和仪器相互通信。是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发,并最终成为国际标准(ISO11898),是国际上应用最广泛的现场总线之一。

FlexCAN 是 CAN 协议的一个高完成度版本。以灵动 MM32F0140 系列 MCU 内嵌的 FlexCAN 为例,其符合 ISO 11898-1 标准,支持 CAN 2.0B 版本协议,位速率高达 1 Mbps,具有非常灵活的用于传输和接收的邮箱系统,可以接收和发送 11 位标识符的标准帧,也可以接收和发送 29 位标识符的扩展帧,主要被设计用作车载串行总线,可满足实时处理、车辆在电磁干扰环境下的可靠操作、成本效益、带宽等要求。

1.3 什么是 UDS ?

UDS(Unified Diagnostic Services,统一诊断服务)是一种用于汽车电子控制器 ECU (Electronic Control Units) 环境下的一种诊断通信协议,可实现诊断、固件更新、日常测试等功能,在 ISO 14229 中规定了其实现标准。

在本实例中,UDS 通信是在客户端-服务端关系中执行的。客户端是上位机下载软件运行于 PC 机,服务端是带有FlexCAN IP模块的 MM32 MCU。例如,将 CAN 总线接口连接到 MCU,并将 UDS 请求发送到 MCU。当 MCU 支持 UDS 服务时,它将根据客户端发出的请求做出相应的响应。

1.4 为什么用 Bootloader ?

对于 MCU 而言,如果程序内置有基于FlexCAN 的 Bootloader,则每次更新 MCU 的固件则不需要拆开外壳也不必再使用烧录器进行烧录,而可直接通过 CAN 总线来更新程序,这样更方便也更安全,而且随着智能化的普及,甚至可以对 MCU 进行远程升级。Bootloader 程序结构对比如图 2 所示:

wKgZomUDzKOAC9SsAABwZBPH-eE189.jpg

图 2 程序结构对比框图

1.5 为什么基于 UDS ?

为了规范 Bootloader 的全过程,通过使用成熟的平台进而提供高质量 Bootloader。因 UDS 在设计时考虑了 Bootloader 的需求,并为 Bootloader 提供了相关服务以供使用,比如诊断会话控制、ECU 重置、读取数据、请求下载、传输数据、请求传输退出等,可以实现更高效和可靠的刷写功能。故主机厂普遍会要求在 UDS 规范的基础上完成 Bootloader 功能。

1.6 用到了哪些 UDS 服务?

在 Bootloader 中,使用到 UDS 的 $10、$11、$27 和 $3E 基础诊断服务,$22、$2E 读写 DID 服务,$31、$34、$36 和 $37 固件数据传输相关服务。UDS 服务概览如表 1-1 所示:

表 1-1

wKgaomUDzKSAKxJnAAGP6uvAfgQ512.jpg

2、Bootloader

Bootloader 是一段允许在不使用烧录器的情况下更新App固件的代码,基于灵动 MindSDK 实现的 Bootloader 样例工程支持 MDK、IAR 和 ARMGCC 三种工具链进行开发。在实际的使用过程中只需要在第一次使用时通过烧录器将 Bootloader 烧录进 MCU,后续的 App 都可以通过使用基于 CAN 总线的 UDS协议完成固件更新。

2.1 Bootloader 功能特性

支持 Service 27,用户可根据自身需求添加安全访问算法。

支持 Service 22 和 Service 2E,用户可以根据自身需求添加策略,进行信息读出与存储。

外置 Flash driver,使用时通过外部 PC 或后台将 Flash driver 加载到 MCU 的 RAM 中进行安全的 Flash 擦写操作。

提供看门狗监控功能,用户可根据自身需求选择性开启看门狗监控程序。

2.2 客制化修改说明

修改诊断 ID

可在样例工程的 board/FblHalCan.h 中修改诊断 ID 的值。

指定数据填充值

当需要发送的数据长度不满足 8 字节长度时,通过宏定义可以更改填充,用户可以在样例工程的 board/FblHalCan.h 中指定填充值。

使能看门狗

用户可以在样例工程的 board/FblMacros.h 中打开宏开关 WDG_ENABLE 使能看门狗服务,并且实现 ResetWdg 操作。

安全访问算法接口

Bootloader中支持 27 Service,用户可在样例工程的 board/FblMacros.h 中使能宏开关 ENABLE_SECURITY_ALGORITHM_VERIFICATION 根据自身需求添加安全访问算法。

2.3 Flash driver 介绍

什么是Flash driver?

在OTA程序升级过程中,发送App可执行文件之前,向底层先发送一段二进制文件,这段代码实现了对MCU片内 Flash 的擦写功能,称为 Flash driver。

Flash driver存在的意义

在车载ECU控制器中,为了安全考虑,会尽可能的避免在代码中固化有对flash进行擦写操作,主要为了避免在程序跑飞时误调用该部分代码,使软件代码部分受到破坏。

Flash driver的实现方式

a.将flash driver固化在底层flash中,在运行的时候将flash中的flash driver拷贝到ram中来运行,这是比较传统的方式,但是避免不了提到的安全性问题。

b.将flash driver这段代码保存在PC端或后台,在每次执行OTA升级前,将这段代码先发送给MCU,这样可以避免方式 a 中提到的安全性问题。

3、App

基于灵动 MindSDK 提供的 flexcan_ota_app 样例工程进行开发和生成用于更新的 HEX 格式 App 固件生成,无需任何适配操作即可生成用于 OTA 升级的 App 固件。

3.1 使用说明

将 Bootloader 通过下载器下载到 MCU 中后,可通过提供的 PC Tool 来刷写生成的固件,通过 PC Tool 下载成功后,一方面 PC 终端会有下载成功提示,另一方面也可以查看开发板上对应固件实现的功能是否开始执行。

关于 App 固件可从提供的 flexcan_ota_app 样例工程编译源码并将生成“.hex”格式的 App 固件进行加载。

3.2 App 设计规范

App 与 Bootloader 存放在 MCU 的同一块 Flash 的两个不同区域中,为保证两个软件的正常使用,App 设计遵循表 2-1 和表 2-2 所述规范。

表 2-1

wKgZomUDzKaAWI5KAABVoL-V9Ys846.png

表 2-2

wKgaomUDzKiAXeNUAAA7O3AacIg993.png

4、PC Tool

Flexcan OTA PC Tool 是用于验证灵动 MindSDK 中提供的 FlexCAN OTA 解决方案的简易 PC 端上位机工具。

4.1 功能特性

支持 CAN 通信速率自定义

支持 Win10 操作系统下运行

支持默认参数直接运行和命令行下带参数运行

支持直接加载 MDK 和 IAR 工具链下生成的 HEX 格式文件

基于 Python 使用 python-udsoncan 开发,可根据不同需求灵活进行二次开发

4.2 开发环境

本工具在 Win10 平台使用 Python 进行开发,基于 UDS 使用 CAN 协议,支持 PEAK CAN卡与 MCU 进行通讯。

4.3 使用说明

请按照如下步骤进行操作:

a、下载 Bootloader 到 MCU

将提供的 flexcan_ota_bootloader 样例工程编译并下载到开发板中。

b、安装 CAN 卡驱动并连接 MCU

在这里我们用到的是PCAN-USB,下载并安装驱动(https://peak-system.com.cn/driver/) ,并将 PCAN-USB 和开发板上的 CAN 收发器通过双绞线连接以及通过 USB 和 PC 机连接。

c、运行 FlexCAN OTA PC Tool

方式一:按照默认参数直接运行

直接双击 flexcan_ota_pc_tool_v1.0.exe,如图 3 所示,默认将按照 500Kbps 的比特率进行 CAN 通信,Flash_driver 文件的加载地址为当前路径下的文件(./flash_driver.hex), App 文件的加载路径为当前路径下文件(./app.hex)。

wKgZomUDzKmAbg3kAAEbTv4T9NU992.jpg

图 3

方式二:按照指定参数运行

在 Win10 平台下启动命令行窗口并切换到当前路径下,获取帮助如图4所示,输入如下指令并按回车键:

flexcan_ota_pc_tool_v1.0.exe-h

wKgZomUDzKuAQMSWAACkH2Hr0Mg825.jpg

图 4

按照指定参数运行如图 5 所示,输入如下指令并按回车键:flexcan_ota_pc_tool_v1.0.exe-b500000-f"./flash_driver.hex"-a"./app.hex"

其中 flash_driver.hex 文件为用于安全地擦写片内 flash 的代码,在每次 OTA 更新中复用即可。

wKgaomUDzK2AJK4OAAFWKSqCh8Q417.jpg

图 5

d、结束

等待 FlexCAN OTA 固件更新流程结束,并按任意按键退出。

5、注意事项

FlexCAN OTA Tool 为用于验证基于 UDS 使用 CAN 协议进行 App 固件更新的上位机工具,PC 端使用 PEAK-CAN 与 MCU 通讯,仅支持在 Win 10 操作系统下运行, 且用于功能性验证,若遇到软件闪退等问题请重启该软件并复位 MCU。该工具可根据开发者项目需求进行二次开发。

以上介绍是基于MM32F0140 系列 MCU 进行介绍和示例演示,相关源码请访问灵动官网进行获取:

01)进入灵动官网(www.mm32mcu.com)

02)打开“产品”菜单下 MM32F0140 页面,浏览“文档”列表。

wKgZomUDzK-AQcBfAAAq_aLy538130.png

03)在“应用笔记”中下载“AN0035_FlexCAN_OTA”文档,获取源码。

wKgaomUDzLCAC2KmAABBEty7Zfo463.png

6、参考文献

《ISO11898-1》

《ISO14229》

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    58

    文章

    3012

    浏览量

    471474
  • 总线
    +关注

    关注

    10

    文章

    3014

    浏览量

    91307
  • OTA
    OTA
    +关注

    关注

    7

    文章

    623

    浏览量

    37961
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    硕博电子OTA远程升级平台#OTA#硕博电子#OTA升级

    OTA
    长沙硕博电子科技股份有限公司
    发布于 :2025年10月29日 11:19:46

    使用ymodem_ota时如何更换串口?

    现在使用串口1可以正常使用ymodem_ota进行固件升级,但是现在项目需要使用串口1来进行其他作用,求怎么把串口1更改为串口2进行ota升级?
    发表于 09-25 06:17

    解决方案 | 云管端体化OTA HIL测试解决方案

    TOSUN云管端体化OTAHIL测试解决方案随着智能网联汽车的快速发展,OTA(Over-the-Air)技术已成为车辆软件升级的核心手段。为满足日益严格的法规要求和技术挑战,同星智能(TOSUN
    的头像 发表于 09-19 20:03 483次阅读
    解决方案 | 云管端<b class='flag-5'>一</b>体化<b class='flag-5'>OTA</b> HIL测试解决方案

    AS32S601在轨重构(OTA)方案的优化与分析

    策略,并结合芯片的硬件特性,探讨其在不同应用场景中的适用性及潜在挑战,旨在提供个全面、客观的技术评估,为相关领域的研究与实践提供参考。 1. 引言 1.1 背景知识 在现代嵌入式系统中,OTA技术已成为提升系统灵活性和可靠性的重要手段。
    的头像 发表于 09-13 14:52 2258次阅读
    AS32S601在轨重构(<b class='flag-5'>OTA</b>)方案的优化与分析

    技术笔记 | Ubuntu 系统 OTA 升级全流程详解

    开启、命令使用到实战案例与问题排查,为开发者提供套可直接落地的操作指南、recovery配置updateEngine支持因OTA升级过程中需要进入到recov
    的头像 发表于 07-31 08:32 832次阅读
    技术笔记 | Ubuntu 系统 <b class='flag-5'>OTA</b> 升级全流程详解

    BlueNRG-1 OTA卡在PROGRAMMING,进度直为0是怎么回事?

    采用的是手机 ST BLUE DFU APP + bluenrg-1小系统板,使用的是OTA service manager framework 模式,DK包使用的是DBlueNRG-1_2 DK
    发表于 07-18 08:20

    WICED 的OTA2如何启动?

    ; INFO:0001 00:00:00.172 OTA2_IMAGE_FLASH_BASE 0x00000000INFO:0002 00:00:00.178
    发表于 07-09 06:05

    东风日产N7开启首次OTA升级

    近日,东风日产举办“NI好 N7首次OTA升级发布会”,并宣布OTA升级即日开启推送。
    的头像 发表于 07-05 13:57 966次阅读

    自动驾驶汽车需要频繁OTA更新吗?

    [首发于智驾最前沿微信公众号]最近听到个特别有意思的话题,那就是智能汽车的OTA(Over-the-Air)是否可以与电子产品的OTA直接对标?回看2024年的数据,各车企的OTA
    的头像 发表于 05-26 09:12 604次阅读

    请问如何使S32K312 FLEXCAN的以下区域在写入后读取与写入不同?

    最近遇到了这样个问题:写入下面 FLEXCAN 区域的数据怎么会和写入的数据不致呢? 当前工程中有这样个功能:上电后,会查看该区域的数据。预定义值将被写入 CAN 控制器的邮箱数
    发表于 04-10 06:20

    IMX8ulp调试CAN通信功能,在dtb文件中找不到flexCAN设备节点怎么解决?

    我正在调试 CAN 通信功能,但在 dtb 文件中找不到 flexCAN 设备节点。如果我想让它工作,解决方案是什么?
    发表于 04-09 08:05

    解锁OTA远程升级方案!基于RK3562全国产平台

    在设备维护成本高、用户体验难提升的双重难题下,OTA(Over-the-Air)空间下载技术的出现,无疑成为破解困境的“金钥匙”,它是种通过无线网络实现设备远程升级的技术,全程数据无损。OTA既可
    的头像 发表于 04-07 10:15 1080次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b>解锁<b class='flag-5'>OTA</b>远程升级方案!基于RK3562全国产平台

    浅谈车规MCU (MGEQ1C064) OTA升级

    本帖最后由 noctor 于 2025-3-4 16:17 编辑 浅谈车规MCU (MGEQ1C064) OTA升级 OTA升级为汽车打造新价值 OTA升级(Over-The
    发表于 03-04 12:52

    OTA软件升级管理系统

    OTA(Over-the-Air Technology,空中下载技术)是通过空中下载的方式对车辆中的软件进行远程升级。经纬恒润OTA软件升级管理系统基于软件架构、应用架构、业务架构和技术架构,为整车提供云-管-端-屏完整OTA
    的头像 发表于 01-13 09:39 1599次阅读
    <b class='flag-5'>OTA</b>软件升级管理系统

    OTA升级】无需数据线,条命令即可完成固件升级!

    OTA无线升级过程视频演示:OTA介绍OTA(Over-The-Air,空中升级)是种通过无线通信技术实现远程更新设备固件或软件的方法。设备批量投入使用后,由于部署范围太广、设备数量
    的头像 发表于 12-11 01:00 5438次阅读
    【<b class='flag-5'>OTA</b>升级】无需数据线,<b class='flag-5'>一</b>条命令即可完成固件升级!