[통신]

CAN protocol(프로토콜) : 동작원리

Neo Park 2012. 11. 22. 09:43

 

◆ 개요

지난 포스트에서는 CAN의 탄생배경과 Standard CAN, Extend CAN의 bit Field에 대해서 간략히 알아 보았다. 이번 장에서도 마찬가지로 CAN의 전체적인 동작원리와 구조에 대해서 살펴볼 것이다.

 

 

▶ Arbitration

Arbitration? 약간 생소하면 생소할 수 있는 영단어이다. 우리말로 굳이 풀이 하자면 "중재" 정도가 어울릴 것인데.. 이것이 CAN통신을 하는데 있어서 매우 중요한 역할을 하게 된다. 그럼 아래 그림을 먼저 살펴보자.

 

<그림 1 ISO-OSI Model >

 

모두들 OSI seven layer에 대해 잘 알고 있을 것이다. CAN통신 또한 이 모델을 기반으로 구동되기에 가져와 보았다. 먼저 Physical layer는 데이터 전송을 위한 물리적 링크를 설정, 유지, 절단하는데 관련된 최하위 층이다. 예를 들면, 0과 1을 나타내는 신호의 형식, 커넥터의 규격, 전압이나 전류의 허용치, 각종 제어신호의 이름과 기능 등으로서, 전송매체를 통해 정보단위를 전기적으로 실제로 전송하는 역할을 한다. 우리는 이번 프로젝트에서 이 계층을 RS-232로 구현할 예정이다.

 

다음으로 표준 CAN Protocol을 구현하는데 있어서 중요한 층이라 할 수 있는 Data Link layer는

주로 물리적 계층에서 만든 0,1의 두가지 신호를 실질적으로 데이터로 만드는 encoding, 인코딩해서 만들어진 데이터를 가지고 프레임을 형성하는 framing, 오류발생을 막기위한 error detection, 각 포인트와 포인트간에 속도차를 극복하기 위해서 흐름을 제어하는 flow control등의 역할을 수행한다. CAN에서는 몇몇의 메세지 타입을 정의하고 버스에 접근에 따른 중재와 에러 검출등에 많이 사용되고 그 밖의 상위층은 부분적으로 상위 계층 CAN Protocol에 의해 구현됩니다.

 

<그림 2. CAN Bus Logic >

 

위 그림2는 각 노드가 CAN Bus에 접근을 시도할 경우 발생하는 버스의 상태를 나타낸 것이다. 사실 이러한 개념 덕분에 각 노드는 충돌을 발생하지 않고 신뢰성 높은 데이터 전송을 할 수 있는 것이기도 하다. 그림을 잘 살펴보게 되면 하나의 노드라도 우성(Dominant)상태, 즉 Zero이게 되면 버스의 상태는 우성이 된다. 또한 어느 노드 하나라도 우성이 아니게 되면 그 버스의 상태는 열성(recessive)상태 즉, one이 된다. 한마디로 해석하자면 CAN 버스 상에서는 우성비트는 열성비트를 무시하게 되는 것이다. 따라서 버스의 상태가 우성이냐 열성이냐에 따라 데이터 전송을 제어할 수 있는 것이다.

 

<그림 3. CAN Bus Inverted Logic >

 

그림3 은 일반 ISO 물리계층에서 쓰이는 버스 구조를 나타낸 것인데 CANH, CANL는 2개의 서로 다른 신호로 구동된다. 버스는 이 2가지의 꼬임전선을 사용하고 각각의 끝에는 120R 단말처리를 하였다. 또한 그림을 자세히 보게 되면 Driver의 CANH와 CANL 출력핀은 내부적으로 reciever의 input 핀과 연결되어 있고 driver의 입력과 reciever의 출력간 내부루프에서 신호전파지연이 발생하게 되는데 이것이 CAN 트렌시버의 품질을 좌우한다.

 

<그림 4 CAN Bus Access and Arbitration >

 

위에서 본 개념들을 바탕으로 이제 본격적으로 중재에 대한 개념에 대해 알아보도록 하자. CAN 프로토콜은 "Carrier Sence Multiple Access With Collision Detection" 따라 버스 Access를 처리한다. 만약 충돌이 발생하여도 메세지들은 결코 파괴되는 일이 발생하지 않고 충돌로 인해 낭비되는 대역폭도 생기지 않습니다. 이것이 Ethernet과 달리 CAN에서는 충돌이 해결되는 부분이 되고 더 높은 우선순위를 가진 메세지가 버스에 접근할 수 있는 것이다. 그래서 각각의 노드들은 식별자를 가지고 있는 것이다.

 

그림 4를 보자. 먼저 제일 윗 줄에 있는 노드1, 그 밑에 있는 노드 2와 노드 3가 동시에 버스를 차지하기 위한 요청이 발생하였을 경우에 먼저 Start Of Frame을 시작으로하는데 이 부분은 무조건 우성으로 설정되 있어야 데이터 전송에 문제가 없을 것이다. 다음에 나오는 것이 중재 필드 부분으로 데이터 프레임에 작성되어 있다. 그림에서 왼쪽 갈색선이 첫번째 중재하는 영역으로 노드1과 노드3가 중재에 승리하고 노드2는 열성비트로 인해 우선순위에서 최하위로 밀려나게 되고 다음 오른쪽 갈색선에서는 노드1과 노드2가 중재를 받게 되는데 여기서 노드1이 우성비트를 가지고 있으므로 우선순위 1위가 되어 제일 먼저 버스를 차지하게 되는 것이다. 그 다음 노드2가 전송되고 마지막으로 Halt상태였던 노드3가 전송되는 것이다. 비교적 간단한 개념하에 출발하였지만 이것으로 인해 CAN 통신의 신뢰성은 많이 향상될 수 있었다.