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位元組。不過在實務上,典型應用的最大長度會因接收緩衝區或是硬體的限制而比較短。
標準
參考資料