ISO15765是基于CAN网络的诊断协议,其中ISO15765-2描述的是网络层协议。什么是网络层协议?其实简单来说就是提供数据传输的方法。网络层一般提供2种数据传输方法,1是单包数据传输,2是多包数据传输。网络层选择传输的方法取决于底层一次可传输的最大数据包大小。
ISO 15765-2采用4种数据帧,分别是单帧(SF)、首帧(FF)、序列帧(CF)、流控帧(FC),其数据结构如下图所示:
下面将分别介绍这四种帧的数据结构:
单帧:
当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 个数据时,将采用多包的形式将数据传输出去,。多包的传输流程如下图所示:
多包传输流程图
- 发送方先发送首帧(FF),告诉对方我要发送FF_DL长度的数据及N-2字节的数据
- 接收方收到首帧后,发送流控帧(FC),告诉发送方流控的状态(FS)以及接收数据的能力(ST)和下一次发送流控帧的间隔(BS)
- 发送方接收到流控帧后,就按照ST的时间间隔发送按SN计数的序列帧(CF),每帧序列帧有N-1 字节的数据
- 发送方发送BS数量的序列帧(CF)后,等待流控帧,如果BS等于零,则此步骤省略
- 发送方如果最后发送的序列帧数量小于BS,则不用等待流控帧,传输结束
可以看出,ISO15765-2多包数据传输流程相对来说比较简单,其实在调试ISO15765-2协议时,我们更关注的是其网络层时间参数的设计是否满足要求。
网络层时序
ISO15765-2的网络时序图如下所示:
其时间参数的定义和超时如下所示:
其超时处理如下所示:
对于大部分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。