정의
버스 접근 방식은 언제 어느 참여자가 버스를 점유해 전송할 수 있는지를 정하는 규칙이다. CAN처럼 버스가 유휴이기만 하면 어느 노드든 곧바로 전송을 시작하고 겹쳤을 때만 중재로 조정하는 방식이 있는가 하면, 전송 시점을 미리 짜 두는 방식도 있다.[1]
하나의 매체를 여럿이 나눠 쓰는 이상 두 노드가 같은 순간에 전송을 시작할 가능성은 늘 있다. 이 가능성을 어떻게 다루느냐가 버스 접근 방식을 가른다. 겹침을 허용하고 나중에 풀 것인가, 아예 겹칠 수 없게 시점을 배분할 것인가. 이 선택은 프로토콜의 반응 속도와 지연 예측 가능성을 통째로 결정하며, 버스 네트워킹 과제 가운데 프로토콜의 성격을 가장 크게 좌우하는 자리다.
위 그림에서 A와 B, C는 노드 이름이고, M은 마스터가 내보내는 헤더, T는 노드에서 노드로 넘어가는 토큰이다. 짧은 세로선은 노드에 전송할 것이 생긴 시점을 가리킨다.
이벤트 구동
보낼 것이 생긴 노드가 버스가 비어 있는지 살핀 뒤 곧바로 전송을 시작한다. 미리 짜인 계획표가 없으므로 사건이 생긴 순간과 전송이 시작되는 순간 사이가 짧다.
대신 두 노드가 같은 순간에 시작하는 일을 막을 수 없다. CAN은 겹친 프레임의 식별자를 비트 단위로 겨루어 우선순위가 가장 높은 프레임 하나만 남기고, 진 노드들은 자동으로 그 프레임의 수신자가 된다. 진 노드는 요청을 버리지 않고 현재 전송이 끝나 버스가 다시 열릴 때 재시도한다.[2] 겨루는 동안 이긴 노드는 전송을 멈추거나 되돌리지 않는다. 메시지가 다른 노드에 의해 손상되거나 파괴되지 않고 그대로 이어진다는 뜻에서 이 조정을 비파괴적이라고 부른다.[3]
이름과 동작
비트 단위로 승부가 갈리는 절차 자체는 CAN 중재에서, 한 노드의 신호가 다른 노드의 신호를 덮어쓸 수 있게 하는 버스 상태의 비대칭은 CAN 버스 레벨에서 다룬다.
마스터-슬레이브
한 참여자가 전송 시점을 독점해 결정한다. LIN 클러스터는 하나의 마스터 태스크와 여러 슬레이브 태스크로 이루어지고, 언제 어떤 프레임을 옮길지는 마스터 태스크가 정한다. 마스터 태스크는 스케줄 테이블에 따라 프레임 헤더를 내보내며, 스케줄 테이블은 어떤 프레임을 어떤 간격으로 보낼지를 지정한다. 마스터 응용은 여러 스케줄 테이블을 두고 그중 하나를 골라 쓸 수 있다.[4]
슬레이브는 스스로 통신을 시작하지 못한다. PROFIBUS에서도 마스터가 능동 노드로서 슬레이브에 데이터 교환을 요구하고, 수동 노드인 슬레이브는 요구를 받았을 때만 응답한다.[5] 마스터가 하나뿐인 시스템에서는 접근 권한을 넘길 상대가 없으므로 별도의 조정 절차가 필요 없다.[6]
시간 동기
전송 시점을 시간 축 위에 미리 배분해 겹침 자체를 없앤다. 통신 주기를 같은 크기의 슬롯으로 나누고 각 슬롯을 특정 노드에 배타적으로 배정하는 시분할 다중 접근(TDMA)이 대표적이다.
FlexRay는 모든 노드가 같은 클럭에 동기된 상태에서 자기 차례를 기다렸다가 버스에 쓴다. 정적 세그먼트의 슬롯은 고정된 주기로 도착해야 하는 데이터를 위해 예약된 자리이고, 이 구조가 데이터가 언제 전달될지를 보장하는 결정성의 근거가 된다.[7] 슬롯의 주인이 전송하지 않기로 하거나 아예 응답하지 않아도 그 슬롯은 열린 채로 남고 다른 노드가 대신 쓰지 못한다. 겹침이 원리적으로 생기지 않는 대신, 쓰이지 않는 슬롯만큼의 대역폭은 그대로 비어 있게 된다.
토큰 패싱
전송 권한을 나타내는 특별한 프레임인 토큰이 참여자 사이를 돌고, 토큰을 쥔 참여자만 전송할 수 있다. PROFIBUS에서 마스터가 여럿이면 접근 권한이 한 마스터에서 다음 마스터로 넘어가는 토큰 패싱 원리가 쓰인다.[5]
토큰은 마스터들이 이루는 논리 링을 스테이션 주소 오름차순으로 순환한다. 한 바퀴에 걸릴 시간의 기준값이 목표 회전 시간이고, 이번 순번에 이 마스터가 트랜잭션을 시작할 수 있는 남은 시간이 토큰 보유 시간이다.[6] 한 참여자가 버스를 쥐고 있는 길이와 한 바퀴에 걸리는 시간이 이렇게 관리되므로, 다음 차례가 언제 돌아올지를 링에 속한 마스터들이 가늠할 수 있다.
시간 거동
네 방식은 전송 시점을 정하는 주체가 다르고, 그 결과 지연의 상한이 무엇에 매이는지도 달라진다.
| 방식 | 전송 시점을 정하는 것 | 지연을 좌우하는 것 | 예 |
|---|---|---|---|
| 이벤트 구동 | 노드에 생긴 사건과 버스 유휴 여부 | 버스 부하와 경쟁 프레임의 우선순위 | CAN |
| 마스터-슬레이브 | 마스터의 스케줄 테이블 | 스케줄 주기 | LIN |
| 시간 동기 | 전역 시간 축 위의 고정 슬롯 | 슬롯 주기 | FlexRay |
| 토큰 패싱 | 토큰의 도착 | 토큰 회전 시간 | PROFIBUS |
이벤트 구동은 접근 시점에 계획이 없다. CAN처럼 우선순위를 붙여 두면 급한 프레임은 부하가 높아도 짧은 지연을 보장받고 전송 요청이 시스템 전체에서의 중요도 순으로 처리되지만[2], 낮은 우선순위 프레임이 얼마나 기다릴지는 그 순간 버스에서 무슨 일이 벌어지는지에 달린다. 데이터가 제때 전달된다는 보장을 얻기 어렵다는 점이 FlexRay 같은 시간 동기 방식이 나온 배경이다.[7]
마스터-슬레이브는 그 사이에 있다. 전송 시점이 스케줄 테이블에 미리 적혀 있으므로 신호 전파 시간을 사전에 계산할 수 있고, 그러면서도 마스터 응용이 상황에 따라 다른 스케줄 테이블로 갈아탈 수 있다.[4] 고정된 슬롯 구조의 예측 가능성과 이벤트 구동의 융통성 가운데 어느 쪽에 가까울지를 마스터가 조절하는 셈이다.
동기 기준
노드가 자기 시간을 무엇에 맞추는지도 접근 방식마다 다르다.
이벤트 구동에서는 전송이 언제 시작될지 아무도 미리 알지 못하므로, 기준점은 프레임 자체가 가져온다. CAN 노드는 버스에서 검출한 SOF 비트의 하강 에지에 하드 동기화한다.[1] 마스터-슬레이브에서는 마스터가 보내는 헤더가 기준이 된다. LIN 슬레이브는 헤더의 sync 필드로 스스로 비트율을 맞추므로 정밀한 발진자를 갖출 필요가 없다.[4] 시간 동기 방식에서는 노드가 네트워크 전역의 시간 축에 맞춘다. FlexRay는 외부 동기 클럭 신호 없이 시작 프레임과 동기 프레임만으로 이 시간 축을 유지한다.[7] 토큰 패싱에서는 토큰 프레임의 도착이 곧 자기 차례의 시작점이다.[6]
CAN이 어떤 에지를 어떻게 쓰는지는 CAN 동기화에서 다룬다. 각 방식을 채택한 버스 시스템들이 차량 안에서 어느 영역을 맡는지는 차량용 버스 시스템에 정리돼 있다.