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

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

3天内不再提示

图解基于UDS的Flash BootLoader

汽车ECU开发 来源: 汽车电子嵌入式 2023-08-14 10:49 次阅读

130eb3e0-3980-11ee-9e74-dac502259ad0.png

bootloader程序架构

1327a508-3980-11ee-9e74-dac502259ad0.jpg

略有简化的bootloader图

这张图和恒润教程中的BootLoader流程大体是一致的。

疑问点

Q:图中的烧写顺序是34-36-34-36-34-36-37,但另一些材料中的顺序是34-36-36-36-37。

A:这个问题这样理解,34-36-36-36-37的前提是你要下载的数据是连续的数据,每个36所使用的地址信息,都是34中包含的地址信息再加上一定的偏移量。

如果需要下载不连续的数据,就需要重新进行34服务或31(擦除)-34服务。

1、为什么要搞Bootloader?为什么要基于UDS搞Bootloader

假如你的控制器有外壳,却没有设计bootloader的话,每次更新ECU的程序,你都需要把外壳拆开,用烧写器来更新程序。有了bootloader,你就可以通过CAN线来更新程序了。更方便些的话,甚至可以通过OTA进行远程升级。

那为什么使用UDS呢?主要是为了规范bootloader的全过程。比如烧写小明牌ECU时,我们肯定希望其他牌子的ECU处于一个静默的状态,都歇一歇,这就需要一个大家共同执行的标准来进行规范,什么时候停发数据,什么时候不能再储存DTC了等等。

又比如在调试时,大家肯定希望你的控制器经由CAN烧写的过程是大家都能看得懂的,是满足于某种规范的。由此,UDS在设计时考虑了bootloader的需求,专门为bootloader设计了几个服务,供大家使用。主机厂在发需求时自然就要求大家要在UDS规范的基础上完成bootloader功能了。

2、Bootloader应支持的UDS服务

显然bootloader不需要支持19/14等故障类服务。

在boot程序中,10/27/11/3E这样的基础诊断服务需要支持,22/2E读写DID的服务需要支持,31/34/36/37这4个bootloader主打服务需要支持,共10个。

在app段程序中,85和28服务需要支持,保证暂停CAN正常通信,暂停记录DTC,让被升级设备专心升级。

13315562-3980-11ee-9e74-dac502259ad0.jpg

10种boot段服务+2种app段服务

3、Bootloader——三段式

(1)预编程阶段

1. 3E TP报文。

2. 10服务切换到03扩展模式。

3. 85服务和28服务,关DTC和非诊断报文。使整个CAN网络处于安静的状态。这是对整车网络进行操作的,一般都是以功能寻址的方式来发送。注意先用85服务关闭DTC,再使用28服务关报文。

1348f050-3980-11ee-9e74-dac502259ad0.png

(2)主编程阶段

1. 10服务切换到编程模式,这里要注意,正确的方式是App段程序回复0x78 NRC,接下来跳转到boot段程序,最后由Boot段程序来回复10 02的肯定响应。错误的方式是由App段回复10 02的肯定响应,再进行跳转。

2. 读取一个DID,tester要判断一下返回值。返回值里面可能包含密钥的一部分信息。

3. 27服务,解锁,通过安全验证。

13640de0-3980-11ee-9e74-dac502259ad0.jpg

注意10 02服务不应直接进行肯定响应,存在风险

1370d78c-3980-11ee-9e74-dac502259ad0.jpg

4. 写DID指纹,标记写软件人的身份,ECU回复写指纹成功。(根据OEM要求来执行)

5. 31服务-擦除Flash。ECU肯定响应,擦除成功。

6. 34服务,请求数据下载,ECU回复确认最大块大小。

7. 36服务,开始传输数据。每个块传输完成后,ECU肯定响应。判断是否还有更多块需要下载。最多可以支持255个块。

8. 37服务,请求退出传输。ECU肯定响应。

9. 31服务-校验APP段程序,检查编程一致性/完整性。ECU肯定响应。校验成功。

10. 若有更多块需要下载,重新执行31(擦除Flash区域)-34-36-37-31(校验)服务。若无,往下执行。

11. 11服务,ECU复位。之后应直接跳转到新下载的APP段程序中。

138fe19a-3980-11ee-9e74-dac502259ad0.jpg

31(擦Flash)-34-36

13aed8c0-3980-11ee-9e74-dac502259ad0.jpg

36-37-31(校验)

(3)后编程状态

1. 10服务切换到03扩展会话。

2. 执行28服务和85服务,使能非诊断报文和DTC。这是对整车网络进行操作的,一般都是以功能寻址的方式来发送。注意先执行28,后执行85,避免DTC误报。

13b8126e-3980-11ee-9e74-dac502259ad0.png

3. 27服务,安全校验,准备写入数据。

4. 2E服务,将编程信息写入到ECU中。

5. 10服务,退回01默认会话。结束。

13d4b478-3980-11ee-9e74-dac502259ad0.jpg

4、BootLoader的启动顺序与转换流程

以下流程仅作为参考,有很多不规范之处。欢迎大家留言探讨。

1. ECU上电或复位后,先进入Boot段。从Flash/EEPROM中读取 App有效标志,运行boot标志 。

2.判断运行boot标志,若为1,则进入Boot段的编程会话(安全等级为上锁),之后写Flash/EEPROM(不安全操作),运行boot标志清零。若S3定时器超时则退回Boot段默认会话。

3. 经过安全访问进入Level2解锁状态,开始执行App内存擦除,擦除后 App有效标志清零(不安全操作)。

4. 开始烧写。烧写成功后运行boot标志写0,App有效标志 写1。

2*. 判断运行boot标志,若为0,则进入Boot段的默认会话。

3*. 50ms后判断 App有效标志,若为1,则跳转到 App段默认会话。实现时使用汇编指令执行APP段程序;若为0,退回Boot段默认会话,且不再判断 App有效标志,不会再尝试进入App段。

4*. App段程序若收到了编程会话请求,运行boot标志写1 ,随即执行ECU复位,这样会重新进入boot段程序。

注:从BOOT跳入APP前需要判断APP的数据完整性,例如进行CRC校验。

5、问题点

Q:假如烧进去了不良App段程序,无法返回boot段程序怎么办?

A:参照电脑的开机方式,在ECU开机之后,预留很短的一段时间维持在boot状态,在这段时间内,若收到指定报文(比如,电脑是按住F8),那么就不跳转到App段了。

Q:运行boot标志和App有效标志为了安全起见,应该保存到哪里?

A:运行boot标志可以放置在RAM中,由Boot和App共用。

Q:上文图中的CAN数据实例,为什么出现了两次CRC的校验?CRC校验是对哪些数据的校验?

A:OEM不希望ECU中保存有可以擦写Flash的代码,所以BootLoader需要在烧录App之前,先把擦写Flash的代码通过UDS烧写到RAM中,烧完了之后进行一下31服务下的CRC校验。之后烧录ECU的App程序,App可能会因为地址不连续而分为很多段下载。下载完毕后需要进行总的CRC校验。不管哪次校验,CRC所校验的数据是代码的数据段,即36服务中传输的有效数据。

审核编辑:汤梓红

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

    关注

    10

    文章

    1551

    浏览量

    146652
  • CAN
    CAN
    +关注

    关注

    56

    文章

    2470

    浏览量

    459254
  • 通信
    +关注

    关注

    18

    文章

    5706

    浏览量

    134405
  • ecu
    ecu
    +关注

    关注

    14

    文章

    822

    浏览量

    53888
  • bootloader
    +关注

    关注

    2

    文章

    230

    浏览量

    45050

原文标题:图解基于UDS的Flash BootLoader

文章出处:【微信号:eng2mot,微信公众号:汽车ECU开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Flash bootloader 软件免费体验报名了,数量有限仅有5套测试板

    Flash bootloader 软件免费体验报名了,数量有限仅有5套测试板,先到先得。2015-04-21 15:36来源:深圳市富裕龙电子作者:Ken使用群体:汽车电子ECU开发人员,测试人员
    发表于 04-25 17:23

    Infineon XC2785 bootloader的启动代码跳转怎么跳?

    用XC2785做bootloader,用uds协议,两个程序之间怎么跳转?
    发表于 09-16 19:02

    Bootloader如何写入Flash

    1. Bootloader如何写入Flash ?初学者一般都会遇到如何将程序写入处理器的问题。对于不同的处理器,可以采用不同的方法。例如Intel的Xscale处理器可以...
    发表于 12-22 07:32

    STM32 Bootloader UDS技术要点是什么?

    STM32 Bootloader UDS技术要点是什么?
    发表于 02-11 07:26

    基于MM32F0140系列MCU实现UDS Bootloader的设计

    1、使用MM32F0140系列MCU实现UDS Bootloader  MM32F0140 使用高性能的 Arm®Cortex-M0 内核的 32 位微控制器,最高工作频率可达 72MHz,内置
    发表于 09-15 16:35

    求分享S32K3xx UDS引导加载程序

    我的BootLoader工程是基于UDS协议实现烧写的,烧写功能是通过配置EB实现的,EB版本为28.2.0,RTD版本为2.0.2。 为了防止擦写函数被误触发,我想直接在RAM区间内生成擦写函数
    发表于 05-12 08:12

    BOOTLOADER (基于Platform Flash)

    Xilinx FPGA工程例子源码:BOOTLOADER (基于Platform Flash)
    发表于 06-07 14:13 9次下载

    基于不同类型Flash-ROM的Bootloader设计

    基于不同类型Flash-ROM的Bootloader设计
    发表于 10-26 11:41 11次下载
    基于不同类型<b class='flag-5'>Flash</b>-ROM的<b class='flag-5'>Bootloader</b>设计

    加载flash并执行(LFAE)次级bootloader的示例

    这篇应用笔记描述了一个加载flash并执行(LFAE)次级bootloader的示例。这个应用是开发来增强AN2546中给出的加载RAM并执行主bootloader的,其中加入了允许随意写fl
    发表于 11-24 13:53 3018次阅读

    A FLASH Bootloader for PIC16 and PIC18 Devices--硬译(一)

    bootloader的。 注意:要想在微控制器中实现BootLoader,首先要求单片机具有IAP功能,或者是可以对其自身的FLASH 进行擦除、 写入的功能。其次要考虑FLASH的大
    发表于 11-25 10:54 509次阅读

    STM32 Bootloader UDS 技术概要

    STM32在单片机领域因性价比高受到广大工程师的青睐,笔者最近做了一个STM32 M3内核的BootLoader现在把技术的要点梳理如下:1、首先是对ROM分区的规划,把ROM划分为BOOT
    发表于 12-08 16:21 18次下载
    STM32 <b class='flag-5'>Bootloader</b> <b class='flag-5'>UDS</b> 技术概要

    UDS常用诊断服务

    UDS诊断概述 UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是在汽车电子ECU环境下的一种诊断通讯协议。简单来说,可以理解为UDS诊断协议就是ISO
    的头像 发表于 06-12 10:36 4447次阅读
    <b class='flag-5'>UDS</b>常用诊断服务

    STM32 UDS Bootloader开发需求

    本次使用的单片机为STM32F103RCT6,flash大小256k,一个扇区2k,SRAM:48KB
    发表于 06-12 15:44 648次阅读
    STM32 <b class='flag-5'>UDS</b> <b class='flag-5'>Bootloader</b>开发需求

    基于CAN总线的UDS诊断Bootloader升级MCU工具

    今日跟大家分享参加野火【瑞萨RA MCU创意氛围赛】选手的项目——基于CAN总线的UDS诊断Bootloader升级MCU工具。
    的头像 发表于 08-21 14:01 1100次阅读
    基于CAN总线的<b class='flag-5'>UDS</b>诊断<b class='flag-5'>Bootloader</b>升级MCU工具

    基于MM32F0140的UDS Bootloader学习笔记

    基于MM32F0140的UDS Bootloader学习笔记
    的头像 发表于 10-30 17:11 353次阅读
    基于MM32F0140的<b class='flag-5'>UDS</b> <b class='flag-5'>Bootloader</b>学习笔记