CAN网络通信
1.网络层概述
1.1综述
这部分描述了网络层的整体功能。TP协议规定了用于网络节点之间交换数据的网络层通信协议,例如ECU与ECU之间,或测试设备与ECU之间。如果要传输的数据不能使用单个的CAN帧传输,则提供一种分包传输的方法。
传输通道是通信链路的物理组成部分,包含接收/传输机制。每个通道都可以在一个时间点处理一个连接。在通信矩阵中,这些数据交换的ECU之间是一个固定分配的(例如测试人员与ECU之间的诊断请求和响应消息)。一个连接包含其寻址模式所需要的所有通信参数(例如CAN-channel、CAN-ID、源地址和目标地址、基础地址等)。
1.2网络层内部操作
网络层的内部操作提供了分割、传输和流控及重组的方法。网络层的主要目的是传输数据,这些数据可能适合或者不适合一个CAN帧。不能放入一个CAN帧的消息会被分割成多个部分,每个部分可以在一个CAN帧中传输。
下图1是一个未分隔的消息发送示例。
下图2是一个分段消息发送示例。
流控帧用于调整发送方以适应接收方的网络能力。这种流控方案允许使用诊断网关和子网络。
2.网络协议层
2.1协议的功能
网络层的协议完成以下两个功能:
a)发送和接收最大4095个字节的消息。
b)报告发送和接收的完成状态。
2.2单帧传输
通过发送一个唯一的 N_PDU 来发送最大7个字节的消息,单帧被调用,如图3所示。
通过来一个唯一的接收N_PDU最大字节是7的消息。
2.3多帧的传输
发送长数据需要通过分成多个N_PDU来传输。接收长数据需要通过接收多个N_PDU并进行组包。多个N_PDU由首帧和连续帧组成。
通过使用流控协议数据单元(PC N_PDU)的流控机制,多个N_PDU的接收方才能适配发送方的传输速度。
数据的字节长度大于7时数据被分成:首帧协议数据单元,在扩展或者混合地址情况下包含头部5个字节,在正常地址情况下头部是6个字节;一个或者多个连续帧的协议数据单元,其中包含7字节的数据。由于连续帧(CF N_PDF )包含剩余的数据字节,所以可能小于7个字节。
图4在发送节点分包和在接收节点组包。图中没有显示接收节点在接收到首帧(FF)后发出的流控(FC)。
整个消息的长度是定义在首帧(FF)N_PDU中。所有的连续帧(CF)N_PDU会在发送节点进行编号,以便接收节点按照相同的顺序来组包。
流控机制允许接收方把接收方的接收能力来通知发送方。由于不同的节点可能具有不同的功能,因此接收方发送的流控机制来通知发送方。发送方应符合接收方的接收能力。这些功能的定义如下:
块大小(BS):接收方允许发送方发送的最大N_PDU数量。
最小间隔时间(STmin):发送者发送两个连续帧之间的最小的间隔时间。
除了最后一个模块以外,所有的传输包都是有BS N_PDUs组成。最后一个将包含剩余的N_PDUs(1到BS)。
当发送方/接收方等待来自接收方/发送方的N_PDU时,超时机制用来检测本次传输是否失败。
通过流控帧(FC),在接收的分段数据超过接收端的存储空间时,接收段可以延迟传输或者拒绝接收分包数据。
FC.CTS :允许连续发送。
FC.WAIT:请求继续等待。
FC.OVFLW:缓冲区溢出,指分包数据第一帧中指定的字节数超过了接收方的缓冲区可以存储的字节数。
FC.WAIT有一个最大限制,即等待接收方允许连续发送的N_WFTmax(15)。该参数是一个系统设计的常数且不会在第一个流控(FC)N_PDU中发送。
2.4网络层协议数据单元
1协议数据单元格式
在不同的节点中,网络层的对等的实体之间的通信通过交换N_PDUs来完成。这个在ISO 15765中指定四种不同的网络层协议数据单元:单帧(D_PDU)、首帧(FF_PDU)、连续帧(CF N_PDU)和流控帧。用来建立一个对等的网络实体之间的通信路径,交换通信参数,传输用户数据和释放通信资源。
2SF N_PDU
首帧(SF)N_PDU即单帧协议控制信息。首帧(SF)N_PDF是由网络节点发出,并且可以被多个网络节点接收。用来传输可以被单次传输的数据单元,不用采取分包的办法。
3CF N_PDU
连续帧(CF)N_PDU即连续帧协议控制信息。发送节点在发送首帧(FF)N_PDU以后所有的N_PDU 都应该编码为连续帧(CF)N_PDFs。接收端在接收到最后一个连续帧以后,把组包好的数据传送给上层用户。在分包传输期间,连续帧(CF)N_PDU必须有发送节点发出,并且由唯一的接收节点接收。
4FC N_PDF
流控(FC)N_PDF即为流控协议控制信息。流控制是用来控制网络节点启动、停止或者恢复连续帧(CF N_PDUs)的传输。在接收到首帧或者连续帧块的最后一个连续帧(如果需要进一步的连续帧被发送),接收节点准备接收更多的数据时,由接收节点发送给发送节点。
当接收接收节点的存储空间已经小于首帧中定义的数据长度时,流控帧也可以通知发送节点来停止发送分段数据。
5协议数据单元字段描述
a)N_PDU 格式
协议数据单元(N_PDU)允许在一个节点网络层和一个或者多个其他的节点的网络层之间传输数据。所有的N_PDUs由三个字段组成,如表2所示。
表2 N_PDU 格式
N_AI N_PCI N_Data
b)地址信息(N_AI)
N_AI用来识别网络层的通信节点。在N_SDU中收到的N_AI信息-N_SA、N_TA、N_Tatype、N_AE将被复制并包含在N_PDU中。N_SDU中接收到的消息数据(MessageData,Length)太长,网络层需要分段才能传输完整的消息,则需要将N_AI复制并包含到每个传输的N_PDU中。
此字段包含地址信息,用于标识交换的消息的类型,以及在其中之间进行数据交换的接收方和发送方。地址信息由消息地址组成。
c)协议控制信息(N_PCI)
该字段定义了交换N_PDU的类型,还用于在通信网络节点之间交换控制参数。
d)数据区
N_PDU中的N_Data用于传输在N_USData中的参数中接收到的服务用户数据。服务调用请求。如果需要被分割成更小的部分,以使每个部分在通过网络传输时都适合N_PDU数据字段。
N_Data的大小取决于N_PDU类型和选址的地址格式。
2.5协议控制信息规范
2.5.1N_PCI
每一个N_PDU的定义请参照表3和表4.
表3 N_PCI 格式
表4 N_PCItype 定义
4-F 保留字:
2.5.2单帧N_PCI参数定义
2.5.2.1SF N_PCI byte
表5 提供了SF N_PCI的概述。
表5 SF N_PCI概述
单帧的数据长度(SF_DL)是用来指定服务用户数据的字节数。详见表6所示。
表6 SF_DL定义
4.5.2.2SF_DL错误处理
如果网络层收到SF_DL为0的单帧(SF),则网络层将忽略收到的SF N_PDU。如果网络层在使用普通寻址时收到SF_DL大于7的SF,则网络层忽略接收到的SF N_PDU。
2.5.3首帧的N_PCI参数定义
2.5.3.1首帧N_PCI字节组成
表7 首帧 N_PCI定义
2.5.3.2首帧数据长度参数定义
首帧N_PDU中使用参数FF_DL来指定服务用户数据的字节数。详见表8.
表8 首帧数据长度参数定义
2.5.3.3FF_DL错误处理
如果网络层接收到一个FF_DL大于可用接收缓冲区大小的首帧(FF),那么就会认为这是一个错误的情况。网络层应该停止接收消息,并发出一个FC N_PDU,参数为FlowStatus = Overflow。
如果网络层在使用普通寻址时接收到FF_DL小于8的首帧(FF),在使用扩展寻址或者混合寻址时接收到的FF_DL小于7的首帧(FF),则网络层应忽略接收到的FF N_PDU,不发送PC N_PDU。
2.5.4连续帧N_PCI参数定义
2.5.4.1流控帧 N_PCI定义
表9提供了CF N_PCI的定义概要
表9 CF N_PCI概要
2.5.4.2***(SN)参数定义
CF N_PDU中使用参数SN来指定连续帧的顺序。SN应当从0开始对所有的分包数据经行编号。首帧应该分配为0。
连续帧(CF) N_PDU中使用参数SN来指定连续帧的顺序。SN应该从零开始对所有的分包信息进行编号,首帧应当分配为0.首帧之后的第一个连续帧的SN应该会被设置为1.在分包信息传输的过程中,每一个连续帧的SN应该增加1。当SN的值达到15时,SN的值应当重新从0开始。
表10 SN的定义
表11 SN值的定义
2.5.4.3SN错误处理
如果收到一个错误SN的连续帧的N_PDU,则需要在网络层进行错误处理。数据的接收将会被终止。网络层将要产生一个N_USData.indication,参数N_Result将会被设置成N_WRONG_SN,来反馈给上层。
2.5.5流控N_PCI参数定义
2.5.5.1流控N_PCI字节
表12 FC N_PCI字节的概要
2.5.5.2流控帧参数定义
参数FlowStatus(FS)指示发送网络节点事都可以继续进行消息传输。一个发送节点应支持所有指定的FS参数。
表13 FS值定义
2.5.5.3FS错误处理
如果收到的FC N_PDU报文带有无效的FS参数值,则需要在网络层进行正确的错误处理。终止数据的传输,网络层产生一个N_USData,参数N_Result为N_INVALID_FS,反馈给上层服务。
2.5.5.4块大小(BS)参数定义
BS参数被编码在FC N_PCI的第2个字节中。BS的是每个块的连续帧(CF)N_PDUs的绝对个数。
例如,如果BS等于20,那么块将有20个连续帧(CF)N_PDUs组成。在分包数据传输过程中,只有最后一个连续帧块的帧数可以小于BS帧数。
表14 PC N_PCI字节的概述
2.5.5.5间隔时间参数定义
ST min参数被分配FC N_PCI的字节3。此时间由接收节点指定,发送节点应在发送两个连续帧之间按照该时间。Stmin 参数指示了连续帧之间的传输时间的最小间隔。
表15 间隔时间参数定义
Stmin是从连续帧的传输完成以后开始计算的,在下一个连续帧(CF)传输时结束。例如 如果Stmin等于10,这时两个连续帧的时间间隔是等于10ms。
2.5.5.6ST错误处理
在拆分数据期间,如果FC N_PDU信息接收到ST参数值为保留值,发送网络实体则使用最长的ST值,即(7F-127ms),而不使用从接收网络实体接收到的值。
2.6FC.Wait帧传输的最大数量
该变量的目的是为了避免通信节点在发生故障是被潜在的连接起来,以防止后者可能出现持续的等待。这个参数对于通信来讲是本地数据,不会被传输,因此不属于流控(FC)协议数据单元的一部分。
N_WFTmax参数的上限应由用户在系统生成时定义,设置为15。
N_WFTmax参数只能在接收消息时在接收节点使用。
如果N_WFTmax参数值设置为0,则流控帧需要依靠流控连续发送FC N_PDU CTS。流控等待(FC N_PDU WT )应该不会被网络使用。