以下内容从UDS网络层/TP层(ISO 15765-2)的解读 - 知乎处转载
网络层协议数据单元(N_PDU)有四种类型,即单帧(SF)、首帧(FF)、连续帧(CF)、流控制帧(FC),用于建立对等实体间的通信。
网络层对于这四种类型的数据单元是通过协议控制信息(N_PCI,Protocol Control Information)进行区分的。每一个N_PDU都只有一个N_PCI。
也就是说,对于CAN诊断来说,我们完全可以通过识别每条CAN帧数据域的首个字节来确定它属于四种类型中的哪类。
N_PCI是TP层最为核心的信息,是TP层区别于其他CAN总线抽象协议的、最为显著的特征。
以下说明仅以乘用车常用的常规寻址举例。
对于TP层来说,我们可以把报文分为单帧和多帧,单帧只有一种N_PCI,即单帧;多帧有三种N_PCI,即首帧、流控制帧、连续帧。代码实现中,主要的工作其实就在多帧的处理和对超时错误(Timeout)的处理上。
0X 单帧(SF):首个字节为0(4bit)+ Data Length(4bit),控制信息占用1个字节
举例:Data 02 10 02 55 55 55 55 55,02表示接收方应知晓,这一个单帧只有2个有效字节。后续的字节是自动填充的无效字节。
单帧PCI通常仅占用1个字节,其他是数据,所以可以后面可以跟着最多7个字节的数据
1X XX 首帧(FF):前两个字节为1(4bit)+ Data Length(12bit),控制信息共占用2个字节。
举例:Data 10 14 2E F1 90 01 02 03,0x014表示,接收方应知晓,这一个多帧组合共有20个字节。
首帧可以携带一个多帧报文的头部6个字节数据
3X 流控制帧(简称流控帧,FC):前三个字节为3(4bit)+流状态(FS,4bit)+块大小(BS,8bit)+最小间隔时间(STmin,8bit),控制信息共占用三个字节。
举例:Data 30 00 14 AA AA AA AA AA,多帧发送方应知晓,这是一个流控帧,允许你方继续发送,CF数量无限制,上一个连续帧的确认接收(ACK)到新的连续帧开始发出的最小间隔时间为20ms。
Flow State 流状态:0为继续发送,Continue To Send(CTS),1为Wait(WT),2为Overflow(OVFLW)。
流控帧仅有3个字节的控制信息,无数据字节
STmin含义的解读
间隔最短时长(STmin)值的含义如下。
2X 连续帧(CF):第一个字节为2+SN(最多16个SN,溢出后从0开始重新计数),控制信息占用1个字节。
我们通常记首帧为0x20,之后的第一个连续帧自然是0x21,之后一直到0x2F,下一个是0x20,循环。
一个连续帧最多可携带7个数据字节
下图是一个传输规则的例子。可以看出,这首先是一个多帧传输,下列CAN帧依次代表的含义是首帧、流控、连续帧、连续帧。
FF-FC-CF-CF
实际截取到的多帧报文
下图是N_PCI字节的概要。N_PCI在不同的类型下占用的字节数是不同的。记忆时可以按照单帧、首帧、连续帧、流控的顺序,与0、1、2、3建立映射关系。这四种类型所占用的字节大小依次是1个、2个、1个、3个。
2022.4.15日补充:
实际工作过程中实际使用场景,发送13个字节有效数据,可以看到第二个续流帧的后四个字节与上一帧一致,未进行更新。