IAP和OTA(五)

IAP和OTA(基于CAN)

前言

首先我们需要先把CAN总线驱动起来,最好是自己创建一个DBC文件,之后通过上位机控制,这个是基本条件。

预备知识

总线上每一个ECU都有一个ID,对于LIN总线,需要主机发送ECU的id进行访问,从机ECU才能给出应答。但是对于CAN总线来说,每一个ECU都可以主动发送数据;比如,主机发送0x7C1的id到总线,从机接收到之后,要把数据和属于自己的id(比如0x700)封装成一帧数据,之后作为响应发送到总线上。CAN的这个id就已经起到区分的作用了,不用再像LIN一样(0x3C的id后,还要包含NAD来区分)。对于UDS的数据,就包含在一帧CAN数据组帧的“数据段”里边

在这里插入图片描述

单帧、首帧、续帧、流控帧。

在这里插入图片描述
注:流控帧知识基于CAN的UDS诊断才有的,对于LIN,是不需要流控帧的。
这里要特别和LIN对比一下,CAN没有NAD这一个字节,而LIN是有的,其他的PCI、LEN、SID、RSID两者相同。
在这里插入图片描述
由上图可知,流控帧包含三个字节,第一个字节的前4位固定为3,后4位为FS,第二个字节为BS,第三个字节为STmin。
FS:表示是发送方否可以继续传输消息。
0表示可以继续发送,
1表示等待发送,
2表示数据溢出,
BS:接收方一次能接收的数据最大量。
STmin:表示两个连续帧之间的最小时间间隔。

流控帧的作用的指导对方应该怎么发送。比如,主机发送了多帧数据帧给到从机ECU,单从机ECU接收到多帧中的首帧,就要回复给对方一个流控帧。告诉对方我一次只能接受多少字节,你没发送一帧数据需要等一会再给我发。不管是主机发送给从机,还是从机发送给主机,只要接收到首帧,则必须给对方回复一个流控帧。

寻址格式

normal, extended, and mixed

看了图莫斯提供的代码之后,发现有一个宏定义是区分寻址方式的,看了ISO15765之后,又百度看了很多资料好像又懂了一点点。

其实变来变去,还是在CAN的一帧数据里边搞花样。一帧CAN数据有用的就是ID还有8字节的数据段。贴图时刻。

协议中N_AI里又包含了四个名词,叫:源地址(N_SA)、目标地址(N_TA)、目标地址类型(N_TAtype)、可选地址拓展(N_AE)

Normal addressing

图一
图二
图一,采用的11位的地址,是最常见的寻址方式了,N_AI就是can的标准帧id的11个字节。
图二,采样的29位的地址,24-28是一样的;16-23中区分是物理寻址还是功能寻址【218(dec)为物理寻址、219(dec)为功能寻址】;N_TA为目标地址,N_SA为源地址。
注意:在此寻址方式中,“数据段”的第一个字节还是PCI。

Extended addressing

图三
图三,采样11位的地址,另外,它还把N_TA放在了“数据段”的第一个字节。相当在11位id的基础上再在数据段扩展出一个字节的空间来扩展id。

Mixed addressing

图四
图四,它采用29位的id,又将N_AE放在了“数据段”的第一个字节,N_AE对地址的一个扩展,可以看成是子网络中的一个节点。

注意:只有在正常模式下“数据段”中的8个字节都表示数据,在其他两种模式下,则“数据段”的第一个字节还是存放地址,这个在具体的代码中是由体现的。
所以在开发的时候,首先需要弄清楚1、用的标准帧还是扩展帧进行通信;2、主机物理请求ID,功能请求ID,以及我ECU的物理反馈ID;3、从主机厂拿到手的ID地址寻址方式是什么(标准,扩展,混合)

参考链接

1.单帧、首帧、连续帧、流控帧
2.流控帧
3.寻址格式(很有用)
4.网友的只言片语

资料

ISO-5765-2

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值