# CAN이란?


 CAN 몇 년도에 만들어지고 누가 만들었고와 같은 이야기는 각자 게시물 아래 참고 사이트에서 확인하시길 바라고, 해당 이야기는 배제하고 제 나름대로 간단하게 정리해 보겠습니다. CAN은 알려진 바와 같이 자동차에 있는 다양한 노드를 제어하기 위해 탄생한 통신 프로토콜 입니다. 기존 RS-232나 485와 같은 시리얼 통신방식이고 비동기식 입니다. 다만 앞서 말씀드린 통신 프로토콜은 물리계층(Layer 1)부분만 명시되어 있지만 CAN의 경우에는 OSI 7계층 기준으로 볼 때 물리 계층(Layer 1)과 데이터 링크 계층(Layer 2)을 정의 하고 있습니다. 데이터 링크 계층을 정의하고 있기 때문에 에러에 대한 처리가 확실하기 때문에 상당히 안정성이 높은 프로토콜이 되겠습니다.


간단하게 특징을 RS-485와 비교하여 살펴보면 다음<표 1>과 같습니다.


<표 1> CAN 및 RS-485 비교

특징 / 통신 프로토콜

CAN

RS-485

토폴로지

Bus / Multi-point

Bus / Multi-point

통신 메소드

Master/slave, peer to

peer, multi-cast, multimaster

Master/Slave, Multi-master

통신 회선(전원 제외)

2-wire Twisted-pair / Differential

2, 4-wire Twisted-pair /

Differential

통신 속도

< 1Mbps

12Mbps 이하 또는 이상

에러처리

O (5가지의 에러 처리)

X

(상위 프로토콜을 이용한

수동적 에러처리)

최대 노드

2의 29승

256

최대거리

25-1000m

1.2km


직접적인 비교 대상이 아니라고 할 수도 있지만 일단 비교를 해보면 비슷합니다.


 먼 저 둘 다 버스형의 토폴로지 형태입니다. 쉽게 말하자면, 하나의 회선에 다수의 디바이스가 연결 된 형태로 디바이스가 증가하더라도 따라 회선 추가로 요구되지 않는 저비용 측면에서 유리한 토폴로지 구조입니다. 기본적으로 멀티 캐스트나, 브로드 캐스트가 가능하며, 디바이스의 구분은 어드레스 방식을 사용하게 됩니다. 다만 하나의 어떤 디바이스가 회선을 액세스 한 상태에서는 그 외의 디바이스는 회선을 사용할 수 없기 때문에, 스타형에 비해 실시간성이 떨어질 수 있는 단점이 있고, 서로 전송을 시도할 경우 이더넷과 같이 신호 충돌이 발생할 수 있습니다.

 하지만 버스형태가 산업 현장에서 각광을 받는 이유는 회선 즉, 설비 비용이 적게 작용하기 때문에 대부분의 산업용 필드버스는 버스형을 기본적으로 채용 하고 있습니다. (CAN, CC-LINK, Modbus, Profibus, Foundation Fieldbus 등등)


 통신 방식은 기본적으로 두 통신 프로토콜의 물리 계층이 버스형에 멀티 포인트(n:n)이기 때문에, 사실상 통신 방식은 상위 프로토콜의 정책에 따라 달라질 뿐 거의 같다고 볼 수 있습니다.


 통 신 회선은 RS-485와 같이 Twisted-pair에 Differential 방식을 기본으로 하고 있습니다. 노이즈에 강한 형태로서, 두 라인의 전압차를 논리의 기준으로 삼기 때문에 노이즈로 인해 두 라인의 전압이 변경되어도 기본적으로 두 라인의 전압차는 달라지지 않으므로 노이즈 특성을 적게 받습니다. (더 자세한 부분은 검색해서 보세요 ^^;)


 에 러처리는 CAN의 경우 자동차라는 매우 열악한(다이나믹 하고 거친) 환경을 고려하였기 때문에 물리계층에서 부터 데이터 링크 계층까지 에러에 대한 대비가 잘 되어 있습니다. CAN은 이러한 에러처리를 하드웨어에서 대부분 해주는 장점이 있습니다. ( 이부분은 확실한 검증이 필요합니다. 아시는 분들은 이야기를) 물론 RS-485의 경우에도 해당 레이어 프로토콜 스택을 MCU에 펌웨어 형태로에 올려주면 되지만(대표적으로 MODBUS), 아무래도 그럴 경우에는 하드웨어에서 자동으로 처리해주는 것보다 고려사항이 많아지고 검출할 수 있는 에러가 데이터로 한정되며, 계산적인 오버헤드가 크게 작용합니다.


 통신 속도나 최대 노드, 거리 등은 이론상으론 해당 수치보다 높을 수 있지만.. 상황에 따라 다르므로 설명은 생략합니다.


 이와 같이 물리적인 특징위주로 CAN을 살펴보았는데요.. 이를 한번 더 간단히 정리하자면..

CAN은 노이즈와 에러처리에 강력한 산업 통신 프로토콜이라는 것을 알 수 있었습니다.



용어정의

 

필드버스(Fieldbus) : 산업용 프로토콜을 전반적으로 부를 때 사용하는 말, 그러나 Foundation Fieldbus는 필드버스를 지칭하는 것이 아니라 필드버스 프로토콜 중 하나이다.

 

CSMA/CD : (Carrier Sense Multiple Access with Collision Detection)

 Ethernet에 이용되고 있는 통신 방식으로, 발신하려고 하는 노드가 충돌을 회피하기 위해 다 른 노드가 발신하고 있지 않는가를 캐리어 신호로 검출한다. 검출했을 경우, 어느 노드도 소정 시간 대기 후 발신을 재시행한다.


CSMA/NBA : (Carrier Sense Multiple Access with Non-destructive Bitwise Arbitration)

 DeviceNet 로 이용되고 있는 통신방식. CSMA 방식으로 각 노드의 우선도를 가미한 룰을 부가해 통신 충돌을 회피하는 방식이다. CSMA/CD 방식은 버스가 일시적으로 모두 비우기 위해 효율이 저하하는데 대해, CSMA/NBA에서는 어느 쪽인가가 발신을 하므로 버스 사용 효율이 높다.



본 내용은 CAN 스펙의 PART B를 중심을 작성되었음을 밝힙니다.


1. CAN 프로토콜의 구성

 

the Data Link Layer

   - the Logical Link Control (LLC) sublayer

   - the Medium Access Control (MAC) sublayer

the Physical Layer

[그림 1] CAN 프로토콜 구조


 CAN 은 2개의 계층으로 구성 된 프로토콜입니다. 우리가 일반적으로 알고 있는 RS-232와 RS-485 등이 Layer 1에 해당하는 물리 계층(Physical Layer)만 해당 된다면, CAN은 Layer 1 뿐만 아니라 Layer 2인 데이터 링크 레이어(Data Link Layer)도 포함을 합니다. 보통 우리가 UART 물리 계층 프로토콜 레이어를 기반위에 펌웨어로 간단하게 데이터 링크 계층을 적절하게 작성하였다면, CAN은 이것을 기본 스펙으로 정의를 하고 있다는 점 입니다.

 그래서 CAN 트렌시버에서 프레임 형식이 아마 고정되어 있고 MCU에서는 트렌시버의 데이터 필드 영역에 정해진 크기만큼만 데이터를 쓸 수 있을 거라 봅니다.(이부분은 직접 해보신 분들이 지적 해주세요 ^^;) 이 점은 CAN의 데이터 링크 계층 스펙에 구속을 받는다는 단점이 있지만, 데이터 링크 계층까지 트랜시버에서 하드웨어로 대부분 구성이 되어있을 것이므로 데이터 링크 레이어 스택을 작성해야하는 수고를 덜어줌과 동시에 고려사항이 적어지게 됩니다. 또한 Layer 2에서 MAC 부분 그림을 보시면 기존 소프트웨어 방식으로 작성하는 Layer 2에 비해 다양한 에러 처리가 가능함을 볼 수 있습니다. 참고로 CAN에서는 5가지 정도의 오류 발견할 수 있습니다.


2. CAN 프로토콜의 간략한 특징


 CAN 프로토콜은 다양햔 특징을 갖고 있는데 몇가지를 나열하면 아래와 같습니다.

 

메시지의 우선순위

 CAN 은 메시지에 우선 순위를 갖습니다. 이는 무엇을 의미하냐면, 만약 두 개 이상의 노드가 메시지 전송 시 버스 기반이기 때문에 신호 충돌이 나고, 이럴 경우 문제가 생깁니다.(RS-485는 죽는다고 하더군요..) 그러나 CAN 버스는 이를 알아차리고 재 전송을 요구합니다. 이더넷은 신호 충돌이 난 두 노드 각각 일정 시간 후 재 전송을 요청하지만, CAN은 충돌난 메시지 중 우선 순위가 높은 경우에는 우선순위 높은 메시지가 우선 전송이 되고 낮은 메시지가 일정 시간 후 재 전송을 시도 하게 됩니다.(CSMA/NBA)이는 기존 이더넷 방식의 CSMA/CD 보다 실시간성이 높고 빠른 반응 속도를 갖을 수 있는 장점이 있습니다. 메시지 우선 순위는 메시지 프레임에서 IDENTIFER 필드 부분의 값이 적을 수록 높은 우선순위를 갖습니다.

 

• 시스템 유연성

 노드가 추가 되거나 제거 되더라도 소프트웨어 또는 하드웨어를 변경없이 적용이 가능한 장점을 갖고 있습니다.


• 메시지 라우팅

 CAN 은 조금 특별하게 메시지 프레임에 주소를 포함하고 있지 않습니다. 기본적으로 멀티캐스트로 전송하면서 해당 노드는 메시지 프레임에 포함됨 해당 IDENTIFIER를 보고 자신에게 필요한 데이터일 경우 수신받고 그렇지 않을 경우 배제를 합니다.


멀티캐스트 수신

 기본적으로 버스형 토폴로지를 하고 있기 때문에 한 노드가 전송한 데이터는 모든 노드에게 전달 됩니다. 그렇기 멀티캐스트로 한번에 데이터를 전송할 수 있습니다.

 

멀티 마스터

 CAN은 기본적으로 메시지 충돌 회피를 지원하기 때문에 마스터에 의한 폴링 방식으로 데이터를 전송할 필요가 없습니다. 어느 노드든지 원하는 시간에 자유롭게 메시지를 전송하고 수신할 수 있습니다.

 

에러 검출 및 복구

 CAN은 다양한 에러를 검출 할 수 있습니다. CAN 자체로도 5가지 정도의 에러를 검출 할 수 있고 복구가 가능하기 때문에 신뢰성 있는 데이터 전송이 가능합니다.

 

훼손된 데이터 자동 재전송

 데이터가 정상적으로 전송이 되었더라도 데이터 자체가 훼손이 되거나 이상이 있을 경우 이를 자동적으로 재전송 할 수 있습니다.

 

일시적인 에러 및 지속적인 에러를 구분 검출하여 격리

 버스형 토폴로지에서는 에러를 발생시키는 노드는 상당히 문제가 됩니다. CAN에서는 3가지 정도로 에러를 발생시키는 노드를 구분하여 만약 문제가 많은 노드일 경우 CAN 버스에서 격리를 시킬 수 있습니다.



출처 : http://cafe.naver.com/micropc

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,