基于UDS的ECU bootloader
CAN总线学习-3
最近学习基于UDS的bootloader,做一些总结。
1. 基于UDS的bootloader重要性
为了在不拆卸ECU的外壳的情况下也可以更新ECU的APP,我们需要有bootloader。整车有那么多的ECU,为了规范,并且拥有一致性,希望所有的ECU都按照基于UDS的规范去做。UDS在设计时考虑了bootloader的需求,专门为bootloader设计了几个服务,供大家使用。
2. UDS中支持bootloader的服务
app中,10需要切换会话状态,85和28需要保证关闭CAN正常通信,暂停记录DTC。
boot中,需要10/27/11/3E基础诊断服务,需要22/2E读写DID,需要31/34/36/37实现ECU升级数据传输。
如下图:
3. 刷写步骤
软件刷写总体上分为三个步骤
3.1 pre-programming(预编程阶段)
1)用3E告知ECU诊断仪还在连接。
2)通过10切换成扩展会话。
3)通过85关闭ECU的DTC存储,通过28关闭接收和发送应用报文和网络管理报文。注意先后顺序。
TX SF Length=2 ID=0x705 DLC=8 DATA= 02 3E 00 00 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 02 7E 00 00 20 F1 52 01
TX SF Length=2 ID=0x7DF DLC=8 DATA= 02 10 03 00 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 06 50 03 00 32 01 F4 01
TX SF Length=2 ID=0x7DF DLC=8 DATA= 02 85 02 00 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 02 C5 02 00 20 F1 52 01
TX SF Length=3 ID=0x7DF DLC=8 DATA= 03 28 03 03 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 02 68 03 00 20 F1 52 01
3.2 programming(主编程阶段)
1)10服务切换到编程模式,这里要注意,正确的方式是App段程序回复0x78 NRC,接下来跳转到boot段程序,最后由Boot段程序来回复10 02的肯定响应。错误的方式是由App段回复10 02的肯定响应,再进行跳转。
2)27服务,解锁,通过安全验证。
3)2E 写DID指纹,标记Write fingerprint :Programming Date写软件时间(根据OEM要求来执行)
4)31服务-擦除Flash。ECU肯定响应,擦除成功。
TX SF Length=2 ID=0x705 DLC=8 DATA= 02 10 02 00 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 03 7F 10 78 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 06 50 02 00 32 01 F4 00
TX SF Length=2 ID=0x705 DLC=8 DATA= 02 27 03 00 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 06 67 03 00 00 00 97 00
TX SF Length=6 ID=0x705 DLC=8 DATA= 06 27 04 18 B0 E6 79 00/*发送 SecurityAccess SendKey 命令*/
RX SingleFrame ID=0x70D DLC=8 DATA= 02 67 04 00 00 00 00 00
TX SF Length=7 ID=0x705 DLC=8 DATA= 07 2E F1 99 00 00 00 00/*发送 WriteDataByIdentifier 命令*/
RX SingleFrame ID=0x70D DLC=8 DATA= 03 6E F1 99 00 00 00 00
TX FF Length=13 ID=0x705 DLC=8 DATA= 10 0D 31 01 FF 00 44 00/*发送 RoutineControl Erase 命令, Address= 10000, Size= 0*/
RX FlowControl ID=0x70D DLC=8 DATA= 30 00 00 00 00 00 00 00
TX CF SN=1 Len=7 ID=0x705 DLC=8 DATA= 21 01 00 00 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 03 7F 31 78 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 03 7F 31 78 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 03 7F 31 78 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 03 7F 31 78 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 03 7F 31 78 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 03 7F 31 78 00 00 00 00
......
RX SingleFrame ID=0x70D DLC=8 DATA= 04 71 01 FF 00 00 00 00
5)34服务,请求数据下载,ECU回复确认最大块大小。
6)36服务,开始传输数据。每个块传输完成后,ECU肯定响应。判断是否还有更多块需要下载。最多可以支持255个块。
7)37服务,请求退出传输。ECU肯定响应。
RX FC ID=0x70D DLC=8 DATA= 30 00 00 00 00 00 00 00
TX CF SN=1 Len=7 ID=0x705 DLC=8 DATA= 21 B9 04 01 00 F9 04 01
......
RX SingleFrame ID=0x70D DLC=8 DATA= 02 76 01 00 00 00 00 00/* 第1块传输完成 */
TX FF Length=514 ID=0x705 DLC=8 DATA= 12 02 36 02 F9 04 01 00
RX FC ID=0x70D DLC=8 DATA= 30 00 00 00 00 00 00 00
TX CF SN=1 Len=7 ID=0x705 DLC=8 DATA= 21 F9 04 01 00 F9 04 01
......
RX SingleFrame ID=0x70D DLC=8 DATA= 02 76 02 00 00 00 00 00 /* 第二块传输完成 */
......
RX SingleFrame ID=0x70D DLC=8 DATA= 02 76 AE 00 00 00 00 00/* 完成最后的传输 */TX SF Length=1 ID=0x705 DLC=8 DATA= 01 37 00 00 00 00 00 00/* 发送 RequestTransferExit 命令 请求退出 */
RX SingleFrame ID=0x70D DLC=8 DATA= 01 77 00 00 00 00 00 00
8)31服务-校验APP段程序,检查编程一致性/完整性。ECU肯定响应。校验成功。
9)11服务,ECU复位。之后应直接跳转到新下载的APP段程序中。
TX FF Length=8 ID=0x705 DLC=8 DATA= 10 08 31 01 FF 01 4F F3 /* 发送 RoutineControl Checksum 命令 校验 */
RX FlowControl ID=0x70D DLC=8 DATA= 30 00 00 00 00 00 00 00
TX CF SN=1 Len=2 ID=0x705 DLC=8 DATA= 21 E0 BC 00 00 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 05 71 01 FF 01 00 00 00 /* 完成校验 */
TX SF Length=2 ID=0x705 DLC=8 DATA= 02 11 01 00 00 00 00 00/* 重启ECU 硬件复位 */
RX SingleFrame ID=0x70D DLC=8 DATA= 02 51 01 00 00 00 00 00
3.3 post-programming(后编程状态)
1)10服务切换到03扩展会话。
2)执行28服务和85服务,使能收发应用报文和网络管理报文,使能ECU的DTC存储。这是对整车网络进行操作的,一般都是以功能寻址的方式来发送。注意先执行28,后执行85,避免DTC误报。
3)10服务,退回01默认会话。结束。
4)clear DTC
TX SF Length=2 ID=0x7DF DLC=8 DATA= 02 10 03 00 00 00 00 00/* 后编程会话 切换成扩展会话 */
RX SingleFrame ID=0x70D DLC=8 DATA= 06 50 03 00 32 01 F4 01
TX SF Length=3 ID=0x7DF DLC=8 DATA= 03 28 00 03 00 00 00 00/* 使能收发应用报文和网络管理报文 */
RX SingleFrame ID=0x70D DLC=8 DATA= 02 68 00 00 20 F1 52 01
TX SF Length=2 ID=0x7DF DLC=8 DATA= 02 85 01 00 00 00 00 00/* 使能ECU的DTC存储 */
RX SingleFrame ID=0x70D DLC=8 DATA= 02 C5 01 00 20 F1 52 01
TX SF Length=4 ID=0x705 DLC=8 DATA= 04 14 FF FF FF 00 00 00
RX SingleFrame ID=0x70D DLC=8 DATA= 01 54 14 00 20 F1 52 01
基于UDS的ECU bootloader相关推荐
- 基于UDS服务的BootLoader架构和刷写流程
基于UDS服务的BootLoader架构和刷写流程 1. BootLoader支持的UDS服务 bootloader 不需要支持19/14等故障类服务 在boot程序中, 10/27/11/3E 这样 ...
- 浅谈基于UDS的ECU刷写方案(Bootloader刷新)
好长时间没有站在代码开发的第一线了,最近独立搞了一个工程,感觉技术工程师附体,恢复了往日对技术的热情. 在软件定义汽车的时代,ECU软件的更新非常重要.这样就要求ECU具备BootLoader功能. ...
- AUTOSAR从入门到精通100讲(三)-基于UDS服务的BootLoader架构和刷写流程
基于UDS的BootLoader下载,可以支持ECU生命周期的无限次刷写,通过CAN网络进行无需拆壳和DEBUG口的应用程序刷写,本文介绍了刷写服务和是三个阶段的刷写流程.也可通过无线模块实现空中升级 ...
- 【基于UDS服务的BootLoader架构和刷写流程】
基于UDS的BootLoader下载,可以支持ECU生命周期的无限次刷写,通过CAN网络进行无需拆壳和DEBUG口的应用程序刷写,本文介绍了刷写服务和是三个阶段的刷写流程.也可通过无线模块实现空中升级 ...
- 【UDS统一诊断服务】(补充)五、ECU bootloader开发要点详解 (1)
文章目录 引言 1. bootloader的功能 2. 如何建立可靠的总线通信? 重要说明: 3. 解析编程文件(S19/HEX/BIN) 引言 bootloader的功能 如何建立可靠的总线通信? ...
- 基于canoe开发的Bootloader刷写上位机,符合uds流程
基于canoe开发的Bootloader刷写上位机,符合uds流程,可供项目应用和学习 另有支持周立功can卡的Bootloader上位机,符合uds规范的支持s32k144,英飞凌的Bootload ...
- 基于UDS的BootLoader上位机源代码,支持ISO15765通信,支持PeakCAN , ZJG CAN等CAN卡, 支持S-record格式的二进制文件解析; 可二次开发或扩展应用
基于UDS的BootLoader上位机源代码(C#) 基于UDS的BootLoader上位机源代码,支持ISO15765通信,支持PeakCAN , ZJG CAN等CAN卡, 支持S-record格 ...
- 一文看懂汽车电子ECU bootloader工作原理及开发要点
随着半导体技术的不断进步(按照摩尔定律),MCU内部集成的逻辑功能外设越来越多,存储器也越来越大.消费者对于汽车节能(经济和法规对排放的要求)型.舒适性.互联性.安全性(功能安全和信息安全)的要求越来 ...
- 汽车电子ECU bootloader开发要点详解
引言 1. bootloader的功能 2. 如何建立可靠的总线通信? 3. 解析编程文件(S19/HEX/BIN) 4. NVM驱动程序开发 5. bootloader开发的其他要点 a. boot ...
最新文章
- 追溯XLNet的前世今生:从Transformer到XLNet
- 原来你是这样子的OpenAI!来看看它背后那些有趣的人和事
- django创建验证码
- 《程序员代码面试指南》第五章 字符串问题 拼接所有字符串产生字典顺序最小的大写字符串...
- openssl/ssl.h file not found mac 完美解决
- 【Flutter】StatelessWidget 组件 ( Divider 组件 | Card 组件 | AlertDialog 组件 )
- PowerPoint中的LinkFormat对象
- java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍
- VTK修炼之道49:图形基本操作进阶_网格平滑(点云的曲面重建技术)
- PCI总线的含义是什么?PCI总线的主要特点是什么?
- 程序员:你为什么要离职?
- Android Studio项目目录结构介绍
- 12帧跑步动画分解图_跑步动画原理讲解
- oracle导出自增设置,教程方法;oracle中如何设置自增主键电脑技巧-琪琪词资源网...
- puppet单机模型
- 安卓手机阅读器_手机屏幕太伤眼睛,墨水屏才是喜欢阅读人士的最爱
- 反问疑问句的一些用法
- [‘1‘,‘2‘,‘3‘].map(parseInt)结果讲解
- 多少资金能做股指期货?要交哪些费?
- 二叉树:已知先序和中序求后序,已知中序和后序求先序
热门文章
- 学而思初二数学年卡菁英班(全国人教版)百度网盘资料
- AI研究生的文学情怀,厦大硕士毕业生文言致谢聊三年求学路
- 应用Python爬虫技术获取福彩历史数据
- 我们计划为EasyDSS定制开发一款超低延时的EasyPlayer Flash播放器
- 关于测试排期的那些事
- python配置geany教程视频_Python使用geany工具配置方法
- 应对当今的医疗器械软件测试开发挑战,如何选择测试软件
- MySQL数据库入门(三)--- 查询、权限、join语法、外键、备份
- win7 安装ox oracle,windows 2012 R2 core安装0x800f0906 -mgmt-infra出现0x800f0906
- 基于SWTC公链的融媒体项目入选工信部网络安全示范项目