CAN 에러 처리(Data Protection)CAN 프로토콜이 비트 오류를 감지·신호·대응하고, 결함이 있는 노드를 점진적으로 버스에서 격리하는 메커니즘. 3단계 전략으로 구성된다.

3단계 전략

단계방법수단
1Prevent Bit Errors물리 수단 (데이터 프레임 보호 L1)
2Handle Bit Errors프로토콜 논리 수단
3Fault ConfinementTEC / REC 카운터
  1. 전자기 방해가 많은 차량 환경에서 물리/논리 대책으로 민감도 감소. 그래도 일부 에러는 남음.
  2. 남은 에러는 모든 수신자가 놓칠 수 없는 방식으로 표시 → 버스 전체 데이터 일관성 보장. 감지된 에러는 메시지 재전송으로 교정.
  3. 특정 노드가 비정상적으로 많은 에러를 발생시키면 누적 페널티 포인트로 제재 → 단계적 격리.

에러 정의

  • 정의: 프로토콜 규칙 위반 또는 송신 비트 ≠ 수신 비트.
  • Transmission Error: (중재 단계와 ACK 비트 예외).
  • Receive Error: (수신자는 bit monitoring 불가 → CRC로 감지).

송신자는 Tx-Rx 비교로 직접 감지 가능. 수신자는 의도된 값을 모르므로 CRC의 중복성으로 간접 감지.

6가지 에러 감지 메커니즘

#메커니즘조건
1Bit Monitoring (중재·ACK 비트 예외)
2ACK Check송신자가 ACK 슬롯에서 dominant 확인 (ACK=0)
3Stuff Check동일 값 5비트 후 반전 비트 확인 (비트 스터핑)
4CRC Check 확인 — 실패 시 Negative ACK (Error Flag 아님)
5Form Check고정 recessive 비트(DEL, EOF, ITM)가 모두 1인지 확인
6ACK Bit Monitoring한 수신자만 recessive ACK(=1)를 보내고 다른 수신자들이 dominant(=0)일 때, 전자는 ACK DEL 끝까지 대기 후 Error Frame

Bit Monitoring의 예외

중재 구간(Arbitration Phase):

  • 1을 보냈는데 0이 읽히면 → 에러 아님. 해당 노드는 전송 중단·수신 모드 전환(중재 패배).
  • 0을 보냈는데 1이 읽히면 → Transmission Error.

Error Frame

에러 감지 시 송신자/수신자가 메시지를 중단·파괴·오염 표시하기 위해 송출하는 프레임.

구조

부분크기
Error Flag6 bitdominant (0)
Error Delimiter8 bitrecessive (1)
  • Error Flag 6개 dominant 비트는 어느 위치에 끼어들든 stuff 규칙이나 EOF 포맷 규칙 중 하나를 위반. 모든 노드가 이를 감지 → 로컬 에러가 글로벌화되고 데이터 일관성 확보.
  • 모든 노드가 에러 없이 수신하거나, 어느 노드도 수신하지 못하거나 둘 중 하나.

Primary vs Secondary Error Flag

여러 노드가 에러를 감지할 때 동일한 Error Flag를 중첩해서 송신:

  • Primary Error Flag: 최초로 에러를 감지한 노드가 즉시 송출.
  • Secondary Error Flag: Primary의 stuff 규칙 위반을 보고 다른 노드들이 이어서 송출 → Primary보다 1~6 비트 지연.

CRC Check만은 예외 — Error Flag 대신 Negative Acknowledgement(recessive ACK)로 신호.

에러 시나리오 3가지

시나리오 A: 수신자 없음 (No Receiver, No ACK)

  • 노드 A만 버스에 있음. B, C, D 모두 비활성.
  • A가 프레임 송신 → 어떤 수신자도 positive ACK 불가 → ACK=recessive 유지.
  • A가 ACK Check 실패 감지 → ACK 다음 비트에서 Error Flag 송출 → Error Delimiter 이어짐.
  • A는 dominant Error Flag → recessive Error Delimiter 전환을 Bit Monitoring으로 관찰 → 수신 에러가 아니라 수신자 부재라고 판단 → Fault Confinement 제재 완화.

시나리오 B: 모든 수신자가 Negative ACK (Negative ACK from all Receivers)

  • B, C, D 모두 CRC 실패.
  • ACK 슬롯에서 B/C/D가 모두 recessive ACK → A의 ACK Check 실패.
  • A가 ACK 다음 비트부터 Primary Error Flag (6 dominant) + Error Delimiter (8 recessive) 송출.
  • A의 Primary Error Flag가 ACK DEL(고정 recessive) 규칙을 위반 → B/C/D가 Form Check 실패 감지 → Secondary Error Flag 송출 (A보다 1 비트 늦음).
  • A는 dominant→recessive 전환 시점이 지연된 것으로 이를 인지.
  • B/C/D는 자신의 첫 Error Delimiter 비트가 버스에서도 recessive인 것으로 자신이 Primary를 보내지 않았다는 사실 확인.

시나리오 C: 로컬 수신 에러 (Local Receive Error)

  • A 송신, C·D CRC 통과 / B CRC 실패.
  • C, D는 dominant ACK(=0) 송출.
  • B는 recessive ACK(=1) 송출 → 그러나 wired-AND로 dominant가 우선 → 버스에서는 dominant ACK 관찰.
  • A는 ACK가 dominant이므로 ACK Check 통과 → 자신은 정상으로 간주.
  • B만 ACK DEL 비트 다음에 Error Flag 송출 → 프레임 파괴, 재전송 트리거.

Fault Confinement

결함이 있는 노드를 버스에서 점진적으로 격리하는 메커니즘. 각 CAN Controller는 8-bit 카운터 2개를 운용.

카운터원어용도
TECTransmission Error Counter송신 에러 카운팅
RECReceive Error Counter수신 에러 카운팅

상태 전이

상태조건
Error Active and
Error Passive or
Bus Off

복귀 조건:

  • Error Passive → Error Active: and
  • Bus Off → Error Active: Software Reset + 128 × 11 recessive 비트 관찰

카운터 증감 규칙

TEC:

  • 송신자가 Error Flag 송출 →
  • 상태에서 Error Flag를 보냈으나 수신자가 없어 Error Flag가 recessive로 남으면 → 추가 증가 없음 (수신자 부재 상황 보호).
  • 성공적인 전송 →

REC:

  • Error Flag 송출 →
  • 수신자가 원인 제공(Primary Error Flag 송출) →
  • 성공적인 수신 →

Error Passive 노드의 SOF 지연

Error Passive 상태의 불이익:

  • recessive Error Flag만 송출 가능 (버스 파괴력 약화).
  • 버스 접근 지연: ITM 끝이 아니라 추가 8비트 지연 후 SOF 가능.

즉, Error Passive 노드는 Error Active 노드가 전송할 의사가 없는 경우에만 버스 접근 가능. Bus Off 노드는 버스 접근권 완전 박탈.

구간Error ActiveError PassiveBus Off
ITM 직후 (idle 시작)SOF 가능대기접근 불가
8 bit 추가 지연 후SOF 가능접근 불가

ESI 비트 (CAN FD)

고전 CAN에서는 송신자가 자신의 에러 상태를 프레임 내에서 알릴 수단이 없었다. CAN FDESI (Error State Indicator) 비트를 추가하여 모든 노드가 현재 송신자의 Fault Confinement 상태를 인지할 수 있게 한다.

ESI 값송신자 상태
Dominant (0)Error Active
Recessive (1)Error Passive

같이 보기