Frame Types and Formats

CAN에서는 기능적 요구에 따라 다양한 메시지 유형과 형식이 사용된다.
| CAN Remote Frame | 특정 노드에게 데이터 전송을 요청할 떄 사용 |
| CAN Data Frame | 실제 데이터를 전송할 때 사용 |
| CAN Error Frame | 통신 오류가 발생했을 때 오류를 알리기 위해 사용 |
| CAN Overload Frame | 수신 노드가 처리 시간을 더 필요로 할 때 다음 프레임 전송을 지연시키는 역할 |
CAN 메시지는 식별자 길이에 따라 표준 형식과 확장 형식으로 구분된다.
식별자가 11비트이면 표준 형식, 29비트이면 확장 형식이다.
또한 프레임의 목적에 따라 실제 데이터를 전송하는 Data Frame과, 특정 데이터 전송을 요청하는 Remote Frame으로 구분된다.
Data Frame은 데이터 필드를 포함하며, Remote Frame은 데이터 필드를 포함하지 않고 특정 식별자의 데이터 전송을 요청할 때 사용된다.
Structure of CAN Data Frame in Standard Format

| 필드 | 설명 |
| SOF (Start Of Frame) | CAN 프레임의 시작을 알리는 필드 |
| CRC (Cyclic Redundancy Check) | 전송 오류 검출을 위한 검사 필드 |
| RTR (Reomote Transmission Request) | Data Frame과 Remote Frame을 구분하는 필드 |
| DEL (Delimiter) | 필드의 끝을 구분하는 구분 비트 |
| IDE (Identifier Extension) | 표준 형식과 확장 현식을 구분하는 필드 |
| ACK (Acknowledgement) | 정상 수신 여부를 확인하는 응답 필드 |
| r (Reserve Bit) | 향후 확장을 위해 예약된 비트 |
| EOF (End of Frame) | 프레임의 종료를 알리는 필드 |
| DLC (Data Length Code) | 데이터 필드의 길이를 나타내는 필드 |
| ITM (Intermission) | 프레임 종료 후 다음 프레임 전 대기 구간 |
| IFS (Inter Frame Space) | 프레임과 프레임 사이의 전체 간격 |
SOF (Start of Frame)

SOF(Start of Frame)는 메시지의 시작을 나타내며, 버스 상태가 유휴 상태(논리 1)에서 논리 0으로 변하는 순간을 의미한다.
이를 통해 수신 노드들은 메시지의 시작을 인식하고, 송신 노드와 동기화를 수행할 수 있다.
CAN 버스는 유휴 상태일 때 항상 논리 1(열성 상태)을 유지하며, 모든 노드는 최소 11비트 시간 동안 이 상태가 유지되어야 버스가 유휴 상태임을 인식한다.
SOF에서 발생하는 1 → 0 변화(에지)를 기준으로 각 노드는 비트 타이밍을 동기화하고, 이후의 비트들을 정확하게 샘플링할 수 있다.
모든 노드는 설정된 BaudRate를 기반으로 비트 시간을 알고 있으며, SOF를 기준으로 내부 타이머를 동기화하여 동일한 타이밍으로 데이터를 해석한다.
Identifier

Identifier는 CAN 메시지의 우선순위를 결정하고, 메시지의 의미를 구분하는 역할을 한다.
전송 시에는 중재(Arbitration) 과정에서 ID 값이 작을수록 높은 우선순위를 가지며, 이를 통해 어떤 메시지가 먼저 전송될지 결정된다.
수신 시에는 각 노드가 Acceptance Filter를 통해 ID를 비교하여 메시지를 수신할지 여부를 결정한다.
Identifier는 데이터 자체를 포함하지는 않지만, 시스템에서 미리 정의된 규칙에 따라 해당 메시지의 데이터 의미와 구조를 해석하는 기준으로 사용된다. 또한 중재는 MSB부터 비교되며, MSB가 더 낮은 값을 가진 메시지가 우선권을 갖는다.
msb는 가장 중요한 비트이며 lsb는 최하위 비트이다.
Remote Transmission Request

Remote Frame은 특정 Identifier에 해당하는 데이터를 요청하기 위한 프레임이다.
Remote Frame과 Data Frame은 동일한 Identifier를 사용할 수 있으며, 이 경우 중재 과정에서 RTR 비트가 함께 비교된다. Data Frame(RTR=0, Dominant)은 Remote Frame(RTR=1, Recessive)보다 높은 우선순위를 가지므로 항상 우선적으로 전송된다.
Remote Frame에는 Data Field가 포함되지 않으며, DLC는 요청하는 데이터의 길이를 나타낸다. 그리고 요청-응답 방식의 통신을 위해 사용되지만, 최근에는 구현 복잡성과 비효율성으로 인해 거의 사용되지 않는다.
Identifier Extension

Extended Identifier는 기존 11bit 식별자의 한계를 확장하기 위해 29bit 식별자를 사용하는 방식이다.
→ Standard CAN: 11bit (최대 2048개 ID)
→ Extended CAN: 29bit (더 많은 메시지 표현 가능)
확장된 식별자는 SAE J1939, NMEA 2000 등의 프로토콜에서 사용되며, 많은 ECU와 다양한 메시지를 처리하기 위한 목적으로 적용된다.
Arbitration of Extended and Standard Format

중재는 비트 단위로 수행된다.
위 예시에서는 Extended Frame이 우선순위를 가진다.
첫 11자리를 비교하면 Standard는 1101... Extended는 1100... 즉 4번째 자릿수가 다르다.
0(dominant)가 우선순위가 더 높으므로 Extended Frame이 우선순위가 더 높다.
추가적으로 두 Frame 모두 CAN 버스에서 공존이 가능하다.
Data Length Code and Data Field

DLC(Data Length Code)는 데이터 필드의 길이를 나타내며, 4bit로 구성되어 0~15까지 표현할 수 있다.
데이터 필드는 0~8 byte의 가변 길이를 가지며, 필요한 만큼만 전송함으로써 버스 효율을 높인다.
DLC 값이 8보다 크더라도 실제 Data Field는 최대 8 byte까지만 존재하므로, 이 경우에도 데이터 길이는 8 byte로 해석된다.
Cyclic Redundancy Check

디지털 통신 기술에서 오류를 감지하는 표준 방법.
송신기는 메시지의 비트 데이터를 기반으로 CRC 값을 계산하여 프레임에 포함시킨다.
수신기는 동일한 알고리즘으로 CRC를 다시 계산한 후, 수신된 CRC 값과 비교하여 오류 여부를 판단한다.
CRC는 단일 비트 오류를 포함한 대부분의 전송 오류를 높은 확률로 검출할 수 있다.
Acknowledgement

ACK(Acknowledgement)는 송신된 메시지가 정상적으로 수신되었는지를 확인하기 위한 비트이다.
송신기는 ACK 슬롯에서 recessive(1)를 전송하며, 메시지를 정상적으로 수신한 노드가 dominant(0)로 응답한다.
하나 이상의 수신 노드가 정상적으로 메시지를 수신하면 ACK 슬롯에서 dominant(0)가 형성되며, 송신기는 이를 통해 메시지가 성공적으로 전달되었음을 인식한다.
반대로 ACK 슬롯이 recessive(1) 상태로 유지되면, 이는 수신 노드가 없거나 오류가 발생했음을 의미하며 송신기는 전송 실패로 판단한다.
dominant ACK-Bit
적어도 하나의 수신기가 오류 없이 메시지를 받았다.
ACK-Bit remains recessive
모든 수신기에서 오류가 감지되었거나 송신 노드가 버스에서 유일하게 활성화되어있다.
두 경우 모두 전송이 중단되고 ACK 비트 다음 비트에서 시작되는 오류 플래그에 의해 유효하지 않은 것으로 표시.
End of Frame and Intermission

EOF는 프레임의 끝을 나타낸다.
ITM은 휴식시간을 나타내며 IFS는 프레임 간 공간을 의미한다.
노드가 버스에서 11개의 연속적인 recessive(1) bit를 보이면 버스가 유휴 상태이며 접근이 자유로운 것으로 판단된다.
이제 모든 노드는 애플리케이션을 통해 전송 요청을 실현하기 위해 버스에 자유롭게 접근할 수 있다.
ITM은 인터 프레임 공간(IFS)로도 알려져 있다.
Bit Stuffing

Bit Stuffing은 CAN 통신에서 동일한 값의 비트가 5번 연속될 경우 송신기가 반대 값을 가진 비트를 삽입하는 방식이다.
수신기는 이 비트를 제거하여 원래 데이터를 복원하며, 동일한 값의 비트가 6번 연속될 경우 오류로 판단한다.
Bit Stuffing은 긴 동일 비트 시퀀스를 방지하여 수신기의 비트 동기화를 유지하고, 안정적인 데이터 해석을 가능하게 한다.
또한 Bit Stuffing 규칙은 오류 발생 시 의도적으로 위반될 수 있으며, 이를 통해 다른 노드에 오류 발생을 알리는 역할을 한다.
'공부 내용 > 직무 공부' 카테고리의 다른 글
| CAN 통신 - Data Protection (0) | 2026.04.28 |
|---|---|
| CAN 통신 - 전송 과정 및 중재 설명 (0) | 2026.04.27 |
| CAN 통신 구조 정리 - Broadcast 방식과 Acceptance Filter 이해 (0) | 2026.04.27 |
| CAN 통신 기초 정리 (OSI 계층, 전압 신호, 메시지 구조) (0) | 2025.11.02 |
| 자동차 애플리케이션 도메인, Serial 버스 시스템 (0) | 2025.11.01 |