软件刷写又是触碰到我的知识盲区了,之前一直都没有深入这个话题的机会,最近在和客户对这一方面的需求,也是赶鸭子上架,边学边用啊。用这篇文章,把相关的知识都梳理一遍。
其实刷写的流程就是按照UDS的服务,一步一步的进行的,之前我小小总结了一下UDS的知识和其中比较重要的服务,有兴趣的可以看看:UDS基础_Emmayetta的博客-CSDN博客_p2server。在刷写中涉及到了几个没提过的服务,也可以借此机会一并看了。
一般的刷写流程
最重要的还是标准:ISO 14229 Road vehicles-Unified diagnostic Services (UDS),在标准的第17章Non-volatile server memory programming process描述了刷写的流程,实话说我没看仔细,只是需要查找一些问题时才会搜搜。在项目中理解到的一般流程足以帮助理解了:
通过功能寻址启动各个控制器的扩展会话模式,即1003
执行扩展会话模式的安全访问,即27服务
检查先决条件,比如车速信息
85服务,DTC setting type=off, 即禁止DTC的诊断
通过功能寻址使控制器使能接受,禁止发送
通过22服务读取一些DID,比如VIN,HW number, SW version等等
10服务刷新会话子功能
27服务安全校验,执行刷新安全级验证
34服务:请求下载数据
36服务: 进行数据传输
37服务:数据传输完成后请求退出传输
检查刷新完整性和相关性,这里可能涉及到安全算法,CRC校验是很常见的算法
2E服务写入“指纹信息”
11服务进行硬复位
10服务回到默认会话模式
14服务清除所有DTC
这里穿插一个小点,功能寻址和物理寻址的区别:功能寻址是广播诊断请求,同时等待总线上的ECU给与响应,即一对多;物理寻址发送特定的诊断请求,等待指定的ECU给与响应,即一对一。
刷写过程涉及的UDS服务
10:诊断会话控制
11:电控单元复位,强制reset
27: 安全访问,tester发送seed给到ECU,计算得到key, 再与tester的key进行比较。安全解锁也有不同的级别。
3E:测试工具保持连接,在非默认会话状态下,S3 timer 超时,也会回到默认会话,如果要一直维持在非默认会话状态下,tester要一直发送3E。
85:控制DTC设置
28:通信控制
22:读取DID
2E:写入DID
31:程序控制
34:请求下载
36:传输数据
37:请求退出传输
一次完整的刷写,可以通过记录诊断报文完整地看到这些服务的执行。虽然没有完全搞清楚细节,但是大致流程是比较清晰的。
联系客服