解决故障诊断问题时,经常需要刷写软件,常用的ECU软件刷写有几种方法,包括UDS刷写,XCP刷写和调试工具Lauterbach刷写等。对于非底层软件工程师,一般只会用到前两种,更多的是UDS刷写,即通过UDS有关服务实现软件刷写到ECU非易失性存储器中。接下来,本文将主要介绍与软件刷写相关的服务,包括例程控制服务($31)、请求下载服务($34)、数据传输服务($36)和请求传输退出服务($37)。本文将首先了解下刷写文件的格式与内容,然后介绍利用这些服务如何进行软件刷写,同时也会根据ISO14229标准对这些服务做些补充说明。


刷写文件的格式与内容

软件刷写是指将软件程序烧录到ECU芯片内存的特定地址段,然后ECU就会运行该软件程序,去实现其特有的功能。常用的ECU刷写文件格式有:Hex, s19和bin等其他格式,这些文件的具体解释可参考以下博文:

s19文件格式详解_xxxl的专栏-CSDN博客_s19文件

hex文件说明_xiaohu1996的博客-CSDN博客_hex文件

STM32编译生成的BIN文件详解_sh的博客-CSDN博客

总的来说,不管是哪种格式,这些文件都必须包含:存储地址,数据,校验和(checksum),记录类型和记录长度等信息。

为什么必须需要这些信息?因为我们是需要将软件刷写到芯片内存规定的区域,假设要刷写到PFlash的空间1,2,如下图所示。

那么刷写时就必须知道要刷到哪里(即起始地址和结束地址),刷写空间够不够大,刷写是否正确完成(即通过校验和校验)。所以刷写文件就必须要包含这些信息,才能保证刷写的质量。下面再通过一个hex格式文件来了解一下,将其导入Hexview后,可以发现原来Hex文件的内容具体代表了什么内容,如下所示:

当要进行刷写时,Hex文件的内容所包含的这些信息都会通过专用的工具解析出来,比如使用Canape脚本进行刷写时,那么就可使用Canape相应函数去解析,然后将解析的信息通过UDS服务来刷写。


2 UDS刷写过程

UDS刷写的前提是要先进入编程会话模式,然后在此模式下请求种子和钥匙进行ECU解锁,以此来获得读写权限,再开始进行刷写操作,根据ISO14229协议可知,ECU软件的基本刷写步骤是:

·         先请求例程控制($31),

·         然后请求下载($34),

·         再进行数据传输($36),

·         最后数据传输完毕,则请求数据传输退出($37),验证校验和。

下面就开始介绍这些基本的步骤过程,首先看例程控制($31)

例程控制是指客户端请求服务端开始,停止一个例程或请求例程结果,主要用来擦除内存、复位或学习自适应值,或运行一个self-test等功能。

·         例程控制的请求格式为:SID+SF+RID+非必须选项;

·         例程控制的正响应格式为:(SID+40)+SF+RID+非必须选项。

这里开始以一个基本的刷写过程为例:假设需擦除内存的从地址0xA0000000开始,大小为0x00010000的信息,执行完例程控制后,目标位置的信息成功擦除。那么如下所示:

这里:

·         0x01表示开始一个例程,

·         0xFE00为RID(RoutineIdentifier),该RID具体如何使用由用户自定义,比如这里0xFE00应该由系统供应商来定义,定义的是擦除动作;

·         0xA0000000为擦除的起始地址,0x00010000为擦除的大小;

·         服务端响应的第5个字节表示擦除的状态,0x01表示擦除成功。

当擦除成功后,接着就请求下载($34),即从客户端发起一个数据传输到服务端,服务端接收到请求后,将会做一系列的动作,检查是否能下载,一切都ok的话则正响应给客户端。请求下载的请求和正响应格式如下所示:

接着上述的请求例程,请求下载服务通信如下所示:

这里,

·         0x00为数据格式标识符,表示通用刷写(刷写还有压缩刷写和加密刷写等方式);

·         0x44为长度格式标识符,前面4表示内存大小所占的字节数,即对应的0x0001000的长度,4个字节,后面4表示内存地址所占的字节数,即对应的0xA0000000的长度。0x20同样为长度格式标识符,表示0xF000的长度;

·         0xF000为数据传输时,每次所允许最大的数据块,即指36 01 xx xx xx.......xx的大小。

当客户端接收到请求下载的正响应,则说可以开始传输数据,那么客户端将按照每次0x0F00的数据量传输数据($36),如下所示。

这里,刷写文件的数据就会按照一一对应的地址逐块地被刷写到内存中,当数据刷写完毕,则请求传输退出($37),验证校验和。

这里,

·         0xFE01为RID,表示校验和验证;

·         0xDAE51241为预期的校验和;

·         0x80008000为校验和的起始地址,0x0000FF00为校验和地址的大小,即软件将根据起始地址和地址大小来获取这块空间的数据,通过既定的算法计算得到一个实际的校验和,比较实际的和预期的校验和,两者说明刷写的数据正确,这时服务端就会正响应。


3 总结

以上就是介绍如何使用UDS服务,包括例程控制服务($31)、请求下载服务($34)、数据传输服务($36)和请求传输退出服务($37)来实现一个软件刷写的基本步骤。关于这些服务具体是如何实现其规定的功能,本质上是这些服务映射了相应功能的函数或函数组,也就是说当请求该服务时,会将服务中的参数传递给映射的函数,然后这些函数去运行实现该服务的功能,比如下载服务,相应的函数将会根据地址信息找到NvM的地址,请求Nvm的写函数,将下载服务传递的数据写入到NvM,这样来实现一条服务数据的刷写。当然上述只是较为简单地概述了利用UDS刷写相关的服务进行基本的刷写过程,若要了解更为详细的刷写服务定义和刷写例程,一方面可以参考ISO14229-1 UDS协议,另一方面也可以记录一个软件刷写的整个过程,以此真切看到刷写都有用到哪些UDS服务以及各服务的执行顺序。

Reference:

[1]ISO14229-1: Road vehicles — Unified diagnostic services (UDS) —Part 1: Specification and requirements

作者:谦益行
文章来源:上汽零束SOA开发者论坛 
原文链接:https://bbs.z-onesoft.com/omp/community/front/api/page/mainTz?articleId=7766

ECU软件UDS刷写概述相关推荐

  1. TSMaster入门 | 如何使用仿真ECU进行UDS刷写程序?

    一. 工程准备 1第一个是我们的UDS刷写工程,第二个是我们的仿真ECU软件 2.还需要有一个CANFD双通道的TC1013,我使用的是TC106. 3还有一根DB9的公头线,把连个can通道相连. ...

  2. 诊断通讯模块Dcm的UDS服务概述

    诊断通讯模块Dcm的UDS服务概述_SOA开发者的博客-CSDN博客 0 引言 故障诊断系统中,诊断通讯管理模块(Diagnostic Coummunication Management,Dcm)主要 ...

  3. 汽车 ECU FlashBootLoader 常见刷写流程

    bootloader是指基于UDS诊断的车载控制器mcu程序刷新. 成品车上要进行ECU的软件刷新,可以通过即Bootloader刷写和OTA升级.通过OBD接口进行Bootloader刷新的方式是目 ...

  4. UDS刷写上位机全套CAPL脚本,有简单panel界面

    UDS刷写上位机全套CAPL脚本,有简单panel界面,配合V公司CAN卡和oe软件即可实现刷写流程修改和上位机定制开发,满足各种项目需求. 代码非实物 ID:694800618173155718da ...

  5. 汽车ECU软件开发之应用层软件与底层软件

    随着汽车产品日渐趋向电子化,人们对各类先进的安全系统.高级驾驶辅助系统的接受程度日益提升.而原本昂贵的盲点检测.自动紧急制动等功能的成本下滑,使其快速获得了市场青睐.富士奇美拉研究所(Fuji Chi ...

  6. Immo Tool ECU软件 可对发动机ECU和防盗锁进 行维修和编码

    Immo Tool ECU软件 可对发动机ECU和防盗锁进 行维修和编码 41100616348262241如意金箍棒呢

  7. 基于模型的设计(MBD)在汽车ECU软件开发中的实践

    基于模型的设计(Model-based Design,以下简称MBD)是一种围绕模型展开的项目开发方法,指对开发对象或者项目产品进行精确建模,项目的需求分析.功能设计.系统框架.代码生成.测试验证等开 ...

  8. canoe的dela_一种基于CANoe的ECU软件刷新方法及装置的制造方法

    一种基于CANoe的ECU软件刷新方法及装置的制造方法 [技术领域] [0001]本发明涉及汽车电子技术领域,尤其涉及一种基于CANoe的ECU软件刷新方法及 目-ο [背景技术] [0002]随着汽 ...

  9. 基于TSMaster的UDS刷写教程

    今天给大家介绍基于TSMaster的UDS诊断刷写流程.基本流程主要分为基本参数配置.刷写流程两部分. 一.基本参数配置 1.新建工程 打开TSMaster软件,选择创建新工程-诊断-UDS诊断,然后 ...

最新文章

  1. A16Z内部万字报告:人类与AI结合的最佳形态
  2. DisplayMetrics
  3. 构造函数与折构函数(c++细节篇五)
  4. Asp.net 2.0 发送邮件
  5. Android 监听home键(android:launchMode=singleTask 与 onNewIntent(Intent intent) 的用法
  6. window部署DM8的DEM系统
  7. scrapy-redis 配置 settings
  8. maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
  9. Windows2003四大必知版本
  10. 纪念工作一周年,也纪念我的blog开张。
  11. 计算机怎么格式化硬盘,如何格式化硬盘
  12. sim800a指令_SIM800A_硬件设计手册-LCSC.PDF
  13. mpu6050 z轴校准_MPU6050校准
  14. cmake编译时中途报错:undefined reference to ‘xxx‘.未定义引用
  15. python中pprint模块
  16. Python——输出大写英文字母
  17. 计算机电路板 接地,pcb电路板接地怎么接
  18. 开源图书管理_图书馆资源探索开源选项
  19. ddr2是几代内存_教你区分DDR1 DDR2 DDR3内存条的方法
  20. 女孩如何选择一个好听又适合的英语名字?

热门文章

  1. 细说“客户满意率”与“客户满意度”
  2. j2me游戏开发实例讲解
  3. 天翼云对象存储数据迁移至minio
  4. 法语发音软件测试培训,法语语音校正软件Speedlinggua体验记
  5. 未来数字广告将消失?看广告商如何向死而生
  6. 抖音开放平台-视频切片-视频分片上传-不合法的参数ID-不合法的对象ID
  7. c#做外挂 step by step(更新至step3:注入)
  8. 根据已知词表选出好词(直通车)
  9. Qt532_WebKit_SSL问题
  10. 一线城市写字楼怎么了,总面积的一半都租不出去