CAN Error Detection이 개별 오류를 검출·통지하는 절차라면, fault confinement는 오류가 특정 노드에 반복해서 몰릴 때 그 노드가 버스 전체를 방해할 가능성을 줄이는 절차다. 각 노드는 8비트 레지스터 두 개 — 송신 중 오류를 세는 TEC(Transmit Error Count)와 수신 중 오류를 세는 REC(Receive Error Count) — 를 유지하며, 이 값에 따라 세 가지 상태를 오간다[1].

TEC·REC 증감 규칙

오류가 나면 해당 카운터가 늘고, 프레임을 무사히 주고받으면 줄어든다[1]:

계수기오류 시성공 시
TEC송신 중 오류를 검출해 Error Flag를 보내면 +8프레임 송신에 성공하면 -1
REC수신 중 오류를 검출하면 +1프레임 수신에 성공하면 -1

REC에는 예외가 하나 있다 — 노드가 자신의 Error Flag를 보낸 직후에도 버스에서 dominant 비트가 이어지면(다른 노드도 같은 오류를 검출해 뒤이어 자신의 Error Flag를 보냈다는 뜻), 그 노드의 REC는 1이 아니라 8만큼 오른다. 이 차이는 오류를 처음 검출해 알린 노드에 더 무거운 책임을 지우는 장치다[1].

Error Active·Error Passive·Bus-Off

Error Active Error Passive Bus-Off TEC>127 또는 REC>127 TEC>255 TEC<128 그리고 REC<128 소프트웨어 리셋 후 recessive 128×11비트 관측

Error Active는 정상 상태로, 오류를 검출하면 6개의 dominant 비트로 된 active error flag를 보낸다. TEC나 REC가 127을 넘으면 Error Passive로 전환된다 — 이 상태의 노드는 여전히 버스에서 송수신하지만, 오류를 검출해도 6개의 recessive 비트로 된 passive error flag만 보낼 수 있어 다른 노드의 전송을 실제로 방해하지 못한다. Error Passive 노드는 새 프레임을 보낼 때도 불이익을 진다 — Intermission이 끝난 직후가 아니라 8비트의 Suspend Transmission 구간을 더 기다려야 하므로, 같은 순간 버스 접근을 원하는 Error Active 노드가 있다면 그쪽이 먼저 SOF를 싣는다. TEC와 REC가 모두 다시 128 미만으로 내려오면 Error Active로 복귀한다[1].

TEC가 255를 넘으면 Bus-Off 상태로 전환되어 버스 접근 권한을 완전히 잃는다 — 송수신 모두 불가능하다. 이 상태에서 벗어나려면 소프트웨어 리셋 후, 버스에서 11개의 연속된 recessive 비트가 128회 관측되기를 기다려야 Error Active로 복귀한다[1].

참고문헌

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