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相关推荐

  1. 基于UDS服务的BootLoader架构和刷写流程

    基于UDS服务的BootLoader架构和刷写流程 1. BootLoader支持的UDS服务 bootloader 不需要支持19/14等故障类服务 在boot程序中, 10/27/11/3E 这样 ...

  2. 浅谈基于UDS的ECU刷写方案(Bootloader刷新)

    好长时间没有站在代码开发的第一线了,最近独立搞了一个工程,感觉技术工程师附体,恢复了往日对技术的热情. 在软件定义汽车的时代,ECU软件的更新非常重要.这样就要求ECU具备BootLoader功能. ...

  3. AUTOSAR从入门到精通100讲(三)-基于UDS服务的BootLoader架构和刷写流程

    基于UDS的BootLoader下载,可以支持ECU生命周期的无限次刷写,通过CAN网络进行无需拆壳和DEBUG口的应用程序刷写,本文介绍了刷写服务和是三个阶段的刷写流程.也可通过无线模块实现空中升级 ...

  4. 【基于UDS服务的BootLoader架构和刷写流程】

    基于UDS的BootLoader下载,可以支持ECU生命周期的无限次刷写,通过CAN网络进行无需拆壳和DEBUG口的应用程序刷写,本文介绍了刷写服务和是三个阶段的刷写流程.也可通过无线模块实现空中升级 ...

  5. 【UDS统一诊断服务】(补充)五、ECU bootloader开发要点详解 (1)

    文章目录 引言 1. bootloader的功能 2. 如何建立可靠的总线通信? 重要说明: 3. 解析编程文件(S19/HEX/BIN) 引言 bootloader的功能 如何建立可靠的总线通信? ...

  6. 基于canoe开发的Bootloader刷写上位机,符合uds流程

    基于canoe开发的Bootloader刷写上位机,符合uds流程,可供项目应用和学习 另有支持周立功can卡的Bootloader上位机,符合uds规范的支持s32k144,英飞凌的Bootload ...

  7. 基于UDS的BootLoader上位机源代码,支持ISO15765通信,支持PeakCAN , ZJG CAN等CAN卡, 支持S-record格式的二进制文件解析; 可二次开发或扩展应用

    基于UDS的BootLoader上位机源代码(C#) 基于UDS的BootLoader上位机源代码,支持ISO15765通信,支持PeakCAN , ZJG CAN等CAN卡, 支持S-record格 ...

  8. 一文看懂汽车电子ECU bootloader工作原理及开发要点

    随着半导体技术的不断进步(按照摩尔定律),MCU内部集成的逻辑功能外设越来越多,存储器也越来越大.消费者对于汽车节能(经济和法规对排放的要求)型.舒适性.互联性.安全性(功能安全和信息安全)的要求越来 ...

  9. 汽车电子ECU bootloader开发要点详解

    引言 1. bootloader的功能 2. 如何建立可靠的总线通信? 3. 解析编程文件(S19/HEX/BIN) 4. NVM驱动程序开发 5. bootloader开发的其他要点 a. boot ...

最新文章

  1. 追溯XLNet的前世今生:从Transformer到XLNet
  2. 原来你是这样子的OpenAI!来看看它背后那些有趣的人和事
  3. django创建验证码
  4. 《程序员代码面试指南》第五章 字符串问题 拼接所有字符串产生字典顺序最小的大写字符串...
  5. openssl/ssl.h file not found mac 完美解决
  6. 【Flutter】StatelessWidget 组件 ( Divider 组件 | Card 组件 | AlertDialog 组件 )
  7. PowerPoint中的LinkFormat对象
  8. java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍
  9. VTK修炼之道49:图形基本操作进阶_网格平滑(点云的曲面重建技术)
  10. PCI总线的含义是什么?PCI总线的主要特点是什么?
  11. 程序员:你为什么要离职?
  12. Android Studio项目目录结构介绍
  13. 12帧跑步动画分解图_跑步动画原理讲解
  14. oracle导出自增设置,教程方法;oracle中如何设置自增主键电脑技巧-琪琪词资源网...
  15. puppet单机模型
  16. 安卓手机阅读器_手机屏幕太伤眼睛,墨水屏才是喜欢阅读人士的最爱
  17. 反问疑问句的一些用法
  18. [‘1‘,‘2‘,‘3‘].map(parseInt)结果讲解
  19. 多少资金能做股指期货?要交哪些费?
  20. 二叉树:已知先序和中序求后序,已知中序和后序求先序

热门文章

  1. 学而思初二数学年卡菁英班(全国人教版)百度网盘资料
  2. AI研究生的文学情怀,厦大硕士毕业生文言致谢聊三年求学路
  3. 应用Python爬虫技术获取福彩历史数据
  4. 我们计划为EasyDSS定制开发一款超低延时的EasyPlayer Flash播放器
  5. 关于测试排期的那些事
  6. python配置geany教程视频_Python使用geany工具配置方法
  7. 应对当今的医疗器械软件测试开发挑战,如何选择测试软件
  8. MySQL数据库入门(三)--- 查询、权限、join语法、外键、备份
  9. win7 安装ox oracle,windows 2012 R2 core安装0x800f0906 -mgmt-infra出现0x800f0906
  10. 基于SWTC公链的融媒体项目入选工信部网络安全示范项目