UDS协议与刷写程序相关的功能单元.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
UDS协议与刷写程序相关的功能单元 1 刷写文件 软件刷写是指将软件程序烧录到ECU芯片内存的特定地址段,然后ECU就会运行该软件程序,去实现其特有的功能。常用的ECU刷写文件格式有:Hex, s19, bin等其他格式。 总的来说,不管是哪种格式,这些文件都必须包含:存储地址,数据,校验和(checksum),记录类型和记录长度信息。 为什么必须需要这些信息?因为我们是需要将软件刷写到芯片内存规定的区域,假设要刷写到PFlash的空间1,2,如下图1所示。 图1 那么刷写时就必须知道要刷到哪里(即起始地址和结束地址),刷写空间够不够大,刷写是否正确(即通过校验和校验)。所以刷写文件就一定包含了这些信息。通过一个hex格式文件导入Hexview来具体感受下。 图2 Hex内容的解析示意 而这些信息在刷写时会通过专用的工具解析出来,比如用Canape脚本刷写,那么就可使用Canape相应函数去解析。然后将解析的信息供UDS服务使用。 2? 刷写过程 由前面文章不难发现,刷写程序前应该要做一些准备工作:先进入到编程会话模式,然后进行ECU解锁,以获得读写权限,再开始刷写,根据ISO14229标准可知,基本刷写步骤是: 先请求例程控制($31), 然后请求下载($34), 再进行数据传输($36), 最后数据传输完毕,则请求数据传输退出($37),验证校验和。 下面开始介绍这些基本步骤,先看例程控制($31)。 例程控制是指客户端请求服务端开始,停止一个例程或请求例程结果,主要用来擦除内存、复位或学习自适应值,或运行一个self-test等功能。 例程控制的请求格式为:SID+SF+RID+非必须选项; 例程控制的正响应格式为:(SID+40)+SF+RID+非必须选项。 这里开始以一个基本的刷写过程为例:假设需擦除内存的从地址0xA0000000开始,大小为0信息,执行完例程控制后,目标位置的信息成功擦除。那么如下所示: 这里: 0x01表示开始一个例程, 0xFE00为RID(RoutineIdentifier),该RID具体如何使用由用户自定义,比如这里0xFE00应该由系统供应商来定义,定义的是擦除动作; 0xA0000000为擦除的起始地址,0擦除的大小; 服务端响应的第5个字节表示擦除的状态,0x01表示擦除成功。 当擦除成功后,接着就请求下载($34),即从客户端发起一个数据传输到服务端,服务端接收到请求后,将会做一系列的动作,检查是否能下载,一切都ok的话则正响应给客户端。请求下载的请求和正响应格式如下所示: 图3 引自[1] 接着上述请求例程,请求下载如下所示: 这里, 0x00为数据格式标识符,表示通用刷写(刷写还有压缩刷写和加密刷写等方式); 0x44为长度格式标识符,前面4表示内存大小所占的字节数,即对应的0x0001000的长度,4个字节,后面4表示内存地址所占的字节数,即对应的0xA0000000的长度。0x20同样为长度格式标识符,表示0xF000的长度; 0xF000为数据传输时,每次所允许最大的数据块,即指36 01 xx xx xx.......xx的大小。 当客户端接收到请求下载的正响应,则说可以开始传输数据,那么客户端将按照每次0x0F00的数据量传输数据($36),如下所示。 这里,刷写文件的数据就会按照一一对应的地址逐块地被刷写到内存中,当数据刷写完毕,则请求传输退出($37),验证校验和。 这里, 0xFE01为RID,表示校验和验证; 0xDAE51241为预期的校验和; 0校验和的起始地址,0x0000FF00为校验和地址的大小,即软件将根据起始地址和地址大小来获取这块空间的数据,通过既定的算法计算得到一个实际的校验和,比较实际的和预期的校验和,两者说明刷写的数据正确,这时服务端就会正响应。 以上就是介绍如何使用UDS协议实现一个刷写过程的基本步骤,关于这些服务的具体定义和刷写例程的例子可参考ISO14229-1标准。

文档评论(0)

play + 关注
实名认证
文档贡献者

分享有帮助的文档

1亿VIP精品文档

相关文档