CAN FD (CAN with Flexible Data-rate) — CAN 프로토콜의 확장 규격. 페이로드 구간에서만 전송률을 가변으로 올리고, 데이터 필드를 최대 64 바이트까지 확장한다. 중재·ACK 구간은 기존 CAN과 동일한 규칙을 유지해 호환성을 확보한다.
도입 이유와 효과
- 전송률 향상 → 버스 부하 감소, 버스 통합 기회, 긴 버스에서도 고속화 가능.
- 데이터 필드 확장(최대 64 Byte) → 데이터 대 프로토콜 오버헤드 비 개선, 패킷 분할·메시지 멀티플렉싱 감소.
- 신규 CAN Controller 필요. 단가는 기존 CAN에 근접. 기존 CAN과 완전 호환.
- 기존 HS Transceiver 사용 가능(단, 최신 Transceiver 사용 시 더 높은 Baud rate 실현).
- CAN·상위 프로토콜(AUTOSAR, CANopen, J1939…)의 소규모 적응 필요.
6가지 프레임 유형
Standard/Extended × Remote/Data/FD Data의 조합이지만 CAN FD에는 Remote Frame이 없다.
| 포맷 | Remote | Data | FD Data |
|---|---|---|---|
| Standard (11-bit) | Data Field 없음 | 0~8 Byte | 0~64 Byte |
| Extended (29-bit) | Data Field 없음 | 0~8 Byte | 0~64 Byte |
구분 기준 3가지:
- Identifier 길이: 11-bit (Standard) / 29-bit (Extended)
- Data Field 존재 여부: 있음 → Data Frame / 없음 → Remote Frame
- Data Field 길이: 0~8 Byte → 고전 CAN Data Frame / 0~64 Byte → CAN FD Data Frame
데이터 필드가 없으면 Baud rate 전환 이유도 없다 → CAN FD에 Remote Frame 정의 없음.
프레임 필드 변화 (Standard 포맷 기준)
| 약어 | 원어 | CAN FD에서의 역할 |
|---|---|---|
| SOF | Start Of Frame | 동일 |
| IDE | Identifier Extension | 동일 |
| RRS | Remote Request Substitution | 기존 RTR 위치. Dominant 고정 (CAN FD에는 Remote 없음) |
| FDF | FD Format | 기존 reserve(r) 비트 위치. Recessive → CAN FD 프레임 표시 |
| BRS | Bit Rate Switch | Dominant → 단일 Baud rate / Recessive → 고속으로 일시 전환 |
| ESI | Error State Indicator | Dominant → 송신자 Error Active / Recessive → Error Passive |
| DLC | Data Length Code | 4-bit. 9~15 해석 방식 변경 (아래 표) |
| CRC | Cyclic Redundancy Check | 17-bit 또는 21-bit (CAN의 15-bit과 다름) |
| DEL | Delimiter | 동일 |
| ACK | Acknowledgement | 동일 |
| EOF | End Of Frame | 동일 |
| ITM | Intermission | 동일 |
- SRR(Substitute Remote Request) — Extended FD 프레임의 RTR 위치에서 대체 사용.
- RRS = 예전 RTR 위치에 dominant 고정, FDF = 예전 reserve 비트 위치에 recessive. 두 조합이 CAN FD 프레임을 식별.
DLC ↔ Data Field 매핑
4-bit DLC는 0~15 값을 갖지만 9~15 구간의 해석이 CAN과 다르다.
| DLC | CAN (Byte) | CAN FD (Byte) |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 1 | 1 |
| … | … | … |
| 8 | 8 | 8 |
| 9 | 8 | 12 |
| 10 | 8 | 16 |
| 11 | 8 | 20 |
| 12 | 8 | 24 |
| 13 | 8 | 32 |
| 14 | 8 | 48 |
| 15 | 8 | 64 |
Bit Rate Switch (BRS)
- Recessive BRS 비트의 샘플 포인트부터 송신자가 높은 Baud rate로 전환 → 수신자들도 동일하게 전환.
- CRC Delimiter 비트의 샘플 포인트에서 모두 중재 Baud rate로 복귀.
- 한 프레임 내에서 두 개의 Baud rate가 구성되어 있어야 한다.
- 높은 Baud rate의 상한은 Transceiver 성능이 결정. 기존 HS CAN Transceiver로도 가능하며, 최신 Transceiver로 더 높은 속도 달성.
- 근거: 중재와 ACK를 벗어나면 송신자는 한 명뿐이므로 왕복 지연 제약이 사라진다 (CAN 동기화의 Data Rate vs Bus Length 참조).
Error State Indicator (ESI)
- 기존 CAN에서는 송신자가 자신의 에러 상태를 프레임으로 알릴 수단이 없었다.
- CAN FD에서는 ESI 비트로 현재 송신자의 상태를 모든 노드가 인지.
- Dominant → 송신자 Error Active
- Recessive → 송신자 Error Passive
- Fault Confinement 상태를 수신자에게 직접 가시화.
2단계 Bit Stuffing
CAN FD는 스터핑 규칙을 두 단계로 분리한다.
1단계 — 데이터 필드 말미까지
- CAN과 동일한 5+1 동적 스터핑 규칙 적용 (SOF부터 Data Field 끝까지).
2단계 — CRC 필드 고유 스터핑
- 삽입된 스터프 비트 개수를 Gray 코드로 인코딩 + 패리티 비트 추가 → CRC 필드 앞에 배치.
- CRC 계산에는 스터프 비트도 포함.
- CRC 시퀀스 자체는 고정 위치에 스터프 삽입:
- 첫 CRC 비트 앞에 1개
- 이후 매 4 CRC 비트마다 1개
- 17-bit CRC → 스터프 비트 6개
- 21-bit CRC → 스터프 비트 7개
- 스터프 비트 값은 바로 앞 비트의 반전.
Stuff Bit Count 인코딩 (Gray + Parity)
| Stuff Bit 수 | Gray 코드 | Parity |
|---|---|---|
| 0 | 000 | 0 |
| 1 | 001 | 1 |
| 2 | 011 | 0 |
| 3 | 010 | 1 |
| 4 | 110 | 0 |
| 5 | 111 | 1 |
| 6 | 101 | 0 |
| 7 | 100 | 1 |
CRC — 3가지 버전
대용량 페이로드의 전송 품질을 유지하기 위해 CRC 길이가 데이터 필드 크기에 따라 달라진다.
| CRC 버전 | 사용 조건 | 생성 다항식 |
|---|---|---|
| CRC15 | CAN (고전) | 0xC599 |
| CRC17 | CAN FD, Data Field ≤ 16 B | 0x3685B |
| CRC21 | CAN FD, Data Field > 16 B | 0x302899 |
수신자의 3중 병렬 계산
수신자는 프레임 시작 시점에는 어느 CRC 버전이 맞는지 알 수 없으므로:
- 프레임 수신 시작과 동시에 세 CRC 계산을 병렬로 진행.
- FDF 비트(구 EDL)가 CRC15와 나머지 둘을 구분.
- CAN FD 프레임인 경우 DLC 값으로 CRC17 / CRC21 결정.
- 결정된 CRC 계산만 최종화하고 나머지는 폐기.
호환성
- CAN FD 노드는 고전 CAN에 대해 하위 호환 (backward compatible).
- 고전 CAN 노드는 CAN FD에 대해 상위 호환이 아님 (not forward compatible).
- 고전 CAN 노드는 CAN FD 프레임을 Error Frame으로 중단시킴.
- 혼합 운영 방안: ISO 11898-6 “Selective Wake-up Transceivers” — 같은 버스에서 고전 CAN과 CAN FD를 공존 가능하게 하는 방식 중 하나.