基于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
  • 8
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值