基于UDS的boot loader刷写示例分享(LIN)

基于UDS的boot loader刷写报文分析,通过LIN线的刷写。

先贴上常用UDS服务表,该表是基于ISO14229文档给出的。

这是一个相对完整的刷写流程图,但是34服务之前缺少了31服务。

首先,为了获得软件刷写权限,要把控制器状态设置为编程会话。

控制器状态有三种、默认、编程、拓展。其中默认也就是上电后控制器的状态,编程会话就是为了程序刷写特意做的模式,在默认会话权限上增加了程序刷写相关的权限,拓展权限则是获得了控制器的全部权限。

此控制器NAD设定为0X00,根据上边USD服务表可以看出,上位机首先使用SID=10服务,DID=02的子服务,也就是跳转编程会话,对应的控制器回应 RSID=50(10+40),RDID=DID=02,也就是控制器同意并进入了编程会话。

一般地,10服务之后应该在进行一次22服务,也就是读取控制器当前状态,确保进入了编程会话服务,但是此处省略了这个服务。

进入编程会话之后,上位机要与控制器进行身份核实,也就是UDS-27服务,SID=27,DID=01,请求种子,然后控制器发送种子,在之后上位机回复密钥(27-02服务),控制器反馈是否匹配成功,但这里省略了中间两个步骤,控制器直接反馈了确认匹配成功。

上位机和控制器匹配成功之后,进入例程服务,SID=31,DID=01,(特殊数据=FF 00,自定义为擦除APP代码服务),表示开启例程控制。一般例程服务包含的功能较多,flash的擦除也是大多放在31服务里。

例程服务完成之后,上位机请求下载数据,34服务,SID=34,特殊数据=00&44(特殊数据是规范好的数据)00代表数据无压缩,无加密44代表后面前四个字节为起始地址,后面后四个字节为结束地址,也就是1000地址开始,6F00为结束地址,由于该帧是多帧,PCI=10 0B,表示该帧是多帧且是帧,数据共有11个字节(包含SID)。

第二帧PCI=21,表示该帧是连续帧,且是第一帧连续帧。

PCI信息见下表。

控制器反馈下载请求确认RSID=74,同时给出了特殊数据=10,表示后面第一个字节是单次最大下载量,也就是0X42。

之后进入下载模式,PCI=10 42,上位机发送SID=36服务,特殊数据=01,表示是发送的第一个数据块。

可以看出,最后一帧报文没有被填充满,根据规范,用FF填充。

这个是BIN文件 1000-1040(设定0X1000就是程序刷写的开始地址)地址的数据,可以看出和多帧传输的数据是一致的。

第一个块发送完之后,控制器回复第一个块发送完毕。

然后进行第二块发送,整体数据和上面差不多,只是特殊数据=02,后面的依次类推。

发送完毕之后,上位机请求推出传输模式,也就是37服务。

之后再次进入31例程服务,特殊数据是 55  00,这里自定义了为CRC校验服务

如果校验成功,回复上位机。

最后进行控制器硬件复位服务,也就是11服务,SID=01。

这样,一个整个的服务就完成了。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值