비트 스터핑(Bit Stuffing) — CAN 프레임의 특정 구간에서 동일 값 비트가 5개 연속되면 반전 비트를 강제 삽입하는 규칙. 동기화·에러 감지·프레이밍 규칙 보호의 3가지 목적을 동시에 달성한다.
기본 규칙
| 주체 | 동작 |
|---|---|
| 송신자 | 동일 값 비트 5개 연속 → 다음 비트에 반전 비트(stuff bit) 삽입 |
| 수신자 | 동일 값 비트 5개 연속 → 다음 비트는 stuff 비트로 간주, 폐기 |
| 모두 | 동일 값 6개 연속 → 에러 (Stuff Error) |
- 5개의 동일 값 + 반전 1개 = 6비트 단위로 스트림 연속. 반전 비트 자체가 후속 5비트의 시작점이 되어 또 다른 stuff bit 삽입 가능.
- 예:
00000 1 00000 1 ...— 매 6번째마다 stuff bit.
적용 구간
CAN 프레임에서 스터핑이 적용되는 구간: SOF 시작부터 CRC 종료까지.
적용되지 않는 구간: CRC Delimiter, ACK, ACK Delimiter, EOF, ITM — 이들은 고정 recessive 포맷 구간이며, 이 구간 위반은 Form Check로 감지된다.
3가지 목적
1. Bus idle 오인 방지
- 11개 연속 recessive 비트 = bus idle (CAN 중재 참조).
- 스터핑 없이 Data Field에서 우연히 11개 recessive가 연속되면 → 다른 노드가 잘못 idle로 해석 → 새 프레임 시작.
- 5개 제한으로 이 사태 원천 차단.
2. 재동기화용 에지 보장
- 긴 동일 값 비트열은 signal edge가 없어 수신자가 타이밍 드리프트를 보정할 수 없음.
- 5개+1(stuff) 규칙 → 최대 10비트 안에 반드시 falling/rising edge 발생 → 수신자가 sender에 재동기할 기회 확보.
3. 로컬 에러의 글로벌화 (고의 규칙 위반)
- 에러 감지 노드가 고의로 stuff 규칙을 위반(6개 연속 dominant) → Error Flag 송출.
- 모든 노드가 이 규칙 위반을 Stuff Check로 감지 → 프레임을 무효로 간주.
- 버스 전체의 데이터 일관성 보장 — 로컬 에러가 모든 노드에서 동일하게 처리됨.
동작 위치
CAN Controller의 송신 경로:
애플리케이션 → Framing(비트 스트림 생성) → Bit Stuffing(반전 비트 삽입) → Transceiver → 버스수신 경로:
버스 → Transceiver → Bit Destuffing(반전 비트 제거) → Framing 검증 → CRC 검증예시
원본 비트 스트림: 1 0000 0 111 11 00
(5개 0000 0 뒤 6번째가 다른 값 1 이므로 여기선 stuff bit 필요 없음)
원본: 1 11111 000 ...
송신: 1 11111 0 000 ... — 6번째 위치에 반전 비트 0 삽입
수신자는 1 11111 를 본 뒤 다음 비트 0을 stuff로 간주하여 제거한 뒤 상위로 1 11111 000 ... 전달.
CAN FD의 2단계 스터핑
CAN FD는 CAN과 달리 데이터 필드까지는 동일한 5+1 동적 스터핑을 유지하되, CRC 구간에 별도 규칙을 추가한다.
1단계 — 데이터 필드 끝까지
- SOF ~ Data Field 끝까지: CAN과 동일 (5 동일 비트 + 1 반전).
2단계 — CRC 필드 고유 스터핑
- 삽입된 스터프 비트 개수를 3-bit Gray 코드 + 1-bit 패리티로 인코딩 → CRC 필드 앞에 삽입.
- CRC 계산에는 스터프 비트도 포함.
- CRC 시퀀스 자체는 고정 위치에 스터프 비트 삽입:
- 첫 CRC 비트 앞에 1개
- 이후 매 4 CRC 비트마다 1개
- 17-bit CRC → 총 6개, 21-bit CRC → 총 7개
- 스터프 비트 값 = 바로 앞 비트의 반전.
Stuff Bit Count 인코딩
| 스터프 비트 수 | 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 |