Preventing Bit Errors

| 분류 | 방법 | 설명 |
| 물리 계층 개선 | Fiber Optics(광섬유) | 광 신호를 이용해 전송하여 EMI 영향 최소화, 매우 높은 대역폭 제공 |
| Shielding (실드 적용) | 케이블 또는 시스템을 차폐하여 외부 노이즈 유입 및 방사 감소 | |
| 배선 / 신호 구조 개선 | Twisted Pair (꼬임선) | 두 선을 꼬아 전자기 간섭으 상쇄 |
| Differential Signals (차동 신호) | 두 선의 전압 차이를 사용하여 노이즈에 강하고 공통 모드 노이즈 제거 | |
| Ground Connection (접지 연결) | 안정적인 접지로 전위 차이 최소화 및 노이즈 경로 제어 | |
| 신호 품질 조정 | Less Steep Edges (완만한 에지) | 신호 상승 / 하강 시간을 완만하게 하여 고주파 노이즈(EMI) 감소 |
| Synchronization (동기화) | 수신기와 송신기의 타이밍 정렬로 비트 샘플링 오류 감소 | |
| 네트워크 설계 | Lower Baud Rate(낮은 전송 속도) | 전송 속도를 낮춰 노이즈 영향과 비트 오류 확률 감소 |
| Shorter Bus Length(짧은 버스 길이) | 버스 길이를 줄여 신호 감쇠 및 지연, 반사 최소화 | |
| Reduction of Reflections(반사 감소) | 종단 저항(termination) 사용으로 반사파를 흡수하여 신호 품질 개선 |
Handling of remaining Bit Errors

프로토콜 규칙이 무시되거나, 수신된 비트 값이 전송된 비트 값과 일치하지 않는 경우 오류가 발생한다.
발신자 관점
송신 노드는 자신이 전송한 비트 값을 알고 있기 때문에, 버스에서 다시 읽은 비트 값과 비교할 수 있다.
이처럼 송신한 비트(Tx)와 버스에서 읽은 비트(Rx)를 비교하는 과정을 Bit Monitoring이라고 한다.
Transmission Error: Bit Rx ≠ Bit Tx
다만 CAN의 중재(Arbitration) 단계에서는 Bit Monitoring으로 Tx와 Rx의 차이가 감지되더라도, 모든 경우가 오류로 처리되지는 않는다.
CAN 버스에서는 dominant bit(0)가 recessive bit(1)보다 우선한다.
따라서 어떤 노드가 recessive bit(1)를 전송했지만 dominant bit(0)를 다시 읽은 경우, 이는 다른 노드가 더 높은 우선순위의 메시지를 전송하고 있다는 의미이다.
이 경우 해당 노드는 오류를 발생시키지 않고 전송을 중단한 뒤 수신 모드로 전환한다.
반대로 dominant bit(0)를 전송했는데 recessive bit(1)를 읽은 경우에는 정상적인 중재 결과가 아니므로 Bit Error로 판단하고 Error Frame을 전송한다.
수신자 관점
수신 노드는 송신 노드가 의도한 원래 비트 값을 알 수 없기 때문에, 송신자처럼 Bit Monitoring을 수행할 수 없다.
대신 CAN 프레임에는 데이터의 무결성을 확인하기 위한 CRC 정보가 포함되어 있다.
수신 노드는 수신한 프레임 내용을 기반으로 CRC를 다시 계산하고, 프레임에 포함되어 전달된 CRC 값과 비교한다.
Receive Error: Calculated CRC ≠ Received CRC
Error Detection Mechanisms

송신 또는 수신 노드는 오류 감지 메커니즘 중 하나에서 오류를 감지하여 메시지가 중단되고, 파괴되며, 소위 오류 프레임에 의해 손상된 것으로 표시된다.
오류 플래그는 6개의 지배적인 비트로 구성되며, 전송을 방해하는 위치에 상관없이 규칙중 하나를 위반한다.
대부분 규칙이나 프레임 끝에 있는 형식이다. 이러한 방식으로 모든 노드는 프레임이 유효하지 않다는 것을 알게된다.
| Bit Monitoring | 송신 노드가 전송한 비트(Tx)와 버스에서 읽은 비트(Rx)를 비교하는 과정 |
| ACK Check | 송신 노드는 ACK 슬롯에서 dominant bit(0)를 기대한다. 수신 노드가 정상적으로 프레임을 수신하면 ACK 슬롯에서 dominant bit를 전송한다. |
| Stuff Check | 동일한 값의 비트 5개가 연속되면, 반대 값을 가진 비트를 삽입해야 한다. |
| Form Check | CRC delimiter, ACK delimiter, EOF와 같은 특정 필드는 반드시 recessive bit(1)이어야 한다. |
| CRC Check | 수신 노드는 수신한 데이터로 CRC를 다시 계산하고, 프레임에 포함된 CRC 값과 비교한다. 두 값이 일치하지 않으면 CRC Error가 발생하며 Error Frame을 전송한다. |
| ACK Bit Monitoring | 송신 노드는 ACK 슬롯에서 dominant bit(0)를 수신하지 못하면 ACK Error를 발생시키고 Error Frame을 전송한다. |
No Receiver, no ACK

이 예제에서 노드 A는 버스에서 작동하는 유일한 노드이다.
이러한 네트워크 구성에서는 전송되는 모든 메시지에 대해 ACK를 수행할 노드가 없기 때문에, 송신 노드는 ACK 슬롯에서 dominant bit(0)를 수신하지 못한다.
송신 노드 A는 ACK 슬롯에서 Recessive bit(1)를 전송하며, 정상적인 경우라면 수신 노드가 이를 dominant bit로 덮어써야 한다.
그러나 수신 노드가 없기 때문에 Recessive Bit(1) 상태가 그대로 유지되고, 이에 따라 송신 노드는 ACK Error를 감지한다.
이후 ACK delimiter 이후에 Error Flag가 전송되며 Error Flag와 Error Delimiter가 결합되어 Error Frame을 형성한다.
노드 A는 Bit Monitoring을 통해 Dominant(0) Error Flag에서 Recessive(1) Error Flag의 전환을 확인할 수 있다.
이 상황은 실제 데이터 전송 자체의 오류가 아니라, 메시지를 수신한 노드가 없음을 의미하지만, CAN 프로토콜에서는 이를 ACK Error로 처리한다.
Negative ACK from all Receivers

이 예제에서는 수신 노드 B, C, D가 CRC Check를 통해 먼저 오류를 감지한다.
수신 노드들은 CRC 불일치를 감지하는 즉시 Error Flag(6개의 dominant bit)를 전송한다.
이로 인해 버스는 예상과 다르게 dominant 상태로 강제된다.
송신 노드 A는 CRC 자체는 정상으로 판단하고 있었지만,
버스에서 예상과 다른 dominant bit를 읽으면서 Bit Monitoring을 통해 오류를 감지한다.
또한 수신 노드들이 CRC 오류로 인해 ACK를 수행하지 않기 때문에,
송신 노드 A는 ACK 슬롯에서 dominant bit를 수신하지 못하고 ACK Error도 동시에 감지한다.
수신 노드들은 CRC 오류 직후 즉시 Error Flag를 전송하는 반면,
송신 노드는 Bit Monitoring과 ACK Error를 인지한 후 반응하기 때문에 약 1비트 늦게 Error Flag를 전송한다.
이로 인해 Error Flag가 서로 겹치며 버스에서는 더 긴 dominant 구간이 형성된다.
이러한 Error Flag의 발생 순서와 타이밍 차이는
CAN의 Error Confinement 메커니즘에서 각 노드의 에러 카운터 증가에 영향을 주기 때문에 중요하다.
Local Receive Error

송신 노드 A는 ACK Slot에서 recessive(1) 비트를 송신하고, 적어도 하나 이상의 수신 노드가 이 비트를 dominant(0)로 덮어써 주기를 기대한다.
수신 노드 C와 D는 CRC 검증 결과가 정상적이므로 ACK Slot에서 dominant(0)를 출력한다. 반면 노드 B는 CRC 오류를 검출했기 때문에 ACK를 수행하지 않고 recessive 상태를 유지한다.
하지만 CAN 버스에서는 dominant 비트가 recessive 비트보다 우선하므로, 노드 B가 유지한 recessive 상태는 C와 D가 출력한 dominant ACK에 의해 덮어써진다. 그 결과 송신 노드 A는 ACK Slot에서 dominant 비트를 읽고, 적어도 하나의 노드가 메시지를 정상 수신했다고 판단한다.
그러나 노드 B는 CRC 오류를 이미 검출한 상태이므로 해당 프레임을 정상 프레임으로 받아들일 수 없다. 따라서 ACK Delimiter가 끝난 직후, 원래라면 End of Frame의 recessive 비트들이 시작되어야 할 위치에서 Error Flag를 전송하여 버스 전체에 오류를 알린다. 이 Error Flag로 인해 다른 노드들도 오류를 감지하고, 결과적으로 해당 메시지 프레임은 무효화되며 송신 노드 A는 이후 프레임을 재전송하게 된다.
Example

12번째에서 send sequence of bits는 1을 보내지만 sequence of bits on the bus 상에서는 0으로 출력된다.
그러므로 Bit Monitoring Error가 발생한다. 그 후 0이 6개로 이루어진 Error Flag를 보내고 1이 8개인 Error Delimiter를 보낸다. bus상에서는 0이 6개 이상 출력되고 bit stuff error가 발생한다. 그 후 intermission 3비트가 나타나게 된다.
Fault Confinement

CAN 컨트롤러는 오류 제한을 위해 두 개의 오류 카운터를 유지한다. 하나는 송신 오류를 기록하는 TEC(Transmit Error Counter)이고, 다른 하나는 수신 오류를 기록하는 REC(Receive Error Counter)이다.
오류가 발생하면 해당 카운터가 증가하고, 정상적으로 프레임을 송신하거나 수신하면 카운터가 감소한다. 이 카운터 값에 따라 노드는 Active Error Flag(0-6개)를 전송하여 버스의 다른 노드들에게 오류를 알린다.
반면 TEC 또는 REC 중 하나가 127을 초과하면 노드는 Error Passive 상태가 된다. 이 상태에서는 Active Error Flag 대신 Recessive(1) 비트로 이루어진 Passive Error Flag를 전송한다. Recessive 비트는 dominant비트를 이기지 못하므로, Error Passive 노드는 버스를 발해하지 못한다. 이는 오류가 많은 노드가 전체 CAN 통신을 계속 망가뜨리는 것을 막기 위한 장치이다.
송신 오류가 계속되어 TEC가 255를 초과하면 노드는 Bus Off 상태가 된다. Bus Off 상태의 노드는 CAN 버스에서 사실상 분리되어 더 이상 송수신에 참여하지 않는다. 이후 다시 통신에 참여하려면 소프트웨어 리셋 또는 정해진 복귀 조건을 만족해야 한다.
다음 규칙을 적용한다.
TEC
송신기가 오류 플래그를 보낸 경우. TEC = TEC + 8
TEC > 127 이면 Error Passive 상태가 된다. (Recessive 형태로 변환)
성공적인 전송 TEC = TEC - 1
REC
수신기가 오류 플래그 보내는 경우: REC = REC + 1
수신기가 오류를 일으키는 경우: REC = REC + 8
프레임이 성공적으로 수신한 경우: REC = REC - 1
SOF delay for Error Passive Nodes

Error Passive 노드는 오류를 감지했을 때 dominant(0) 비트로 구성된 Active Error Flag를 보내지 못하고, Recessive(1) 비트로 구성된 Passive Error Flag만 전송할 수 있다.이는 오류가 많은 노드가 버스를 계속 방해하지 못하도록 하기 위한 제한이다.
또한 Error Passive 노드는 송신을 다시 시작할 때도 Error Active 노드보다 불리하다. 일반적인 Error Active 노드는 EOF 7비트와 Intermission 3비트가 지난 뒤 버스가 idle 상태이면 바로 SOF를 전송할 수 있다. 반면 Error Passive 노드는 Intermission 이후 추가 8비트의 Suspend Transmission 구간을 더 기다려야 한다.
이 8비트 동안 다른 노드가 SOF를 전송하면 Error Passive 노드는 송신을 시작하지 못하고 수신 노드로 동작해야 한다. 따라서 Error Passive 노드는 Intermission 이후에도 버스가 계속 idle 상태로 유지될 때에만 다음 프레임을 송신할 수 있다.
Bus Off 상태의 노드는 이보다 더 심각한 상태로, CAN 버스에 접근할 수 없으며 송수신에 참여하지 못한다.
'공부 내용 > 직무 공부' 카테고리의 다른 글
| CAN 통신 - frame (0) | 2026.04.27 |
|---|---|
| CAN 통신 - 전송 과정 및 중재 설명 (0) | 2026.04.27 |
| CAN 통신 구조 정리 - Broadcast 방식과 Acceptance Filter 이해 (0) | 2026.04.27 |
| CAN 통신 기초 정리 (OSI 계층, 전압 신호, 메시지 구조) (0) | 2025.11.02 |
| 자동차 애플리케이션 도메인, Serial 버스 시스템 (0) | 2025.11.01 |