Leo's Garage

CAN Bus Arbitration 그리고 메시지 우선순위 본문

자동차 및 자동차 SW/자동차 SW 개발 일반

CAN Bus Arbitration 그리고 메시지 우선순위

LeoBehindK 2023. 6. 25. 16:23
728x90
반응형

메시지 Arbitration ( 둘 이상의 CAN Controller가 Bus를 누가 먼저 사용할 지 합의하는 과정)은 데이터 전송을 위하여 실제 사용가능한 대역폭을 결정하는데 매우 중요하다. 

CAN 통신의 경우, UART와 다르게 bus 구조로 네트워크에 많은 Node가 함께 연결되어 있다. 즉 우선 순위에 대한 특정한 프로토콜이 필요하며 이를 통해서 데이터 전송에 대한 혼선을 막을 수 있다. 

모든 CAN 컨트롤러는 bus가 idle 상태임을 감지하면 곧바로 메시지를 전송할 수 있다. 이 때문에 두 개 이상의 CAN 컨트롤러가 동시에 메시지를 전송하게 되는 상황이 생길 수 있는 것이다. 

이러한 메시지 동시 송신은 다음의 과정을 통해서 해결할 수 있다. 

메시지를 전송하는 노드는 메시지 전송을 하는 동안에 Bus를 모니터링하는데, 이때 노드가 recessive level을 보내는 동안에 dominant level을 감지하면, 즉시 Arbitration을 종료하고 수신자 역할을 한다. Arbitration은 전체 Arbitration field에 대해서 수행되며, 해당 field가 전송되고 나면, Bus에는 정확하게 하나의 송신기만 남게 된다. 이 상황에서 송신기는 전송을 계속하게 되고, 잠재 송신자들은 Bus가 다시 비워지게 되면 메시지를 재전송하려고 시도한다. 이 Arbitration 과정에서 불필요한 시간 낭비는 없다.

이 Bit 레벨의 Arbitration이 성공하기 위해서는 두 Node가 동일한 Arbitration Field를 전송할 수 없다는 것이다. 이 규칙에는 한 가지 예외가 있는데 메시지에 Data가 포함되어 있지 않으면 모든 Node가 해당 메시지를 전송할 수 있다.

CAN arbitration

 

위의 그래프를 보면, Node1, Node2, Node3가 동시에 Bus에 메시지를 전송하고 한다. 

이때 Identifier의 Bit0번부터 해석하게 되면, Node3가 0으로 Dominant한 bit를 쏘고 있으므로 결국 Node3가 해당 Bus를 점유하게 됨을 알 수 있다. 

즉, 먼저 Bus를 선점해야 하는 메시지는 ID를 낮게 가져가면 된다는 의미이다. 

 

* Bus에 Node가 하나고 그 Node가 전송을 시도할 경우 어떤 일이 발생할까? 

--> 해당 노드는 당연히 Arbitration 과정에서 주도권을 가지게 되고 메시지를 전송하게 된다. 하지만 메시지를 송신 한 후에 ACK slot등에서 어떤 Node도 Dominant bit를 보내주지 않으므로 송신기는 ACK 오류를 감지하고 Error Flag를 보내고, Transmission Error Counter를 8 증가시키고 재송신을 한다. 이 과정이 16회 반복되게 되면, Error Passive상태가 된다. 

 

728x90
반응형

'자동차 및 자동차 SW > 자동차 SW 개발 일반' 카테고리의 다른 글

CAN Physical Layer  (0) 2023.06.25
CAN Message Addressing and Identification  (0) 2023.06.25
Basic CAN vs Full CAN  (0) 2023.06.25
Standard vs Extended CAN  (0) 2023.06.25
CAN 통신 Frame 종류와 구조  (0) 2023.06.25
Comments