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