[CAN 통신] CAN 통신하기

DONE_WALLE
Research Team — DAWN
4 min readOct 27, 2021

--

CAN 통신(Controller Area Network)은 호스트 컴퓨터 없이 마이크로 콘트롤러나 장치들 간 통신하는 non-host 버스 방식의 메시지 기반 네트워크 프로토콜입니다. 대부분의 자동차에서 CAN통신이 사용됩니다.

CAN 통신의 장점

여러개의 ECU를 병렬로 연결하여 데이터를 주고받는 통신방법입니다.

장점

  1. 통신버스를 여러노드들이 공유하기때문에 언제든지 통신버스를 사용할 수 있습니다.
  2. CAN High와 CAN Low 두개의 신호로 통신하는 간단한 구조를 가지고 있으며, 덕분에 잡음에 강합니다.
  3. 우선순위를 두어 제어 속도와 안전성을 향상할 수 있습니다.
  4. 원거리 통신이 가능합니다.
  5. PLUG & PLAY 기능을 제공해서 CAN제어기를 버스에 간편하게 연결하고 끊을 수가 있어, 여러 장치를 추가, 제거하기 쉽습니다.

구조

장점 3번중 우선순위는 이렇게 동작합니다. 우성 비트는 논리적인 비트값 0을 가지며, 열성 비트는 논리적인 비트값 1을 가집니다. 두 노드가 서로 동시에 0을 보내면 네트워크상에서 0이 지나가며, 둘 다 1이면 1이 지나갑니다. 하나는 0이고 다른 하나는 1이라면 네트워크 상에는 우성 비트인 0이 지나가게 됩니다. 즉 CAN 네트워크는 낮은 CAN ID를 갖는 프레임에게 오류나 지연없이 데이터를 전송할 수 있는 기법을 제공합니다. 경쟁에서 진 높은 CAN ID를 갖는 프레임은 우성 메시지의 전송이 끝난 후 6 비트를 전송할 수 있는 시간을 추가로 기다린 후 재전송을 자동으로 시작하게됩니다.

CAN 프레임 구조

CAN통신은 프레임이라고하는 패킷으로 데이터를 전송합니다.

표준 CAN 메시지 프레임
확장CAN 메시지 프레임
  • SOF (Start Of Frame)

메시지의 시작을 의미하는 비트로 버스의 노드를 동기화하기위해 사용됩니다.

  • Identifier(ID)

식별자로서 메시지 내용을 식별하고 우선순위를 부여합니다. ID길이에 따라 표준 CAN(11bit)과 확장 CAN(29bit) 양식으로 구분됩니다.

  • Control

데이터의 길이(DLC)입니다.

  • Data

전달할 내용입니다.

  • CRC

순환 중복 검사 (Cyclic Redundancy Check)로 데이터를 전송할 때 전송된 데이터에 오류가 있는지를 확인 검사합니다.

  • ACK 비트

오류가 없다는 메세지가 전송되었다는 것을 의미합니다.

  • EOF(End Of Frame)

프레임의 종료를 의미합니다.

  • IFS

시간지연으로 사용되는 프레임 간 공간입니다.

  • SRR

대체원격 요청 비트입니다.

코드

CAN 장치와 통신을 위한 예제입니다.

mbed에 예제

Format지정은 이렇게 합니다.

확장 CAN Format

주로 사용되는 함수

can.read()함수를 사용하여 Message를 받고

can.write()함수를 사용하여 Message를 전송합니다.

선언부

Message는 이러한 데이터로 구성되어있습니다.

CAN으로 주고받을 데이터 Class
데이터를 전송하는 부분 (ID, DLC,Data)
데이터를 받는 부분: CAN통신이 수신되면 번지에따라 메모리를 복사하는 구문입니다.

--

--