CAN Protocol 개요
CAN(Controller Area Network)통신은 차량 내의 전자 제어 장치(ECU)들 간에 데이터를 교환하기 위해 개발된 직렬 통신 프로토콜이다.
1983년 독일 보쉬사에 의해 개발이 시작되어 1986년 SAE(Society of Automotive Engineers)에서 정식 공개된 이래 현재 대부분의 자동차에서 사용되는 표준 통신 규격이다.
호스트 컴퓨터 없이 마이크로컨트롤러와 각종 장치들이 상호간에 통신할 수 있도록 설계된 메시지 기반 멀티플렉스 프로토콜로서, 1991년 2.0 규격이 발표되었고, 1993년 ISO에 의해 국제표준으로 등재되어 관리되고 있다.
CAN 프로토콜은 메시지 기반의 다중 마스터 통신 시스템으로, 충돌 검출과 우선순위 결정을 통해 높은 신뢰성과 실시간 성능을 제공한다.
각 메시지는 고유한 식별자를 가지며, 모든 노드는 버스 상태를 감시하고 필요한 메시지를 필터링하여 수신한다. CAN 프로토콜은 자동차뿐만 아니라 각종 산업기계나 의료기기, 엘리베이터 등 다양한 분야에서 필요에 따라 사용되고 있다.
CAN 프로토콜의 주요 원리
[ 메시지 기반 통신 ]
CAN 프로토콜은 메시지 기반 통신을 사용한다. 각 메시지는 고유한 식별자(ID)를 가지며, 네트워크에 연결된 모든 노드가 메시지를 수신하고 해당 ID를 기반으로 메시지를 필터링한다.
[ 비트 타이밍과 동기화 ]
CAN 네트워크는 비트 타이밍을 통해 동기화된다. 이는 각 노드가 동일한 비트 타이밍을 유지하도록 하여 충돌을 방지하고 정확한 데이터 전송을 보장한다.
[ 다중 마스터 시스템 ]
CAN 네트워크는 다중 마스터 시스템을 지원하여, 모든 노드가 메시지를 전송할 수 있다. 특정 노드에만 전송 권한이 있는 것이 아니라, 모든 노드가 자유롭게 통신할 수 있다.
[ 충돌 검출 및 우선순위 결정 ]
CAN은 충돌 검출과 우선순위 결정을 위해 비트 간의 논리적 AND 연산을 사용한다. 낮은 값(논리적 0)이 높은 값(논리적 1)보다 우선순위가 높다. 따라서 동일한 순간에 여러 노드가 전송을 시작하면, 가장 낮은 ID를 가진 메시지가 우선순위를 가지게 된다. 또한, 충돌이 발생하면, 충돌이 발생한 노드는 즉시 전송을 중단하고 버스를 해제한다.
CAN 프레임 구조
CAN 프레임은 여러 필드로 구성되며, 각 필드는 특정한 역할을 수행한다.
주요 필드는 다음과 같다.
- 시작 비트(Start of Frame, SOF): 프레임의 시작을 나타내는 비트.
- 식별자(Identifier): 메시지의 우선순위를 결정하는 고유 식별자입니다. 표준 CAN에서는 11비트, 확장 CAN에서는 29비트 길이입니다.
- 제어 필드(Control Field): 데이터 길이 코드(Data Length Code, DLC)를 포함하여 데이터 필드의 길이를 나타냅니다.
- 데이터 필드(Data Field): 실제 데이터가 포함된 필드로, 최대 8바이트 길이입니다.
- CRC 필드(Cyclic Redundancy Check): 전송된 데이터의 오류 검출을 위해 사용되는 필드입니다.
- ACK 필드(Acknowledgement Field): 수신된 메시지가 정상적으로 수신되었음을 송신 노드에게 알리기 위한 필드입니다.
- 종료 비트(End of Frame, EOF): 프레임의 끝을 나타내는 비트입니다.
CAN 통신 과정
- 메시지 생성 및 전송: 노드가 전송할 메시지를 생성하고, 네트워크 버스에 전송한다. 각 메시지는 고유한 식별자를 가진다.
- 버스 상태 감시: 모든 노드는 버스 상태를 감시한다. 충돌이 발생할 경우, 가장 낮은 식별자를 가진 메시지만 전송을 계속한다.
메시지 수신 및 필터링: 모든 노드는 버스에서 메시지를 수신하고, 수신된 메시지의 식별자를 기반으로 필터링하여 자신이 필요한 메시지만 처리한다.
에러 처리: CAN 프로토콜은 다양한 에러 검출 메커니즘(예: 비트 오류, 프레임 오류, CRC 오류)을 통해 데이터 전송의 신뢰성을 보장한다. 오류가 검출되면 해당 프레임을 폐기하고 재전송을 요청한다.
CAN의 장점
- 높은 신뢰성: 오류 검출 및 재전송 메커니즘을 통해 높은 신뢰성을 제공한다.
- 실시간 성능: 우선순위 기반 메시지 전송을 통해 실시간 데이터 전송이 가능하다.
- 확장성: 네트워크에 새로운 노드를 쉽게 추가할 수 있다.
- 비용 효율성: 단순한 배선과 통신 프로토콜로 인해 비용 효율성이 높다.