CS/통신

[통신] CAN 통신 개요

nowkoes 2024. 6. 9. 19:00

CAN 통신

개요 및 특징

출처: https://en.wikipedia.org/wiki/CAN_bus

 

 CAN(Controller Area Network) 통신호스트 컴퓨터 없이 마이크로컨트롤러와 각종 장치들이 상호 통신할 수 있도록 설계된 메시지 기반 멀티플렉스 통신 프로토콜이다. 이때 호스트 컴퓨터(Host Computer)가 없다는 것은 각 장치가 중앙 제어 장치 없이 독립적으로 동일한 버스를 통해 데이터를 주고받는다는 것을 의미하며, 멀티플렉스 프로토콜(Multiplex Protocol)은 여러 신호를 하나의 통신 회선으로 다중 전송하여 회선 수를 줄인 것을 의미한다.

 

 CAN 통신은 다음과 같은 특징을 갖고 있다.

 

1. 신뢰성: 메시지 충돌과 오류를 자동으로 검출하고 수정하는 기능을 내장하고 있어 노이즈에 강함.

  • 이때 버스가 Twist Pari 2선(High, Low)으로 되어 있어 전기적 노이즈에도 강함

 

2. 멀티-마스터(Multi-Master) 시스템: 각각의 노드가 버스에 데이터를 전송할 수 있고, 다른 노드와는 독립적으로 작동함

  • 따라서 특정 노드가 고장 나더라도 네트워크 전체에 영향을 끼치지 않음
  • 어떤 노드가 CAN 메시지를 송신하면 CAN 네트워크 내에 있는 모든 노드가 그 메시지를 들음(Listening)

 

3. 확장성: 소규모에서 대규모 시스템까지 다양한 환경에서 확장하여 사용할 수 있음

  • 즉, 네트워크가 운영 중이어도 언제든 노드를 추가할 수 있음

 

4. 비동기(Asynchronous) 통신: 시작과 끝을 나타내는 비트를 사용하여 동기화를 유지하고, 데이터 전송 간격이 일정하지 않아도 되어 필요시에만 데이터를 전송함

  • 이때 통신의 정확성을 위해 특정 속도(Baud rate)로 동기화를 유지

 

5. 종단 저항(Termination Resistance): 신호의 무결성을 보장하고 반사를 방지하기 위해 저항 사용

  • 전압을 통해서 보내는 시그널이다보니, 이 전압을 메시지 전달에 사용하고 나서는 그 파형을 다시 기본 아이들링 전압으로 변경하는 역할
  • 이러한 저항을 거치지 않고 합선이 이루어지면, 메시지가 초기화되지 않고 똑같이 메시지가 지속적으로 컨트롤 유닛들에게 보내지거나 오류가 발생

 

 이러한 특징을 갖는 CAN 통신은 주로 자동차 및 산업 자동화 분야에서 사용되는데, 이러한 통신의 특징을 간략하게 파악하고 실제로 메시지를 어떻게 주고받는지 파악하는 시간을 가져보도록 하겠다.


본문

물리적 구조

출처: https://en.wikipedia.org/wiki/CAN_bus

 

 해당 사진은 실제로 CAN 통신을 하기 위해 연결된 물리적 구조이다. 자세히 보면 제어기(Controller)와 수신기(Transceiver)가 두 개의 선으로 연결되어 있고, 수신기는 다시 버스와 두 개의 선으로 연결되어 있다. 즉, 수신기는 High와 Low로 구분되는 물리적 신호를 디지털로 변환하여 전송하는 인터페이스 기능을 한다. 이러한 디지털 신호를 제어기에 전달하고, 제어기 내에서 CAN 프로토콜에 따른 데이터 프레임으로 해석하여 MCU에 전달하는 방식으로 통신이 이루어진다. 이때 제어기는 보통 MCU 내부에 설치된다.

 

출처: https://e2e.ti.com/support/interface-group/interface/f/interface-forum/906750/about-recessive-and-dominant-on-can-transceiver

 

 이때 전송 데이터의 상태를 도미넌트 비트(Dominant Bit)수신 비트(Recessive Bit)로 나누는데, 이는 CAN 버스의 전기적 특성과 관련이 있다. 도미넌트 비트는 0으로 표시되고, CAN High 라인을 높은 전압으로, CAN Low 라인을 낮은 전압으로 설정한다. 해당 비트가 전송되면 버스에 연결된 모든 노드에서 항상 감지된다. 이는 CAN 네트워크에서 여러 노드가 동시에 데이터를 전송할 때, 도미넌트 비트가 수신 비트보다 우선시 되게 하기 위해서다. 예를 들어, 하나의 노드가 도미넌트 비트를 송신하고 다른 노드가 수신 비트를 송신할 때, 전체 버스는 도미넌트 비트로 설정된다. 이 특성을 이용하여 CAN 네트워크는 메시지 우선순위를 정하고 충돌을 방지한다. 

 

 

 예를 들어 3개의 노드(A: 0x111, B: 0x112, C: 0x113)가 존재한다고 가정해 보자. 이 세 노드가 동시에 데이터를 전송하려고 할 때, 가장 많은 도미넌트 비트(0)를 가진 노드가 우선권을 가진다. 11번째 비트에서 Node A는 0을 가지고 있지만, 다른 노드들은 1을 가지므로, Node A가 우선권을 가지게 된다. 따라서 Node A가 데이터를 전송하는 동안, 다른 노드들은 대기(Idle) 상태가 된다. Node A의 데이터 전송이 완료되면, 같은 원리로 Node B와 Node C가 순차적으로 데이터를 전송한다.


CAN 데이터 프레임 구조

출처: https://www.researchgate.net/figure/Fig-1-CAN-bus-structure-Fig-2-CAN-message-frame_fig1_341311712

 

 앞선 물리적 구조에 대한 윤곽이 그려졌다면, CAN 메시지는 어떻게 구성되어 있을까라는 궁금증이 생기게 될 것이다. CAN 메시지는 크게 실제 데이터를 전송하는 데이터 프레임(Data Frame)과 리모트 프레임(Remote Frame)으로 나뉜다. 이는 전송 요청(Transmission Request) 비트인 RTR의 값에 따라 나뉘는데, 해당 값이 0이면 실제 데이터를 전송하게 되고, 1이면 특정 노드에 데이터 전송을 요청하게 되는 것이다. 하지만 데이터를 요청하기 위해 별도의 메시지를 보내는 것은 자원 낭비이게 최근에 사용되지 않으므로 생략하도록 하겠다.

 

 CAN 데이터 프레임은 크게 시작 비트, ID, DLC(Data Length Code), Data, CRC, ACK(Acknowledgement Field), EOF, IFS(Inter Frame Spacing)로 구성되어 있다. 해당 필드에 대한 내용은 요약 부분에서 다루도록 하고, 중점적으로 봐야 할 것을 살펴보자.

 

1. ID: 메시지의 우선순위를 결정하는 고유한 식별자다. CAN은 일반적인 표준 CAN Frame과 확장 CAN FD Frame으로 나뉘는데, 표준 프레임에서는 11비트의 식별자를 사용하고, 확장 프레임에서는 29비트의 식별자를 사용한다

  • 일반적으로 16진수로 나타내므로 0x113과 같은 형태로 나타냄

 

2. DLC: 데이터 필드의 길이를 나타내는 제어 비트다. 표준 프레임에서는 4비트로 최대 8바이트 데이터를 구분할 수 있고, 확장 프레임에서는 4비트 혹은 8비트로 최대 64바이트의 데이터를 구분할 수 있다.

 

3. Data: 실제 전송할 데이터를 포함하는 필드다. 

 

 

 실제로 CAN 어댑터를 이용하여 메시지를 수신받아보면, t112800110000A5742088과 같은 형태로 온다. 여기서 t는 표준 CAN 프레임을 의미하고, 그다음 3자리는 ID, 그 뒤는 DLC, 나머지 16자리는 데이터를 의미한다. 즉, 0x112에서 보낸 값이 00110000A5742088(16진수 8바이트이므로 끊어서 보면 00 11 00 00 A 74 20 88)라고 해석하면 된다. 이러한 값의 의미를 사용자 입장에서 더욱 파싱하게 편하게 하는 것이 바로 DBC 파일인데 이는 다음 게시글에서 다루도록 하겠다.


요약

CAN 통신 
1. 정의: 호스트 컴퓨터 없이 마이크로컨트롤러와 각종 장치들이 상호 통신할 수 있도록 설계된 메시지 기반 멀티플렉스 통신 프로토콜
2. 특징
 a. 신뢰성: 메시지 충돌과 오류를 자동으로 검출하고 수정하는 기능을 내장. 버스가 Twist Pair 2선으로 되어 있어서 전기적 노이즈에 강함
 b. 멀티-마스터 시스템: 각각의 노드가 버스에 데이터를 전송할 수 있고, 다른 노드와 독립적으로 통신하는 방식  c. 확장성: 소규모에서 대규모 시스템까지 다양한 환경에서 확장하여 사용할 수 있
 d. 비동기 통신: 특정 속도로 동기화하지 않고 필요할 때 언제든지 데이터를 전송
 e. 간단한 구조: HIGH, LOW 두 개의 신호로만(Differential Signal) 통신
 f. 종단 저항: 신호 무결성을 보장하고 반사를 방지하기 위해서 사용
3. 구조: Bus ↔ Transceiver ↔ Controller
4. 메시지 구조
 a. 시작 비트(Start of Frame - SOF):항상 0(도미넌트 비트)
 b. 식별자(Identifier):데이터 프레임과 동일하게 11비트(또는 29비트)의 식별자 사용
 c. RTR 비트(Remote Transmission Request bit):데이터 프레임(0)과 리모트 프레임(1)을 구분하는 비트. 
 d. 제어 필드(Control Field):데이터 길이 코드(DLC)를 포함. 리모트 프레임에서는 요청한 데이터의 길이
 e. CRC 필드(Cyclic Redundancy Check Field): 오류 검출 
 f.  ACK 필드(Acknowledgment Field):송신된 메시지를 수신자가 올바르게 수신했음을 확인하는 필드
 g. 종료 비트(End of Frame - EOF):데이터 프레임과 동일하게 7비트의 '1'(리세시브 비트)로 설정
 h. 인터프레임 간격(Interframe Space):데이터 프레임과 동일하게 최소 3비트의 길이를 가지며, 새로운 메시지가 시작되기 전에 버스를 비워 둠


반응형

'CS > 통신' 카테고리의 다른 글

[통신] CAN DBC  (0) 2024.06.22