CAN 프레임(CAN Framing) — CAN 버스 위에서 전송되는 메시지 단위의 비트 스트림 구조. 메시지 유형(Data / Remote), 식별자 길이(Standard / Extended)에 따라 4가지 조합이 사용되며, 표준 포맷과 확장 포맷은 동일 버스에서 공존 가능하다.
프레임 유형과 포맷
CAN에는 2 × 2 = 4가지 프레임 조합이 존재한다.
| Standard Format (11-bit ID) | Extended Format (29-bit ID) | |
|---|---|---|
| Data Frame | Data Field 0~8 Byte | Data Field 0~8 Byte |
| Remote Frame | Data Field 없음 | Data Field 없음 |
구분 기준 2가지:
- Identifier 길이: 11-bit → Standard / 29-bit → Extended
- Data Field 존재 여부: 있음 → Data Frame / 없음 → Remote Frame
Data Frame (Standard Format) 구조
| 필드 | 크기 | 역할 |
|---|---|---|
| Bus idle | — | recessive 상태 |
| SOF | 1 bit | Start of Frame, dominant |
| Identifier | 11 bit | 메시지 우선순위·내용 식별 |
| RTR | 1 bit | Remote Transmission Request |
| IDE | 1 bit | Identifier Extension (Std/Ext 구분) |
| r | 1 bit | Reserve Bit |
| DLC | 4 bit | Data Length Code |
| Data Field | 0~8 Byte | 페이로드 |
| CRC | 15 bit | 체크섬 |
| CRC DEL | 1 bit | Delimiter, recessive |
| ACK | 1 bit | Acknowledgement slot |
| ACK DEL | 1 bit | Delimiter, recessive |
| EOF | 7 bit | End of Frame, 모두 recessive |
| ITM | 3 bit | Intermission (Inter Frame Space, IFS) |
| Bus idle | — | 다음 프레임 가능 |
필드 묶음:
- Arbitration Field: Identifier + RTR (중재 참여)
- Control Field: IDE + r + DLC
- Check Field: CRC + DEL
- ACK Field: ACK + DEL
약어 정리
| 약어 | 원어 |
|---|---|
| SOF | Start of Frame |
| RTR | Remote Transmission Request |
| IDE | Identifier Extension |
| r | Reserve Bit |
| DLC | Data Length Code |
| CRC | Cyclic Redundancy Check |
| DEL | Delimiter |
| ACK | Acknowledgement |
| EOF | End of Frame |
| ITM | Intermission |
| IFS | Inter Frame Space |
필드별 상세
Start of Frame (SOF)
- Bus idle(recessive=1) → dominant(0)로의 물리 상태 변화.
- 메시지 시작 표시 + 수신자 동기화 수단 제공.
- 프레임 시작 조건: 직전에 연속 11개 recessive 비트 관찰 (bus idle 판정).
- 모든 ECU가 Baud rate 설정으로 비트 duration을 알고 있음 (예: 500 kBaud → 1 비트 = 2µs).
- 1→0 에지 수신 시 모든 노드가 cyclic bit duration timer 시작 → 후속 비트 값도 인식 가능.
Identifier
- Standard: 11 bit (b10…b0), 0x000 ~ 0x7FF (0~2047 decimal).
- Extended: 29 bit, 최대 536,870,912(약 5.36억) 개 ID.
- 역할:
msb: most significant bit / lsb: least significant bit
RTR (Remote Transmission Request)
- Dominant (0): Data Frame
- Recessive (1): Remote Frame
특정 Identifier로 식별되는 데이터가 필요할 때, 요청 노드가 동일 ID + RTR=1로 Remote Frame을 발행 → 해당 ID의 Data Frame 송신자가 응답. Data Frame과 Remote Frame이 동일 ID로 동시에 전송되면 중재 시 Data Frame이 우선 (RTR=0=dominant).
- Remote Frame은 Data Field가 없지만 DLC는 요청하는 데이터 길이로 설정.
- 주기적 데이터 송신을 공유하지 않는 영역에서 사용 (장거리 버스·건물 서비스·자동화 공정 등). 자동차에서는 드묾.
IDE (Identifier Extension)
- Dominant (0): Standard Format
- Recessive (1): Extended Format
Standard · Extended 프레임이 동일 ID의 첫 11비트를 공유할 때, IDE 비트에서 Standard가 승리 (IDE=0=dominant).
DLC (Data Length Code) + Data Field
- 4-bit 필드. 0~15 표현 가능.
- 0~8: Data Field 길이 (바이트).
- 9~15: 항상 8바이트로 해석.
- Data Field 길이 가변 → 대역폭 절감, 단 프레임 내에 길이 명시 필요.
CRC (Cyclic Redundancy Check)
- 15-bit 필드. 생성 다항식
0xC599=1100 0101 1001 1001. - 송신자: 비트 시퀀스에 대해 다항식 나눗셈 → 계산 → 프레임에 삽입.
- 수신자: 동일 다항식으로 계산 → 와 비교.
- 동일 프레임 내 최대 5개 비트 에러 감지 가능.
- 자세한 오류 처리는 CAN 에러 처리 참조.
ACK (Acknowledgement)
- 송신자는 recessive(1)을 보내고 수신자들의 응답 대기.
- CRC 통과한 수신자는 dominant(0)로 덮어쓰기 → Positive ACK.
- CRC 실패 시 recessive(1) 유지 → Negative ACK.
- Wired-AND에 의해 최소 1개 수신자가 성공하면 버스에 dominant ACK 관찰됨.
- ACK가 recessive로 남음 → 수신 에러 또는 수신자 부재. 송신자는 ACK 다음 비트부터 Error Flag 송출.
EOF (End of Frame) + ITM (Intermission)
- EOF: 7개 연속 recessive 비트.
- ITM: 3개 recessive 비트 (= Inter Frame Space, IFS).
- EOF + ITM + 이후 → 11개 연속 recessive 관찰 시 bus idle 판정 → 어떤 노드든 SOF로 새 전송 가능.
Standard와 Extended의 중재
Standard Frame과 Extended Frame은 동일 버스에서 공존한다. 동시에 중재에 진입하면 비트 단위 중재로 승자 결정:
- 앞 11비트(Base Identifier)가 동일한 경우 → IDE 비트에서 Standard(IDE=0=dominant) 승리.
- 앞 11비트가 다르면 그 시점에 승부 결정.
자세한 로직은 CAN 중재 참조.
SAE J1939 (Extended Format 응용)
Extended Format(29-bit ID)의 대표적 응용 프로토콜.
- SAE: Society of Automotive Engineers
- 적용 분야: 상용차(utility vehicles), 선박, 철도, 농기계, 대형 발전기.
- 파생 국제 표준:
- NMEA 2000 — 해양 선박 (NMEA: National Maritime Electronics Association)
- ISO 11783 — 농업용 차량·기계(ISO-Bus)
J1939 11-bit ID 해석
| 필드 | 크기 |
|---|---|
| Priority | 3 bit |
| Source Address | 8 bit |
J1939 29-bit ID 해석
| 필드 | 크기 |
|---|---|
| Priority | 3 bit |
| EDP | 1 bit |
| DP | 1 bit |
| PDU Format | 8 bit |
| PDU Specific | 8 bit |
| Source Address | 8 bit |
SRR (Substitute Remote Request)는 Extended Format에서 RTR 위치에 대체 사용되는 비트.
CAN FD 프레임 (Flexible Data-rate)
CAN FD는 동일한 중재 포맷(Standard/Extended)을 유지하면서 페이로드와 CRC 구간을 확장한다. 주요 차이:
- Remote Frame 없음 — 6가지 유형 = Std/Ext × Remote/Data/FD Data 조합에서 FD Remote 제외.
- Data Field 최대 64 Byte (DLC 9~15이 CAN에서는 모두 8 Byte지만 FD에서는 12/16/20/24/32/48/64).
- 비트 치환:
- RTR 위치 → RRS (Remote Request Substitution, dominant 고정).
- 기존 reserve(r) 위치 → FDF (FD Format, recessive → FD 프레임 식별).
- 신규 비트:
- BRS(Bit Rate Switch) — recessive 시 페이로드 구간만 고속 전환.
- ESI(Error State Indicator) — 송신자의 Error Active/Passive 상태 표시.
- Extended FD 포맷에서는 SRR(Substitute Remote Request)가 RTR 대체.
- CRC는 CRC17(
0x3685B) 또는 CRC21 (0x302899) — 고전 CAN의 CRC15(0xC599)와 다름.
자세한 내용은 CAN FD 참조.
Bit Stuffing (비트 스터핑)
CAN 프레임의 특정 구간(SOF부터 CRC 끝까지)에는 동기화와 데이터 무결성을 위해 비트 스터핑 규칙이 적용된다.
- 규칙: 동일 값 비트 5개 연속 시 다음 비트에 반전 비트 삽입.
- 수신자: 5개 동일 후 다음 비트는 스터프 비트로 간주하여 폐기.
- 6개 동일 = 에러.
자세한 내용은 비트 스터핑 참조.