CAN Frame의 SOF부터 CRC Field의 15비트 값(CRC Sequence)까지는 bit stuffing이라는 규칙으로 인코딩된다. 송신 노드는 같은 값의 비트가 5개 연속되면 그 뒤에 반대 값의 비트(stuff bit) 하나를 강제로 끼워 넣고, 수신 노드는 같은 값 5개 연속 뒤에 오는 비트를 stuff bit로 인식해 그대로 제거한다(destuffing). 이 규칙을 어기고 같은 값이 6개 연속되면 stuff error로 처리된다 — 이 판정이 CAN Error Detection이 규정하는 다섯 검출 메커니즘 중 하나다[1].

이 구간 뒤에 이어지는 CRC Delimiter·ACK Field·EOF·Intermission은 고정 형식(fixed-form) 필드라 비트 스터핑이 적용되지 않는다[1].

데이터 비트열 0 0 0 0 0 1 0 1 1 (원본, 5개 연속) 전송 비트열 0 0 0 0 0 1 1 0 1 1 stuff bit

목적

데이터가 우연히 같은 값을 길게 반복하더라도, 스터핑은 일정한 수의 연속 비트마다 값이 바뀌도록 강제한다. 이 성질 덕분에 수신 노드는 신호의 전환(edge)을 이용해 송신 노드와 비트 타이밍을 재동기화할 수 있다[1].

스터핑 규칙은 오류 통지에도 쓰인다 — 노드가 오류를 검출하면 의도적으로 이 규칙을 어겨 스터핑 패턴을 깨뜨리는 방식으로 다른 노드에 오류를 알린다[1]. 이때 실리는 신호(Error Flag)와 그 뒤의 처리는 CAN Error Detection에서 다룬다.

참고문헌

[1]
Robert Bosch GmbH, “CAN Specification, Version 2.0”, 1991.