비트 스터핑은 CAN 송신 노드가 같은 값의 비트 5개를 보내고 나면, 실제로 송신하는 비트열에 반대 값의 비트를 하나 자동으로 끼워 넣는 부호화 규칙이다.[1] 끼워 넣는 비트를 스터프 비트라 하고, 수신 노드는 같은 값 5비트 뒤에 오는 스터프 비트를 버린다.[2]

적용 구간

데이터 프레임과 리모트 프레임에서는 SOF(Start of Frame), 중재 필드, 제어 필드, 데이터 필드, CRC 시퀀스가 스터핑 대상이다. CRC 구분자, ACK 필드, EOF(End of Frame)는 모양이 고정된 필드라 스터핑하지 않는다. 오류 프레임과 오버로드 프레임도 모양이 고정되어 있어 스터핑하지 않는다.[1]

스터프 비트가 들어가는지는 데이터 바이트 패턴에 달려 있어, 예를 들어 0xCC 같은 패턴은 스터프 비트를 일으키지 않는다.[2] 스터프 비트가 가장 많이 들어갈 때의 프레임 전송 시간은 CAN 응답 시간 분석에서 다룬다.

스터프 오류

스터핑 구간에서 같은 값의 비트가 6번째로 이어지면, 그 비트 시점에 스터프 오류가 검출된다.[1] 자세한 것은 CAN 오류 검출에서 다룬다.

error active 노드가 오류를 찾으면 내는 active 오류 플래그는 dominant 6비트다. 이 플래그는 SOF부터 CRC 구분자까지에서는 스터핑 규칙을 어기고, ACK 필드나 EOF에서는 고정된 모양을 깨뜨린다. 그래서 다른 노드도 모두 오류를 찾고 각자 오류 플래그를 낸다.[1]

목적

CAN 비트열은 NRZ(Non-Return-to-Zero)로 부호화되어, 한 비트 시간 내내 레벨이 dominant나 recessive 하나로 유지된다.[1] NRZ는 데이터에 클록을 싣지 않으므로, 에지가 적어도 6비트 시간마다 생기게 하려고 비트 스터핑을 쓴다.[3] ISO 11898-1:2024는 비트 스터핑을, NRZ 비트 표현에서 주기적 재동기화에 필요한 버스 상태 변화를 만들어 주는 프레임 부호화 방식으로 정의한다.[4]

CAN FD 프레임과의 차이

이 표준은 비트 스터핑을 동적 비트 스터핑과 고정 비트 스터핑 두 가지로 나눈다. 송신 노드가 스터프 비트를 넣고, 수신 노드가 거꾸로 걷어낸다.[4]

CAN FD 포맷 프레임의 CRC 시퀀스에서는 스터프 비트를 고정 위치에 넣는다. 첫 비트 앞에 하나, 그 뒤로 4비트마다 하나를 넣고, 값은 바로 앞 비트의 반대다. Bosch CAN FD 1.0은 고정 스터프 비트의 수를 classical 포맷의 스터핑 방식을 적용했을 때 생길 수 있는 스터프 비트의 최대 수와 같게 두고, 수신 노드가 CRC를 검사할 때 고정 스터프 비트를 빼고 계산하게 정한다.[2]

ISO 11898-1:2024는 stuff bit count를 CRC 필드 앞까지 프레임에 들어간 스터프 비트의 수(고정 스터프 비트 제외)로 정의한다.[4] MCP25xxFD 계열 CAN FD 컨트롤러는 ISO CRC 모드에서 CRC 필드에 4비트 stuff bit count를 넣어 보내고, ISO 이전 방식(non-ISO) 모드에서는 넣지 않는다.[5]

[1]
“CAN Specification Version 2.0,” Robert Bosch GmbH, 1991. Accessed: Sep. 25, 2026. [Online]. Available: https://web.archive.org/web/20171215103144/http://www.bosch-semiconductors.de:80/media/ubk_semiconductors/pdf_1/canliteratur/can2spec.pdf
[2]
“CAN with Flexible Data-Rate Specification Version 1.0,” Robert Bosch GmbH, 2012. Accessed: Sep. 25, 2026. [Online]. Available: https://web.archive.org/web/20151211125301/http://www.bosch-semiconductors.de/media/ubk_semiconductors/pdf_1/canliteratur/can_fd_spec.pdf
[3]
“MCP2515 Stand-Alone CAN Controller with SPI Interface,” Microchip Technology Inc., 2019. Accessed: Sep. 25, 2026. [Online]. Available: https://ww1.microchip.com/downloads/en/DeviceDoc/MCP2515-Stand-Alone-CAN-Controller-with-SPI-20001801J.pdf
[4]
ISO, “ISO 11898-1:2024 Road vehicles — Controller area network (CAN) — Part 1: Data link layer and physical coding sublayer (OBP preview).” 2024. Accessed: Sep. 25, 2026. [Online]. Available: https://www.iso.org/obp/ui/#iso:std:iso:11898:-1:ed-3:v1:en
[5]
“MCP25XXFD CAN FD Controller Module Family Reference Manual,” Microchip Technology Inc., 2020. Accessed: Sep. 25, 2026. [Online]. Available: https://ww1.microchip.com/downloads/aemDocuments/documents/OTH/ProductDocuments/ReferenceManuals/MCP25XXFD-CAN-FD-Controller-Module-Family-Reference-Manual-DS20005678E.pdf