정의

비트 스터핑(bit stuffing)은 같은 논리 값의 비트가 5개 연속되면 송신기가 반대 값 비트 하나를 비트 열에 끼워 넣는 코딩 규칙이다. 끼워 넣은 스터프 비트는 수신 노드가 다시 걷어낸다.[1]

CAN CC는 NRZ(non-return-to-zero) 코딩을 쓴다.[1] 한 비트 시간 내내 레벨이 dominant나 recessive 한쪽에 머무르므로, 같은 값이 이어지는 동안에는 버스 위에 아무 변화도 나타나지 않는다. 클럭 선이 따로 없는 버스에서 이것은 곧 수신 노드가 타이밍을 다시 맞출 단서를 잃는다는 뜻이고, 동시에 오류를 알리는 고정 패턴과 데이터가 구별되지 않는다는 뜻이다. 비트 스터핑은 비트 열에 변화를 강제로 심어 이 두 문제를 한꺼번에 막는다.

삽입과 제거 규칙

규칙은 단순하다. 송신기는 같은 값 비트가 5개 이어지면 그 다음에 반대 값 비트를 하나 넣는다. 수신기는 같은 자리에서 그 비트를 걷어내고 응용에 올린다.[2] 삽입과 제거는 모두 데이터 링크 계층의 일이라 CAN 컨트롤러 안에서 끝나며(CAN 프로토콜 계층 구조), 응용은 스터프 비트를 보지 못한다.

5개가 이어지기만 하면 넣는다는 점이 중요하다. 원래 비트 열의 여섯 번째 비트가 마침 반대 값이었더라도 스터프 비트는 그대로 들어간다.[3] 조건을 따지지 않고 적용되는 규칙이라 수신기도 같은 셈으로 스터프 비트의 자리를 짚어 낼 수 있다.

스터프 비트의 연쇄

삽입된 스터프 비트는 그 자체로 다음 연속 계수의 첫 비트가 된다. 그래서 스터프 비트 뒤에 같은 값이 네 개만 이어져도 다시 다섯이 차고 두 번째 스터프 비트가 붙는다.[4] 최악의 경우 네 비트마다 한 비트씩 늘어나는 것은 이 연쇄 때문이다.

적용 구간

스터핑은 프레임 전체에 걸리지 않는다. SOF 전송으로 시작해 CRC 시퀀스의 마지막 비트에서 끝난다.[5] 그 뒤의 CRC 구분자, ACK 필드, EOF는 값이 미리 정해진 고정 형식 필드라 스터핑하지 않으며, 에러 프레임과 오버로드 프레임도 마찬가지로 고정 형식이라 스터핑 대상이 아니다. 어느 필드가 어디에 오는지는 CAN 프레임에 정리돼 있다.

구간이 갈리는 만큼 같은 사건도 자리에 따라 다른 뜻을 갖는다. 스터핑 구간에서 같은 값 6개는 스터핑 규칙 위반이고, 고정 형식 구간에서 정해진 값과 다른 비트가 나오면 형식 위반이다.

스터핑이 푸는 세 문제

동기화 에지 확보. 수신 노드는 recessive에서 dominant로 넘어가는 에지를 보고 자신의 비트 시간을 다시 맞춘다. 스터핑은 그런 에지가 일정 간격 안에 반드시 나타나도록 보장한다.[3] 절차는 CAN 동기화에서 다룬다.

고정 패턴과의 혼동 방지. 스터핑은 데이터 비트 열이 에러 프레임이나 프레임 끝을 알리는 고정 형식 비트열로 오인되는 것을 막는다.[2]

오류 신호의 성립. 같은 값 6개가 이어지는 패턴은 오류를 알리는 데 쓰이므로, 프레임의 가변 구간에서는 그 패턴이 나타나서는 안 된다.[4] 뒤집으면, 스터핑 구간에서 6개가 관측되면 그것은 곧 누군가 오류를 알렸다는 신호가 된다. CAN 오류 검출의 스터프 검사와 에러 프레임의 전파가 모두 이 성질 위에 서 있다.

가변 프레임 길이

스터프 비트가 몇 개 붙는지는 실을 데이터의 비트 패턴에 달려 있다. 같은 필드 구성이라도 프레임의 실제 길이가 그때그때 달라진다는 뜻이다. 데이터 8바이트를 실은 표준 포맷 데이터 프레임에서 스터프 비트는 이론상 최대 24개까지 붙고, 그때 프레임은 132비트가 된다.[4]

이 가변성은 실시간 설계에 그대로 부담으로 남는다. 메시지의 최악 전송 시간을 계산하려면 최대 스터프 비트 수를 포함한 상한을 써야 하고, 그 상한은 스터핑 대상 비트 수에서 유도된다. 데이터가 길어질수록 상한과 실제 길이의 차도 벌어진다.

CAN FD는 프레임이 길어지면서 이 문제를 다르게 다룬다. 스터프 비트 카운터와 CRC 필드의 고정 위치 스터핑은 CAN FD 프레임에서 다룬다.

[1]
CAN in Automation, “Controller Area Network classic (CAN CC).” 2026. Accessed: Aug. 25, 2026. [Online]. Available: https://www.can-cia.org/can-knowledge/can-cc
[2]
S. Corrigan, “Introduction to the Controller Area Network (CAN),” Texas Instruments, Application report SLOA101B, 2016. [Online]. Available: https://www.ti.com/lit/an/sloa101b/sloa101b.pdf
[3]
Vector Informatik GmbH, “Introduction to CAN: Bit Stuffing.” 2021. Accessed: Aug. 25, 2026. [Online]. Available: https://certification.vector.com/mod/page/view.php?id=349
[4]
R. I. Davis, A. Burns, R. J. Bril, and J. J. Lukkien, “Controller Area Network (CAN) schedulability analysis: Refuted, revisited and revised,” Real-Time Systems, vol. 35, no. 3, pp. 239–272, 2007, doi: 10.1007/s11241-007-9012-7.
[5]
Robert Bosch GmbH, “CAN Specification Version 2.0,” Robert Bosch GmbH, Stuttgart, Germany, Protocol specification, 1991. Accessed: Aug. 25, 2026. [Online]. Available: https://www.tekeye.uk/downloads/can2spec.pdf