ISO 15765-2

ISO 15765-2[1]也称为ISO-TP( TP表示传输层,Transport Layer),是在控制器局域网络(CAN)上传输网络封包国际标准。传统CAN讯息,每一的资料最多只有八个字节,透过ISO-TP可以传输超过八个字节的资料。ISO-TP会将长资料封包拆成许多的资料帧,其中再加入一些编码资料,方便传送端及接收端解读各资料帧,并且让接收端可以将许多的资料帧还原成原始讯息。ISO-TP的一个资料封包的最大酬载为4095字节。

OSI模型中,ISO-TP对应第三层(网络层)及第四层(传输层)。ISO-TP最常见的应用是针对有OBD-2设备的车辆,用KWP2000统一诊断服务(UDS)传输诊断讯息,不过ISO-TP也可以用在其他特定的CAN通讯协定中。

ISO-TP有二种运作的模式,有一种是不加额外的位址字节,只利用CAN ID来定址,称为正常定址(normal addressing),另一种是会加上一个定位用的字节,称为延伸定址(extended addressing)。延伸定址会用CAN资料的第一个位元来作为定址用,资料帧的酬载量会因此再减少一个字节。为了简单起见,以下的说明都是以正常定址下进行的。ISO 15765-2通讯协定允许六种定址方式。

ISO-TP会使用八个字节的CAN资料帧中的一个或多个字节来存放元资料,因此酬载量最多只有七个字节。元资料称为协定控制资讯(Protocol Control Information),简称PCI。PCI可能是1-3个字节。最前面的第四位元说明帧的型态,也间接的说明PCI的长度。

ISO 15765-2是ISO 15765(道路车辆,在CAN网络上的诊断通讯)的一部分,其中分为四个部分:

  • ISO 15765-1 第一部分:通用资讯以及使用例定义。
  • ISO 15765-2 第二部分:传输层协定以及网络层服务。
  • ISO 15765-3 第三部分:统一诊断服务的实现(后来被ISO 14229-3的统一诊断服务取代)
  • ISO 15765-4 第四部分:排气相关系统的需求

PCI帧种类列表

ISO-TP定义了四种不同的帧:

种类 编码 叙述
单一帧 0 单一帧中的酬载资料最多七个字节(若是延伸定址,酬载资料最多六个字节)。
首帧 1 首帧的PCI帧资料较长,会包括多帧的资讯,若资料无法用单一帧传送,就会用一个首帧配合多个连续帧传送。
首帧的PCI帧会包括总资料长度
连续帧 2 会传送多帧封包中,首帧以外的其他资讯。
流量控制帧 3 接收端的回应。
收到首帧资讯。也会提供和后续传送连续帧有关的参数
4..15 保留
CAN-TP 帧头
Bit编号 7 .. 4(字节0) 3 .. 0(字节0) 15 .. 8(字节1) 23..16(字节2) ....
单一帧(SF) 0 资料长度 (0..7) 资料A 资料B 资料C
首帧(FF) 1 资料长度 (8..4095) 资料A 资料B
连续帧(CF) 2 索引号 (0..15) 资料A 资料B 资料C
流量(FC) 3 流量控制旗标 (0,1,2) 区块大小 ST

单一帧可以传送小于等于七个字节以下的讯息,其第一Nibble(4 Bits)为0,酬载长度为1至7字节。种类栏位的数值为0,是比较简单的资料格式,开头字节是长度,不过若没有特别说明,很容易造成误解。

若讯息超过七个字节,可以用多重帧传送。首帧(FF)的PCI栏位有二个字节,前4个位元是种类编码(1),之后的12个位元是讯息长度(不包括种类及长度位元)。接收端会确认此一传送,用流量控制帧(FC)回应。流量控制帧的PCI栏位有三个字节,标示各帧之间的时间间隔,以及连续帧传送的方式(区块大小)。

流量控制
Bit编号 7 .. 4 3 .. 0 15 .. 8 23..16
说明 种类 若允许传送 区块大小 间隔时间(Separation Time、ST),二个帧之间的最小延迟时间(从前一个帧的结束到下一个帧的开始)
流量控制帧 种类编号3 0=继续传送 =0 : 表示需要传送的帧可以在没有流量控制或是延迟的情形下,直接送出 <= 127,间隔时间单位为ms
1=等待 >0 : 在下一次流量控制帧之前,传送的帧数量 0xF1 至 0xF9,100至900μs
2=超载/结束

第一个Byte(8 Bits)的前四个Bit会包括种类编号(type = 3),后四个Bit会说明是否允许传送(0 = 继续传送、1 = 等待、2 = 超载/结束)。下一个字节是区块大小(block size),在下一个流量控制帧之前可以传送的帧数量,若为0,表示剩下的帧都可以在没有流量控制的条件下传送。第三个字节是间隔时间(Separation Time、ST),二个帧之间的最小延迟时间。若数量小于127 (0x7F),表示以ms为单位的间隔时间,若数值在241 (0xF1) 至 249 (0xF9) 之间,表示间隔时间从 100 到 900 ms。间隔时间的定义是从前一个帧的结束到下一个帧的开始。在实作时,需要有严谨的实作,接受传送端可能将间隔时间定义为前一个帧的开始到下一个帧的开始的可能性(即帧传送率)。就算是很仔细的实现,也可能是因为位元填充机制增加位元数量而失效。

传送端之后会用连续帧来传送后续的资料。每一个连续帧都有一个字节的PCI,前四个位元对应type = 2,后面四个位元是索引号。索引号从1开始,每一个连续帧会加1(1, 2,..., 15, 0, 1,...),因此可以检测到遗漏的帧。 第一笔资料会在首帧的后面送出,因此第一个连续帧的索引号会是1,依序往下递增,一直到15为止,再从0开始计数。 长度栏位12位元,因此封包的资料最多可以到4095字节。不过在实务上,典型应用的最大长度会因接收缓冲区或是硬件的限制而比较短。

标准

参考资料

  1. ^ 14:00-17:00. ISO 15765-2:2016. ISO. [2019-04-05] (英语).