정의
CAN 중재(arbitration)는 둘 이상의 노드가 같은 시점에 전송을 시작했을 때 식별자를 비트 단위로 겨루어 버스 접근 충돌을 해소하는 절차다. 이 절차에서는 정보도 시간도 잃지 않는다.[1]
공유 매체를 쓰는 프로토콜은 여럿이 동시에 말하는 상황을 어떻게든 처리해야 한다. 충돌을 사후에 감지해 물러났다 다시 시도하는 방식도 있지만, CAN은 충돌을 전송 도중에 정리한다 — 겨루기가 끝나는 순간 이긴 노드는 이미 자기 프레임의 앞부분을 보낸 상태이고, 진 노드는 한 비트도 더 보태지 않고 물러난다. 방식 분류상의 자리는 버스 접근 방식에서 다룬다.
전송 시작 시점
프레임과 프레임 사이에는 recessive 3비트의 인터미션(intermission)이 놓이고, 그 뒤로 다른 노드가 전송을 시작하지 않으면 버스는 유휴(idle) 상태가 된다.[2] 유휴 구간의 길이는 정해져 있지 않으며, 그동안에는 보낼 것이 있는 어느 노드든 버스를 잡을 수 있다. 다른 프레임이 지나가는 동안 대기하게 된 메시지는 인터미션 다음 첫 비트에서 전송을 시작하고, 버스에서 dominant 비트가 관측되면 그것이 곧 프레임 시작으로 해석된다.[1]
전송 시작이 한 시점에 몰리는 이유가 여기 있다. 대기 중이던 노드가 여럿이면 그들은 모두 같은 비트에서 함께 출발하고, 중재는 바로 그 상황을 정리하기 위한 절차다.
비트 단위 겨루기
CAN 버스는 wired-AND처럼 동작해서 dominant 상태가 recessive 상태를 덮는다.[2] 두 상태의 비대칭은 CAN 버스 레벨에서 다룬다.
중재에 참여한 노드는 자기가 내보낸 비트와 버스에서 되읽은 비트를 매 비트마다 비교한다. 두 값이 같으면 계속 보내고, recessive를 보냈는데 dominant가 읽히면 그 노드는 중재에서 진 것이므로 한 비트도 더 보내지 않고 물러난다. 물러난 노드는 그 프레임의 송신자 자격을 잃고 곧바로 수신자가 된다.[1]
우선순위
겨루기의 결과는 식별자 수치가 정한다. 이진값이 작을수록 우선순위가 높고, 전부 0인 식별자가 네트워크에서 가장 높은 우선순위를 갖는다 — dominant를 가장 오래 유지하기 때문이다. 이 겨루기는 비파괴적(non-destructive)이어서, 이긴 노드는 메시지가 손상되거나 끊기는 일 없이 그대로 전송을 이어 간다.[3] 어떤 내용에 어떤 우선순위를 줄지는 시스템 설계자가 정한다.
진 노드도 전송 요청을 버리지 않는다. 현재 전송이 끝나고 버스가 다시 비면 같은 메시지로 다시 겨룬다.[4]
시간 거동
중재의 결과로 CAN 메시지는 식별자를 우선순위로 삼는 고정 우선순위 비선점 스케줄링을 따르게 되며, 이 접근 방식은 CSMA/CR(carrier sense multiple access with collision resolution)로 분류된다.[5] 같은 동작을 CSMA/CD with AMP로 적는 출처도 있다. 한 메시지가 버스에 나가기까지 걸리는 시간은 두 몫으로 나뉜다. 하나는 이미 시작된 다른 전송이 끝나기를 기다리는 시간이고, 다른 하나는 그 사이에 겨루기를 이기는 더 높은 우선순위 메시지들에 밀리는 시간이다.
뒤쪽 몫은 우선순위가 낮을수록, 그리고 상위 우선순위 트래픽이 많을수록 커진다. 반대로 우선순위가 높은 메시지는 부하가 몰리는 상황에서도 낮은 지연을 유지할 수 있고, 우선순위에 따라 접근이 정해지는 덕분에 실시간 시스템에서 개별 지연을 낮게 보장할 수 있다.[2]
우선순위가 작동하는 범위
우선순위는 같은 시점에 겨루기를 시작한 메시지들 사이에서만 작동한다. 전송이 이미 시작된 뒤에 생긴 요청은 아무리 우선순위가 높아도 그 프레임이 끝날 때까지 기다려야 하며, 이 대기는 더 낮은 우선순위 메시지 가운데 가장 긴 전송 시간만큼 길어질 수 있다.[5]
표준 포맷과 확장 포맷
11비트 식별자를 쓰는 표준 포맷과 29비트를 쓰는 확장 포맷은 한 버스에 섞여 있어도 함께 겨룬다. 확장 포맷의 29비트는 앞쪽 11비트의 기본 식별자(base identifier)와 뒤따르는 18비트 확장으로 나뉘고, 기본 식별자가 확장 프레임의 기본 우선순위를 정한다. 확장 포맷은 기본 식별자 바로 뒤에 recessive인 SRR 비트를 두는데, 표준 포맷은 같은 자리에 RTR 비트를 두고 데이터 프레임에서 이 비트는 dominant다.[1]
앞선 11비트가 서로 다르면 승부는 거기서 갈리고 포맷 구분은 개입하지 않는다. 앞선 11비트가 같을 때 비로소 포맷이 결과를 가르며, 이때는 표준 포맷 데이터 프레임이 확장 포맷 데이터 프레임을 이긴다.[2] 관련 비트의 배치는 CAN 프레임에서 다룬다.