본문 바로가기
임베디드 개발/펌웨어

CAN 통신 (Controller Area Network)

by eteo 2023. 1. 24.

 

CAN 통신이란?

 

CAN 통신(Controller Area Network)은 1980년대 Bosch사에 의해 개발된 메시지 기반 네트워크 프로토콜으로, 차량 내에서 호스트 컴퓨터 없이 마이크로 컨트롤러나 장치들이 서로 통신하기 위해 설계된 표준 통신 규격이다.

 

 

 

 

 

 

 

CAN 통신의 특징

 

  • Multi-master serial communication bus.
  • Broadcast type of Bus. (Not point-to-point)
  • Low cost solution.
  • Extreme robustness. (noise-immunity)
  • High data transmission speeds. (up to 1 MBit/sec, High speed CAN 기준)
  • Reliability. Excellent error handling and Error Confinement abilities.
  • Automatic re-transmission of faulty messages.
  • Automatic bus disconnection of nodes that are suspected to be physically faulty. (Auto Bus-off 기능)
  • Functional addressing - data messages do not contain source or destination addresses, only identifiers relating to their function and/or priority.

 

 

CAN은 모든 메시지가 전체 네트워크에 브로드캐스트 되는 다중 마스터 버스 방식으로, 어떤 노드가 CAN 메시지를 송신하면 CAN 네트워크에 있는 모든 노드가 그 메시지를 듣는다.

 

따라서 I2C와 같이 특정 노드에게 송신하기 위한 Addressing 방식이 쓰이지 않고, 대신 메시지를 구별하는 데는 identifier 가 사용된다. 또한 네트워크에 2개 이상의 노드가 메시지를 전송하려고 할 때 priority를 정하는 데도 identifier 가 사용된다.

 

CAN 네트워크에 물려있는 노드는 서로서로 통신할 수 있으며, 중앙에서 컨트롤 역할을 하는 노드가 있을 수도 있고 없을 수도 있다. 또한 네트워크가 운영중이라 하더라도 언제든 노드를 추가할 수 있다.

 

 

 

 

 

 

 

CAN Node의 구조

 

 

 

CAN 노드의 구조는 위의 그림과 같다. 마이크로컨트롤러에는 CAN Controller 또는 CAN peripheral 로 불리는 모듈이 내장되어 있고, CAN Controller에는 CAN 메시지 송수신을 위한 CAN_TX, CAN_RX 2개의 Single-ended digital pin이 나와있다.

 

하지만 CAN 버스의 물리계층은 CAN_H, CAN_L 로 구성되는 differential 신호를 사용하기 때문에, Single-ended signal을 Differential siganl로 변환하기 위한 CAN Transceiver 가 중간에 필요하다.

 

보통 CAN 트랜시버는 평가보드를 구입하지 않는 이상 달려있지 않기 때문에 별도로 구입하여 외부에 구성해야 한다.

 

 

 

https://www.researchgate.net/figure/The-standard-CAN-bus-node-architecture_fig1_353166963

 

 

 

 

 

 

 

 

HIGH SPEED CAN / LOW SPEED CAN

 

CAN의 physical layer 표준은 다음의 두 가지가 있다. CAN 트랜시버도 High speed CAN 용과 Low Speed CAN 용이 따로 있다.

 

  • High speed CAN (ISO11898-2): 40Kbps ~ 1Mbps의 전송속도를 지원한다. 가장 일반적으로 사용되며, DeviceNet, CANopen 프로토콜에 사용되는 물리적 표준이다. CAN 버스 양 끝에 120 ohm 종단 저항을 사용한다.
  • Low Speed CAN (ISO11898-3) : 40Kbps ~ 125Kbps 전송속도를 지원한다. CAN 버스 라인 중 하나가 단선되어도 정상적으로 통신을 계속 할 수 있어 Fault Tolerant CAN 이라고도 부른다. 각 장비마다 트랜시버에 종단저항을 설치해야 한다. 

 

 

 

 

 

 

 

Single-ended / Differential Signal

 

 

 

Single-ended Signal :

라인이 HIGH 일 땐 수신자가 로직1로 해석하고, 라인이 0V일 땐 수신자가 로직0으로 해석한다.

 

Differential Signal :

하나의 데이터를 보내는데 서로 반대되는 극성을 갖는 2개의 라인을 사용한다. 라인1이 5V 라인2가 -5V일 때, 수신자는 두 신호간 전압차이를 보고 해석을 하며 신호차이가 10V이면 이를 로직1로 해석한다. 반대로 라인1이 -5V, 라인2가 5V로 전압차가 -10V인 경우 수신자는 이를 로직0으로 해석한다.

차동신호 방식은 만약 노이즈를 탄다고 해도 Twisted pair인 두 가닥 선에 똑같이 노이즈가 끼기 때문에 전압차는 변함이 없고 수신자는 제대로 해석을 할 수 있다.

 

차동신호는 이처럼 노이즈에 강한 특성을 가지고 있어 CAN 통신 뿐만 아니라 USB, RS232, RS485 통신 등에 쓰이고 Single-ended Signal 방식은 비교적 단거리 통신에 쓰인다.

 

 

 

 

 

 

 

CAN의 Differential Signals & Dominant / Recessive state

 

 

CAN 트랜시버는 CANH와 CANL의 차동신호를 만들어내는데 요약하면 다음과 같다.

 

로직 1을 TX핀으로 송신하거나 RX핀수으로 수신했을 때, CANH와 CANL의 전압차는 0V이고 CAN Bus는 Recessive state 가 된다.

로직 0을 TX핀으로 송신하거나 RX핀수으로 수신했을 때,  CANH와 CANL의 전압차는 약 2V이고 CAN Bus는 Dominant state 가 된다.

 

Logic CANH CANL Diff State
"1" 2.5V 2.5V 0V Recessive
"0" 3.5V 1.5V 2V Dominant

 

즉, 로직 0을 송신하기 위한 상태가 Dominant이고 로직 1을 송신하기위한 상태가 Recessive이며, 로직0이 로직1에 dominant한 특성을 갖는다.

 

 

 

https://www.youtube.com/watch?v=FctdvXL-4MY

 

 

 

 

 

아래는 CAN 트랜시버 Datasheet 의 Electrical Characteristics 이다.

 

 

 

 

다음 CAN bus에 2개의 노드가 있다고 가정해보자. 노드 A와 노드 B 둘 다 동시에 dominant 또는 recessive bit를 내보내는 경우는 충돌이 없다.

 

하지만 노드 A는 recessive bit을 내보냈는데 노드 B가 dominant bit을 내보내면 노드 B가 bus를 dominate 하게 된다. 

  노드 A
dominant recessive
노드 B dominant dominant dominant
recessive dominant recessive

 

 

아래 다이어그램을 보면 CAN 트랜시버는 버스 output을 loopback으로 계속 듣고 있으므로, recessive bit을 내보냈는데 버스가 dominant 상태이면 다른 노드가 버스를 dominate 했구나 이해하고 backoff 했다가 임의의 시간이 지난 후 버스가 idle 상태(11 recessive state 지속)가 되었을 때 다시 송신을 시도하게 된다.

 

Before attempting to access the bus, a CAN node must wait until the bus is idle. A sequence of 11 recessive bits detects an idle bus, i.e., the sequence of ACK Delimiter bit in the Acknowledgement Field (1 bit), the End of Frame Field (7 bits), and the Intermission Field (3 bits).

 

 

 

 

 

 

References : FastBit Embedded Brain Academy

 

 

다음글 : 2023.01.26 - [DSP, MCU/펌웨어공부] - CAN 통신 - 메시지 타입과 구조

 

CAN 통신 - 메시지 타입과 구조

CAN 통신 이전글 : 2023.01.24 - [DSP, MCU/펌웨어공부] - CAN 통신 (Controller Area Network) CAN 통신 (Controller Area Network) HTML 삽입 미리보기할 수 없는 소스 CAN 통신(Controller Area Network)은 1980년대 Bosch사에 의해

eteo.tistory.com

 

'임베디드 개발 > 펌웨어' 카테고리의 다른 글

LSB, MSB  (0) 2023.01.31
CAN 통신 - 메시지 타입과 구조  (0) 2023.01.26
unsigned int 형 tick 변수가 오버플로우 나는 날  (0) 2023.01.07
링 버퍼 Circular Buffer  (0) 2022.12.30
CAN 통신 ] PCAN 사용하기  (2) 2022.12.22