CANoe_UDS-boorloader 自动测试系列(二)基本刷写流程

#如何高效记录并整理编程学习笔记?#

目录

一、前言

二、UDS-Bootloader刷写基本流程

        1.物理寻址和功能寻址的区别

        2.预编程阶段

                #0x10服务 $10 01  默认会话控制

                #0x10服务 $10 03  拓展会话控制

                 #0x31服务 $31 01 02 03  检查编程前提条件

                #0x22服务 $22 F1xxx

                #0x85服务 $ 85 02

                #0x28服务 $ 28 03 01

        3.编程阶段

                #0x10服务 $10 02  编程会话控制

               #0x27服务 $27 01 (请求种子)

               #0x27服务 $27 02  (发送密钥)

               #0x2E服务 $2E F1xxx  (写指纹信息)

              编程中最重要的三个服务:#0x34#0x36#0x37

                #0x34服务 $34 xxx  

                #0x36服务 $36 xxx        

                #0x37服务 $37 xxx  

                #0x31服务 $31 01 02 03(例程控制,校验编程完整性)

        4.后编程阶段

                #0x11服务 $11 01 (软件复位) 

                #0x10服务 $10 03  (进入拓展会话)

                #0x28服务 $28 00 03  (恢复非诊断网络通信)

                #0x85服务 $85 01 (恢复DTC刷新)

                #0x10服务 $14 FFFFFF  (清除所有的DTC故障码)

                #0x10服务 $10 01  (进入默认会话)

三、总结与展望 


一、前言

        这个系列的文章不会详细介绍关于UDS协议的具体细节,分享的重点是如何通过CANoe的CAPL实现自动化测试和刷写,如果有小伙伴不熟悉UDS协议的建议先去学习一下基础的知识,包括基本的刷写步骤和诊断原理、能够理解诊断报文非常重要!

        这个系列会手把手教你如何使用CAPL实现bootloader,以及搭建一个自动测试框架和建立自己的诊断测试用例库,纯手打哦!

        由于本人也是刚接触这块领域,也是在不断学习的过程,如果有不足请指点出来【感谢】。

刷写面板

二、UDS-Bootloader刷写基本流程

        UDS-bootloader刷写一般分为三个阶段,预编程、编程、后编程。

        1.物理寻址和功能寻址的区别

                物理寻址:一对一发送,物理寻址只能与特定ID的某个ECU进行通信。

                功能寻址:一对多发送,功能寻址CAN网络上的所有支持UDS协议的ECU都能接收到数据。

        2.预编程阶段

                预编程阶段主要是为刷写做准备,一般是进行下载前的安全条件检查、关闭非诊断网络通信、停止DTC更新、会话控制等。

                #0x10服务 $10 01  默认会话控制​​​​​​​

                使用功能寻址发送该请求,为跳转到扩展会话做准备。

                #0x10服务 $10 03  拓展会话控制

                使用功能寻址发送该请求进入拓展会话,在该会话下进行DTC和通信设置。

                 #0x31服务 $31 01 02 03  检查编程前提条件

                使用物理寻址发送该请求,这个请求会执行一个例程,主要是检查当前电压、车速等是否满足安全条件。

                #0x22服务 $22 F1xxx

                使用物理寻址,用该服务读取DID信息,包括上一次的编程日期、指纹信息、软件版本号、硬件版本号等等,不同的厂家有不同的要求。

                #0x85服务 $ 85 02

                使用功能寻址,为了防止在编程的时候会意外记录不必要的DTC,所以要在预编程阶段将DTC记录关闭。

                #0x28服务 $ 28 03 01

                使用功能寻址,为了防止在刷写过程中不相关的报文信息会干扰刷写,导致刷写不稳定,所以在预编程阶段要将非诊断通信全部关闭。

        3.编程阶段

                编程阶段主要是进入编程会话后进行安全解锁、写编程日期,最最重要的是下载FlashDriver和Application,具体的服务下面会详细介绍。

                #0x10服务 $10 02  编程会话控制

                使用物理寻址,发送请求后进入编程会话,在此会话下才能进行刷写相关操作。一般进入编程会话后程序会执行一次复位操作,使得程序从App跳转到Bootloader程序并停留bootloader进行程序刷新。

               #0x27服务 $27 01 (请求种子)

               使用物理寻址,发送请求,下位机会回复一个种子给上位机。

               #0x27服务 $27 02  (发送密钥)

                使用物理寻址,收到种子后会根据车厂的安全算法计算出一个密钥,然后通过该服务下发,下位机通过对比校验密钥的正确性,从而决定ECU是否解锁,只有解锁状态下才允许编程相关的服务执行(后面的文章会详细介绍)。

               #0x2E服务 $2E F1xxx  (写指纹信息)

               使用物理寻址,该服​​​​​​​务会向ECU写入指纹信息,包括诊断仪编号、变成日期等,不同厂家会有不同要求。

              编程中最重要的三个服务:#0x34#0x36#0x37​​​​​​​​​​​​​​

                #0x34服务 $34 xxx  

 使用物理寻址,该服务为请求下载数据,向ECU发送要刷写的数据地址和数据长度,ECU会校验地址和数据大小的合法性,没问题才能进行下一步的数据传输。

                #0x36服务 $36 xxx        

                 使用物理寻址,该服务为请求数据传输,刷写工具通过该服务向ECU发送固件,ECU会一边接收数据一边向FLASH写数据,循环往复直到数据发送完成,此时并不确定数据的正确性,接着往下看。 

                #0x37服务 $37 xxx  

                使用物理寻址,0x36服务将数据发送完成后刷写工具通过该服务请求退出数据传输,执行该服务意味着数据传输已经完成。

                #0x31服务 $31 01 02 03(例程控制,校验编程完整性)

                 使用物理寻址,该请求会使ECU执行校验编程完整性的相关例程,如果校验结果跟上位机的结果不一致则应用程序无效。到这里编程阶段已经完成。

          注意:所有的数据下载都是经过以上几个服务(0x34、0x36、0x37、0x31)实现,包括flashDriver和Application,不同的是数据和刷写地址,我们需要ECU在刷写的时候识别是写什么数据,从而选择不同的驱动。

        4.后编程阶段

                后编程阶段主要是在数据下载完成后恢复系统的网络通信和DTC更新,具体服务下面会详细介绍。   

                #0x11服务 $11 01 (软件复位) 

                使用物理寻址,固件传输结束并且通过编程完整性校验后发送该请求,执行一次软件复位,随后跳转到app运行。

                #0x10服务 $10 03  (进入拓展会话)

                 使用功能寻址,复位进入到app运行后发送该请求进入拓展会话,准备恢复CAN网络上在预编程阶段关闭的网络通信和DTC更新。

                #0x28服务 $28 00 03  (恢复非诊断网络通信)

                 使用功能寻址,发送请求重新打开被关闭的通信,使得ECU能重新接收其他的报文。

                #0x85服务 $85 01 (恢复DTC刷新)

                 使用功能寻址,发送请求重新打开所有ECU的DTC更新。

                #0x10服务 $14 FFFFFF  (清除所有的DTC故障码)

                 使用物理寻址,发送请求清除旧版app记录的所有DTC故障码(该步骤不同车厂会有不同的要求,根据实际情况选择该步骤)

                #0x10服务 $10 01  (进入默认会话)​​​​​​​

                使用功能寻址,发送请求,所有ECU恢复到默认会话模式。

最终效果如下:

三、总结与展望 

            到此整个bootloader的刷新已经完成,以上这些步骤只作为参考,实际情况会因车厂需求不同而有一定的变化,但是大差不差,一般就是这些步骤。

             再次强调本文不会强调每个服务的具体细节,只是大概讲述整个刷写的流程,相当于是一个复习吧。这个系列的重点我会放在如何使用CAPL实现刷写和自动测试,后续我会持续更新,感兴趣的朋友可以关注下专栏,你们的关注和互动是我更新的最大动力哦【调皮】。

下一篇:《CANoe_UDS-boorloader 自动测试系列(三)基础功能:CAPL实现UDS协议下的CAN报文接收#解析#发送》

敬请期待!

如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。

作者:小鸟鹏

联系方式:

邮箱:502756962@qq.com

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值