1. OSI(Open System Interconnect)
OSI(Open System Interconnect),即开放式系统互联。一般都叫OSI参考模型,是ISO组织在1985年研究的网络互联模型。该体系结构标准定义了网络互联的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),即OSI(参考:开放系统互连参考模型_百度百科)。简单地说OSI即同一通信网络中,各个节点共同遵循的一套数据交互模型。
CAN诊断通信是基于OSI参考模型建立的,CAN诊断包含诊断应用层(ISO 15765-3/ISO 14229)、网络层(ISO 15765-2)、数据链路层(ISO 11898-1)和物理层。CAN诊断相关的模型与OSI模型的对照关系如下
图1 CAN诊断相关的模型与OSI模型的对照关系[ISO 15765-2]
2. 网络层
基本介绍
CAN诊断由发送端的请求与接收端的响应构成,诊断即为发送端与接收端数据往来。有的诊断一条消息完成,有的诊断需要多条消息完成,毕竟在诊断中,一条CAN消息只包含8个字节长度。对于一条CAN诊断消息的分段发送问题,即为网络层需要讨论的内容。
网络层的作用可以看作是把CAN诊断通信上层需要传输的数据进行封装准备发送的过程,若数据量小于等于7个字节数据(本文只讨论正常地址模式),则用单帧发送,数据量大于7个字节数据(ISO 15765规定最大传输数据量为4095个字节),则用多帧发送。网络层的作用就好比一堆货物准备发货,货物量少,即使用一辆车托运,货物量多,则需要使用多辆车进行托运。如图2所示,当需要传输的字节小于等于7个字节时,网络层只需将数据封装成一个单帧发送即可;如图3所示,当需要传输的字节大于7个字节时,网络层需要将数据封装成一个首帧加若干个连续帧,然后再发送。
图2 单帧数据发送
图3 多帧数据发送
单帧由于只有一条消息,所以传输比较简单,单帧的数据传输格式如图4所示
图4 单帧发送格式[ISO 15765-2]
单帧
在发送端到接收端的请求仅为一条消息时,即为单帧(SingleFrame),单帧数据格式如图5,单帧第一个字节byte0的高4位为0,第一个字节byte0的低四位为接下来准备传输的数据长度,从第二个字节byte1起为传输的数据。从单帧的数据格式可以看出,真正的数据部分最多为Byte1 ~ Byte7共7个字节长度,即CAN诊断数据发送长度得小于等于7个字节
图5 单帧数据格式
首帧
多帧由至少两条消息构成,第一条为首帧(FirstFrame),从第二条开始的消息称为连续帧(ConsecutiveFrame),接收端需要在收到首帧后回复流控帧(FlowControl)。CAN诊断在传输多帧消息的格式如下
图6 多帧发送格式[ISO 15765-2]
首帧格式如图7所示,首帧第一个字节byte0的高四位为1,第一个字节byte0低四位与第二个字节byte1合起来为接下来传输的数据长度,从第三个字节byte2起为传输数据。
图7 首帧数据格式
连续帧
连续帧格式如图8所示,连续帧第一个字节byte0的高四位为2,第一个字节byte0的低四位为串号(SN),第二个字节byte1起为剩余传出的数据。例如首帧已经传输了Data0,Data1 ...至Data5,则第一个连续帧接着传输Data6,Data7...至Data12,第二个连续帧接着传输Data13, Data14...,以此类推直至所有数据传输结束。
图8 连续帧数据格式
流控帧
从图6多帧发送格式中可以看出, 接收端在收到首帧后,会发出一个流控帧,如图9所示,第一个字节byte0的高四位为3,第四位为FS(FlowStatus),FS可以为0代表ContinueToSend(CTS), 1代表Wait(WT),2代表Overflow (OVFLW),3 – F 为预留,通常我们遇到的值为0,详细请参考ISO 15765-2。
图9 流控帧数据格式
流控帧的作用在于接收端告知发送端接收能力,包含BlockSize(BS)和SeparationTimeMin(STmin)两个参数,BS表示接收端允许发送端连续发送的最大字节数,STmin表示发送端发送连续帧的最小间隔时间。发送端收到接收端反馈的流控帧后,发送端会按照流控帧给出的接收能力进行发送连续帧,即连续传输的连续帧不超过BS,连续帧的发送间隔时间大于等于STmin。若接收端已经收满BS数量的数据,且与首帧中包含的数据长度对比发现数据还没接收满,则会继续发送流控帧,发送端会接着发送连续帧,以此类推,直至所有数据发送完成。参考图10
图10 流控制机制[ISO 15765-2]
举例
例1:用诊断仪读取某节点ECU的DID 0xF190,诊断仪需要发送0x22 0xF1 0x90共3个字节长度数据,多余字节用0xAA填充,请写出诊断仪的请求数据
【分析】:该例子只需发送3个字节长度数据,所以按照单帧格式发送,第一个字节byte0的高4位为0代表单帧,低4位为len=3,然后后面跟需要发送的数据0x22、0xF1和0x90,最后多余4个字节用0xAA填充,发送格式如下
【答】:诊断仪:0x030x22 0xF1 0x90 0xAA 0xAA 0xAA 0xAA
例2:用诊断仪写入某节点ECU的DID 0xF190,诊断仪需要发送0x2E 0xF1 0x90 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10 共20个字节长度的数据,多余字节用0xAA填充,请写出诊断仪请求过程中与ECU之间的交互数据
【分析】:该例子需要发送20个字节长度数据,大于7个字节,所以需要利用多帧格式,首帧byte0的高4位为1,低4位与byte1为数据长度20,即0x014,后面再跟6个字节0x2E 0xF1 0x90 0x00 0x01 0x02;诊断仪发完首帧后,ECU端需要返回流控帧,byte0的高4位为3;第一个连续帧为byte0的高4位为2,低4位为1,后面跟7个字节0x03 0x04 0x05 0x06 0x07 0x08 0x09 ;第二个连续帧为byte0的高4位为2,低4位为2,后面跟7个字节0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10;
【答】:
诊断仪:0x10 0x140x2E 0xF1 0x90 0x00 0x01 0x02
ECU:0x30 BS STmin 0xAA 0xAA 0xAA 0xAA 0xAA
诊断仪:0x210x03 0x04 0x05 0x06 0x07 0x08 0x09
诊断仪:0x220x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10
网络层时间参数
CAN诊断的数据传输不仅需要遵从上述格式要求,还有严格的时间要求。网络层涉及的时间参数有N_As,N_Ar,N_Bs,N_Br,N_Cs和N_Cr。这些时间参数在传输过程的对应关系如图11所示。
图11 时间参数对照图[ISO 15765-2]
3. 应用层
基本介绍
诊断应用层是与我们实际运用最为贴切的部分。应用层是将上述网络层所有传输数据去除固有格式(SF, FF, CF标志位、Len,填充位)后剩余Data部分的应用,将Data部分赋予实际意义。网络层考虑的是数据如何传输,应用层考虑的是获取数据中的信息,应用层中的请求(Request)指的是客户端(Client)发送给服务端(Server)的信息,该信息有长有短,可能只有一条单帧消息,也可能是由多帧消息组成;应用层中的响应(Response)指的是服务端(Server)发送给客户端(Client)的信息,该信息有长有短,可能只有一条单帧消息,也可能是由多帧消息组成。这里所指的客户端(Client)在我们日常工作中通常指诊断仪、上位机、测试工具等,服务端(Server)通常指BCM、GW、PEPS等车身电子元器件。标准应用层服务参考ISO 15765-3和ISO 14229-1文件,运用于测试,监控,诊断,车辆在线刷新等场景。
应用层时间参数
应用层在客户端和服务端请求响应过程中包含如下几个重要参数,如下图3-1
图3-1 应用层时间参数表
在客户端与服务端中间有网管(Gateway)传输的情况下,上述参数P2CAN_Client 和P2*CAN_Client需要包含网管传输过程中的传输时间△P2CAN,如下图3-2
△P2CAN = △P2CAN_Req + △P2CAN_Rsp
图3-2 △P2CAN图[ISO 15765-3]
会话层时间参数
CAN诊断具有不同的会话模式,常规的有默认会话模式(defaultSession), 拓展会话模式(extendedSession),编程会话模(programmingSession),式及其余模式。
图3-3 会话层时间参数[ISO 15765-3]
关于上述应用层及会话层时间参数的详细描述可以参考ISO 15765-3中Figure 3 — Physical communication during default session 至 Figure 12 — Minimum time between physically addressed request messages (P3CAN_Physical)的内容。
作者:Yueting Ben
来源:汽车电子与软件
微信公众号:
推荐阅读:
更多汽车电子干货请关注汽车电子与软件专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。