ISO 15765-2
1. 개요
ISO 15765-2는 도로 차량에서 CAN(Controller Area Network)을 통한 진단 통신(DoCAN)의 전송 프로토콜 및 네트워크 계층 서비스에 대한 표준이다. 이 표준은 단일 프레임, 첫 번째 프레임, 연속 프레임, 흐름 제어 프레임의 네 가지 프레임 유형을 정의하여 CAN 네트워크를 통해 데이터를 전송한다. 흐름 제어 프레임은 분할된 전송에서 수신 측의 전송 승인을 확인하고, 연속 프레임 간 간격 및 전송 가능한 연속 프레임 수를 지정한다.
2. 프로토콜 제어 정보 (PCI) 필드 유형
ISO-TP 프로토콜은 데이터 전송을 위해 프로토콜 제어 정보(Protocol Control Information, PCI)를 사용하며, 이는 CAN 메시지의 데이터 필드 앞부분에 위치한다. PCI는 전송되는 데이터의 종류와 상태를 나타내며, 크게 네 가지 프레임 유형으로 구분된다. 각 프레임 유형은 고유한 코드 값을 가지며, 메시지의 길이나 전송 상태에 따라 적절한 프레임 유형이 사용된다.
| 유형 | 코드 | 설명 |
|---|---|---|
| 단일 프레임(SF) | 0 | 최대 7바이트(일반 주소 지정) 또는 6바이트(확장 주소 지정)의 짧은 메시지를 한 번에 전송할 때 사용된다. PCI에는 프레임 유형과 데이터 길이(SF_DL)가 포함된다. |
| 첫 번째 프레임(FF) | 1 | 7바이트(또는 6바이트)를 초과하는 긴 메시지를 여러 프레임으로 나누어 보낼 때, 그 시작을 알리는 프레임이다. PCI에는 프레임 유형과 전체 메시지 길이(FF_DL)가 포함된다. |
| 연속 프레임(CF) | 2 | 첫 번째 프레임(FF) 이후, 분할된 메시지의 나머지 데이터 조각들을 전송하는 데 사용된다. PCI에는 프레임 유형과 순서 번호(Sequence Number, SN)가 포함된다. |
| 흐름 제어 프레임(FC) | 3 | 긴 메시지를 수신하는 측에서 송신 측으로 보내는 응답 프레임이다. 연속 프레임(CF)의 전송 속도와 양을 조절하는 정보를 담고 있다. |
| 예약됨 | 4..15 | 현재 사용되지 않고 예약된 코드 값이다. |
각 프레임 유형별 PCI 필드의 구조는 다음과 같다. PCI 필드는 CAN 데이터 필드의 첫 번째 또는 첫 두 바이트(FF의 경우)를 차지한다.
| 프레임 유형 | 비트 오프셋 7..4 (바이트 0) | 비트 오프셋 3..0 (바이트 0) | 비트 오프셋 15..8 (바이트 1) | 비트 오프셋 23..16 (바이트 2) | 이후 바이트 |
|---|---|---|---|---|---|
| 단일 프레임 (SF) | 0 (유형=SF) | 데이터 길이 (0~7) | 데이터 A | 데이터 B | 데이터 ... |
| 첫 번째 프레임 (FF) | colspan="2" | 전체 메시지 길이 (8~4095) | 데이터 A | 데이터 B ... | ||
| 연속 프레임 (CF) | 2 (유형=CF) | 순서 번호 (0~15) | 데이터 A | 데이터 B | 데이터 ... |
| 흐름 제어 프레임 (FC) | 3 (유형=FC) | 흐름 상태 (0,1,2) | 블록 크기 (BS) | 분리 시간 (ST) | (데이터 없음) |
* 단일 프레임(SF): 첫 4비트는 유형(0), 다음 4비트는 페이로드 길이(0~7)를 나타낸다.
* 첫 번째 프레임(FF): 첫 4비트는 유형(1), 다음 12비트(나머지 4비트 + 다음 바이트 8비트)는 전체 메시지 길이(8~4095)를 나타낸다.
* 연속 프레임(CF): 첫 4비트는 유형(2), 다음 4비트는 1부터 시작하여 15 다음 0으로 순환하는 순서 번호(Sequence Number)를 나타낸다.
* 흐름 제어 프레임(FC): 첫 4비트는 유형(3), 다음 4비트는 흐름 상태(FS: 0=전송 계속, 1=대기, 2=오버플로)를 나타낸다. 다음 바이트는 블록 크기(BS), 그 다음 바이트는 분리 시간(ST)을 나타낸다.
CAN FD 환경에서는 더 큰 페이로드를 지원하기 위해 단일 프레임과 첫 번째 프레임의 PCI 구조가 일부 확장되었으나, 기존 ISO 15765-2와의 하위 호환성은 유지된다.
2.1. 단일 프레임 (Single Frame, SF)
ISO-TP 프로토콜에서 정의하는 프레임 유형 중 하나이다. 단일 프레임(Single Frame, SF)은 전송할 사용자 데이터(페이로드)의 전체 크기가 CAN 버스 데이터 프레임 하나에 모두 담길 수 있을 만큼 작을 때 사용된다. 구체적으로는 최대 7바이트(일반 주소 지정 방식) 또는 6바이트(확장 주소 지정 방식)의 페이로드를 한 번에 전송할 수 있다.
단일 프레임의 프로토콜 제어 정보(Protocol Control Information, PCI)는 1바이트로 구성된다. 첫 4비트는 프레임 유형을 나타내며, 단일 프레임의 경우 이 값은 0이다. 나머지 4비트는 전송되는 페이로드의 실제 길이(1~7바이트)를 나타낸다 (SF_DL).
| 비트 오프셋 | 7 .. 4 (바이트 0) | 3 .. 0 (바이트 0) | 15 .. 8 (바이트 1) | 23..16 (바이트 2) | .... |
|---|---|---|---|---|---|
| 단일 프레임 (SF) | 0 (유형 = SF) | 크기 (0..7 바이트) | 데이터 바이트 1 | 데이터 바이트 2 | 데이터 바이트 ... |
7바이트 이하의 짧은 메시지를 보낼 때 이 단일 프레임 형식을 사용한다. 첫 번째 바이트의 상위 4비트(유형 필드)가 0이기 때문에, 때로는 단순히 '길이-데이터' 형식으로 이루어진 더 간단한 프로토콜로 잘못 해석되기도 한다. 데이터 길이가 7바이트(또는 확장 주소 지정 시 6바이트)를 초과하는 경우에는 첫 번째 프레임(FF)과 연속 프레임(CF)을 이용한 분할 전송 방식이 사용된다.
2.2. 첫 번째 프레임 (First Frame, FF)
첫 번째 프레임(First Frame영어, FF)은 ISO 15765-2 프로토콜에서 여러 CAN 프레임에 걸쳐 전송되어야 하는 긴 메시지의 시작을 알리는 데 사용된다. 전송하려는 데이터의 크기가 단일 프레임으로 보낼 수 있는 최대 크기(일반 주소 지정 방식에서는 7바이트, 확장 주소 지정 방식에서는 6바이트)를 초과할 경우, 메시지는 여러 프레임으로 분할되어 전송되며, 그 첫 번째 프레임이 바로 FF이다.
FF는 단순히 분할된 메시지의 시작을 알리는 것 외에도 중요한 정보를 담고 있다. 바로 전체 메시지의 총 길이(페이로드 길이)와 메시지의 첫 부분 데이터이다. 이를 통해 수신 측에서는 앞으로 받아야 할 총 데이터의 양을 미리 파악하고 준비할 수 있다.
FF의 프로토콜 제어 정보(PCI, Protocol Control Information)는 다음과 같은 구조를 가진다.
| 바이트 위치 | 비트 오프셋 | 설명 | 값 |
|---|---|---|---|
| 바이트 0 | 7 .. 4 | 프레임 유형 | 1 (첫 번째 프레임) |
| 3 .. 0 | 메시지 길이 (상위 4비트) | 전체 메시지 길이 (FF_DL, 8 ~ 4095 바이트) (PCI 바이트 제외) | |
| 바이트 1 | 7 .. 0 | 메시지 길이 (하위 8비트) | |
| 바이트 2 ~ | 데이터 A, 데이터 B, ... | 메시지의 첫 부분 데이터 |
위 표에서 볼 수 있듯이, PCI의 첫 4비트는 프레임 유형을 나타내며 FF의 경우 값은 '1'이다. 이어지는 12비트는 전체 메시지의 길이를 바이트 단위로 나타낸다(FF_DL). 이 길이는 PCI 자체를 제외한 순수 데이터의 길이이며, 최대 4095바이트까지 표현할 수 있다. 다만 실제 애플리케이션에서는 수신 측의 버퍼 크기나 하드웨어 제약 등으로 인해 이보다 작은 값으로 제한되는 경우가 많다. PCI 필드 다음에는 분할된 메시지의 첫 번째 데이터 조각이 위치한다.
송신 측에서 FF를 보내면, 수신 측은 이를 확인하고 흐름 제어 프레임(FC)을 보내 응답한다. FC 프레임에는 이후 전송될 연속 프레임(CF)들의 전송 간격이나 한 번에 받을 수 있는 CF의 개수(블록 크기) 등의 제어 정보가 담겨 있다.
CAN FD 환경에서는 더 큰 데이터 전송을 지원하기 위해 FF의 길이 필드가 확장되었지만, 기존 ISO 15765와의 하위 호환성은 유지된다.
2.3. 연속 프레임 (Consecutive Frame, CF)
연속 프레임(Consecutive Frame, CF)은 ISO 15765-2 프로토콜에서 여러 프레임으로 나누어 보내야 하는 긴 메시지의 두 번째 이후 데이터 조각들을 전송하는 데 사용된다. 첫 번째 프레임(FF)이 전송된 후, 수신 측의 흐름 제어 프레임(FC) 지시에 따라 송신 측에서 연속 프레임들을 보내 메시지의 나머지 부분을 전달한다.
각 연속 프레임은 1바이트 크기의 PCI(Protocol Control Information) 헤더를 가진다. 이 헤더의 구조는 다음과 같다.
| 비트 위치 | 7 .. 4 | 3 .. 0 |
|---|---|---|
| | 유형 (Type) || 시퀀스 번호 (Sequence Number, SN) | ||
| | 2 || 0 ~ 15 |
* 유형 (Type): 상위 4비트는 프레임 유형을 나타내며, 연속 프레임의 경우 항상 2로 설정된다.
* 시퀀스 번호 (Sequence Number, SN): 하위 4비트는 시퀀스 번호를 나타낸다. 이 번호는 첫 번째 연속 프레임에서 1부터 시작하여 연속 프레임이 전송될 때마다 1씩 증가한다 (1, 2, 3, ..., 15). 15 다음에는 다시 0으로 돌아가 순환한다 (0, 1, 2, ...).
이 시퀀스 번호는 수신 측에서 메시지 조각들이 순서대로 도착했는지, 중간에 누락된 프레임은 없는지 확인하는 데 사용된다. 첫 번째 프레임(FF)에 포함된 데이터 이후의 첫 번째 연속 프레임(CF)은 시퀀스 번호 1을 가진다.
2.4. 흐름 제어 프레임 (Flow Control Frame, FC)
흐름 제어(Flow Control, FC) 프레임은 ISO 15765-2 프로토콜에서 정의하는 네 가지 프레임 유형 중 하나로, 코드 값 3을 사용한다. 주로 여러 프레임으로 분할된 긴 메시지를 전송할 때, 수신 측에서 송신 측으로 보내는 응답 프레임이다. 첫 번째 프레임(FF)을 잘 받았다는 확인 신호와 함께, 이후 전송될 연속 프레임(CF)의 전송 속도와 양을 조절하는 중요한 역할을 한다.
7바이트를 초과하는 메시지는 여러 프레임으로 나누어 보내야 하는데, 이때 첫 번째 프레임(FF)을 받은 수신자는 흐름 제어(FC) 프레임으로 응답한다. 이 FC 프레임에는 후속 연속 프레임(CF)들을 어떤 간격(분리 시간, ST)으로, 한 번에 몇 개(블록 크기, BS)까지 받을 수 있는지를 지정하는 정보가 담겨 있다.
FC 프레임의 구조는 다음과 같다.
| 비트 오프셋 | 7 .. 4 (바이트 0) | 3 .. 0 (바이트 0) | 15 .. 8 (바이트 1) | 23..16 (바이트 2) |
|---|---|---|---|---|
| 설명 | 유형 (Type) | 흐름 상태 (Flow Status, FS) | 블록 크기 (Block Size, BS) | 분리 시간 (Separation Time, ST) |
| 값 | 3 | 0 = CTS (Clear To Send, 전송 허용) 1 = WAIT (대기) 2 = OVFLW (Overflow, 오버플로우) | 0 ~ 255 | 0x00 ~ 0x7F (최소 간격 0~127ms) 0xF1 ~ 0xF9 (최소 간격 100~900µs) |
각 필드의 의미는 다음과 같다.
* 유형 (Type): 항상 3으로 설정되어 FC 프레임임을 나타낸다.
* 흐름 상태 (Flow Status, FS): 수신 측의 상태를 알려주어 송신 측의 동작을 제어한다.
* `0 (CTS)`: 데이터 전송 허용.
* `1 (WAIT)`: 수신 측 준비 미흡, 다음 FC 프레임까지 대기.
* `2 (OVFLW)`: 수신 버퍼 오버플로우, 메시지 전송 중단.
* 블록 크기 (Block Size, BS): 다음 FC 프레임 전까지 수신 가능한 연속 프레임(CF)의 최대 개수.
* `BS = 0`: 블록 크기 제한 없이 남은 모든 CF 전송 가능 (다음 FC 없음).
* `BS > 0`: 지정된 개수만큼 CF 전송 후 다음 FC 대기.
* 분리 시간 (Separation Time, ST): 연속 프레임(CF) 전송 시 유지해야 하는 최소 시간 간격.
* `ST 값 0x00 ~ 0x7F`: 최소 간격 0 ~ 127 밀리초(ms).
* `ST 값 0xF1 ~ 0xF9`: 최소 간격 100 ~ 900 마이크로초(µs).
* `ST 값 0x80 ~ 0xF0`: 예약된 값.
ST 값은 한 프레임의 전송 종료 시점부터 다음 프레임의 전송 시작 시점까지의 최소 시간을 의미한다. 구현 시, 이를 프레임 시작 간 간격(프레임 반복률)으로 잘못 해석하는 경우가 있을 수 있으므로 주의가 필요하다.
흐름 제어 프레임은 수신 측의 상태에 맞춰 데이터 전송 속도와 양을 동적으로 조절함으로써, CAN 버스와 같이 제한된 대역폭 환경에서도 안정적인 멀티 프레임 메시지 전송을 가능하게 한다.
3. CAN-TP 헤더
ISO-TP는 다음과 같은 네 가지 프레임 유형을 정의한다.
| 유형 | 코드 | 설명 |
|---|---|---|
| 단일 프레임(SF) | 0 | 최대 7바이트(일반 주소 지정) 또는 6바이트(확장 주소 지정)의 전체 페이로드(실제 데이터)를 포함하는 단일 프레임으로 전송된다. |
| 첫 번째 프레임(FF) | 1 | 7바이트를 초과하여 분할 전송이 필요한 경우, 다중 프레임 메시지의 시작을 알리는 프레임이다. 전체 메시지 길이와 초기 데이터를 포함한다. |
| 연속 프레임(CF) | 2 | 다중 프레임 메시지에서 첫 번째 프레임 이후의 데이터를 순차적으로 전송하는 프레임이다. |
| 흐름 제어 프레임(FC) | 3 | 첫 번째 프레임(FF)을 수신한 측에서 송신 측으로 보내는 응답 프레임이다. 이후 연속 프레임(CF)의 전송 속도와 블록 크기를 제어하는 매개변수를 설정한다. |
CAN-TP 헤더의 구조는 프레임 유형에 따라 다르며, 각 바이트의 비트 오프셋에 따라 정보가 할당된다.
| 프레임 유형 | 비트 오프셋 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 (유형) | FC 플래그 (0,1,2) | 블록 크기 | ST (분리 시간) | |
7바이트 이하의 짧은 메시지는 단일 프레임(SF)으로 전송된다. 헤더의 첫 바이트는 상위 4비트로 유형(0)을 나타내고, 하위 4비트로 페이로드의 길이(1~7바이트)를 나타낸다. 이 구조 때문에 때로는 단순히 길이-데이터 형식의 간단한 프로토콜로 잘못 해석되기도 한다.
7바이트를 초과하는 긴 메시지는 여러 프레임으로 나누어 전송해야 한다. 이 분할 전송은 첫 번째 프레임(FF)으로 시작한다. FF의 헤더(PCI, Protocol Control Information)는 2바이트로 구성된다. 첫 4비트는 유형(1)을 나타내고, 나머지 12비트는 전체 메시지의 길이(헤더 바이트 제외, 최대 4095바이트)를 나타낸다.
수신 측은 FF를 받으면 흐름 제어 프레임(FC)으로 응답한다. FC 프레임은 3바이트의 헤더(PCI)를 가지며, 이를 통해 후속 연속 프레임(CF) 전송 방식을 제어한다.
| 비트 오프셋 | 7 .. 4 (바이트 0) | 3 .. 0 (바이트 0) | 15 .. 8 (바이트 1) | 23..16 (바이트 2) |
|---|---|---|---|---|
| 설명 | 유형 (3) | 흐름 상태 (FS) | 블록 크기 (BS) | 분리 시간 (ST) |
| 값 | 3 | 0 = 계속 전송 (CTS, Clear To Send) 1 = 대기 (WAIT) 2 = 오버플로/중단 (OVFLW) | 0 = 나머지 프레임 연속 전송 > 0 = 다음 FC 프레임 전송 전까지 보낼 수 있는 CF 프레임 수 | 0x00 ~ 0x7F: 0 ~ 127 밀리초(ms) 0xF1 ~ 0xF9: 100 ~ 900 마이크로초(µs) |
FC 헤더의 첫 바이트는 유형(3)과 흐름 상태(FS) 플래그(0=계속 전송, 1=대기, 2=오버플로/중단)를 포함한다. 두 번째 바이트는 블록 크기(BS)로, 다음 FC 프레임을 기다리기 전에 송신 측이 보낼 수 있는 연속 프레임(CF)의 수를 지정한다. BS 값이 0이면, 송신 측은 나머지 모든 CF를 흐름 제어 없이 연속으로 보낼 수 있다. 세 번째 바이트는 분리 시간(ST)으로, 연속된 CF 프레임 사이의 최소 시간 간격을 나타낸다. ST 값이 0x00부터 0x7F까지는 밀리초(0~127ms) 단위의 시간 간격을 의미하고, 0xF1부터 0xF9까지는 마이크로초(100~900µs) 단위의 더 짧은 시간 간격을 지정한다. ST는 한 프레임의 전송 종료 시점부터 다음 프레임의 전송 시작 시점까지의 최소 시간을 정의한다.
송신 측은 메시지의 나머지 부분을 연속 프레임(CF)을 사용하여 전송한다. 각 CF는 1바이트 헤더(PCI)를 가지며, 상위 4비트는 유형(2)을, 하위 4비트는 시퀀스 번호(SN) 또는 인덱스를 나타낸다. 시퀀스 번호는 첫 번째 CF에서 1로 시작하여 전송되는 CF마다 1씩 증가하며, 15 다음에는 다시 0으로 순환한다(1, 2, ..., 15, 0, 1, ...). 이 번호를 통해 수신 측은 프레임 손실이나 순서 오류를 감지할 수 있다.
FF의 12비트 길이 필드는 이론적으로 최대 4095바이트의 사용자 데이터를 분할 메시지로 전송할 수 있게 하지만, 실제로는 수신 측의 버퍼 크기나 하드웨어 제약 등으로 인해 애플리케이션별 제한이 더 낮게 설정되는 경우가 많다.
CAN FD의 경우, ISO 15765-2 프로토콜은 더 큰 데이터 크기를 지원하도록 확장되었지만, 기존 ISO 15765와의 역호환성은 유지된다.
4. 타이밍 파라미터
ISO 15765-2 표준에서는 통신 과정을 제어하기 위해 여러 타이밍 파라미터를 정의한다. 대표적인 예로 P1 타이머와 P2 타이머 등이 있다.
5. 표준
* ISO 15765-2:2016 Road vehicles -- Diagnostic communication over Controller Area Network (DoCAN) -- Part 2: Transport protocol and network layer services (ISO 15765-2:2016 도로 차량 - CAN(Controller Area Network)을 통한 진단 통신(DoCAN) - 파트 2: 전송 프로토콜 및 네트워크 계층 서비스)