ISO15765-2 CAN 网络层协议介绍

ISO15765是基于CAN网络的诊断协议,其中ISO15765-2描述的是网络层协议。什么是网络层协议?其实简单来说就是提供数据传输的方法。网络层一般提供2种数据传输方法,1是单包数据传输,2是多包数据传输。网络层选择传输的方法取决于底层一次可传输的最大数据包大小。

ISO 15765-2采用4种数据帧,分别是单帧(SF)、首帧(FF)、序列帧(CF)、流控帧(FC),其数据结构如下图所示:

ISO15765-2 CAN 网络层协议介绍_第1张图片

下面将分别介绍这四种帧的数据结构:

单帧:

       当N_PCItype = 0时,表示此帧为单帧,SF_DL为此次单包传输的数据量。

首帧:

       当N_PCItype = 1时,表示此帧为首帧,FF_DL为此次多包传输的数据量,FF_DL的最大值为4095。

序列帧:

       当N_PCItype = 2时,表示此帧为序列帧,SN为序列帧的计数,用于数据的有序传输,第一次发送SN的值为1,当SN的值溢出时,SN从0开始计数。

流控帧:

       当N_PCItype = 3时,表示此帧为流控帧,FS为数据流传输的状态信息,BS为接收方发送流控帧的间隔(以CF帧为单位),ST为发送方间隔发送序列帧的时间间隔。

当FS=0时,代表接收方已经准备好数据传输,发送方可以发送序列帧;当FS=1时,发送方继续等待流控帧且复位N_BS的超时定时器;当FS=2时,代表接收方的内存不够接收FF_DL长度的数据,发送方结束数据传输。当BS=0时,接收方不再发送流控帧,发送方可以一直发送序列帧直到数据传输完成。

单包传输:

当通过网络层传输小于或等于N-1 个数据时,将采用单包的形式将数据传输出去,即通过单帧(SF)将数据发送给接收方。

多包传输:

当通过网络层传输大于 N-1 个数据时,将采用多包的形式将数据传输出去,。多包的传输流程如下图所示:

ISO15765-2 CAN 网络层协议介绍_第2张图片

                                                               多包传输流程图

  1. 发送方先发送首帧(FF),告诉对方我要发送FF_DL长度的数据及N-2字节的数据
  2. 接收方收到首帧后,发送流控帧(FC),告诉发送方流控的状态(FS)以及接收数据的能力(ST)和下一次发送流控帧的间隔(BS)
  3. 发送方接收到流控帧后,就按照ST的时间间隔发送按SN计数的序列帧(CF),每帧序列帧有N-1 字节的数据
  4. 发送方发送BS数量的序列帧(CF)后,等待流控帧,如果BS等于零,则此步骤省略
  5. 发送方如果最后发送的序列帧数量小于BS,则不用等待流控帧,传输结束

 

可以看出,ISO15765-2多包数据传输流程相对来说比较简单,其实在调试ISO15765-2协议时,我们更关注的是其网络层时间参数的设计是否满足要求。

网络层时序

ISO15765-2的网络时序图如下所示:

ISO15765-2 CAN 网络层协议介绍_第3张图片

其时间参数的定义和超时如下所示:

ISO15765-2 CAN 网络层协议介绍_第4张图片

其超时处理如下所示:

ISO15765-2 CAN 网络层协议介绍_第5张图片

 

       对于大部分ISO15765-2网络层协议栈而言,我们需要设置的时间参数有N_Cs和N_Br,对于N_Cs有如下设计要求(N_Cs + N_As) < (0.9 * N_Cr),即数据包发送超时要小于对方接收数据超时的0.9倍,一般ECU系统设置的N_Cs最大超时为75ms, N_Cs与ST的值关系也比较大,有如下关系N_Cs  >  ST,因此对于整个ECU系统而言 N_Csmax  > N_Cs  >  ST

,同理N_Br的最大超时一般也为75ms。

 

 

你可能感兴趣的:(汽车电子协议)