본문 바로가기
통신

[칩간통신] CAN (Controller Area Network)

by 스테고사우르스 2023. 5. 3.

맨날 On-Chip 통신(AMBA)만 다루다가 오랜만에 칩 간 통신 주제를 들고 왔습니다.

오늘 다룰 주제는 CAN (Controller Area Network) 입니다.

 

CAN은, 벤츠가 차량용 통신에 사용하기 위해 보쉬한테 만들어 달라고 했다 하네요.

아무래도 원조가 가장 정확하니 BOSCH의 CAN Specification을 참고하여 글을 작성해보겠습니다.

추가로 TI의 spec과 위키피디아의 글도 인용하였습니다.

저는 TI 사의 datasheet가 더 눈에 잘 들어오더라구요..

 


Introduction

CAN bus는 host computer 없이 마이크로 컨트롤러나 장치들이 서로 통신하기 위한 표준 통신 규격입니다.

전문용어를 좀 첨가해보면 non-host bus 방식의 메시지 기반 네트워크 프로토콜이라고 설명할 수 있습니다.

 

CAN은 처음에는 차량을 위한 통신 규격으로 사용되었으나,

점차 영역을 넓혀 철도, 산업용 자동화 기기, 의료용 장비에도 사용되고 있습니다.

 


Advantages & Features

 

1. 저비용, 경량 네트워크

 

ECU가 모든 device에 대한 I/O을 가져야 하는게 아니라 Bus를 이용하기 때문에 가볍습니다.
이전에 다루었던 AMBA bus와 비슷하죠?
추가와 수정도 편하기 때문에 flexibility하다는 장점이 있습니다.

또한 HIGH와 LOW 두가닥만 이용하기 때문에 저렴합니다.

NI spec.
TI spec.


2. Multi Master


각 device에는 CAN 컨트롤러가 있습니다. 따라서 하나의 Master가 독점하는 구조가 아니라
어느 device든 간에 송신은 주도적으로 할 수 있습니다.

BOSCH spec.



3. Multicast


모든 device는 전송되는 모든 메시지를 볼 수 있습니다. 이 메시지를 보고 중요한지
중요하지 않은지에 구별할 수 있습니다. 여러 device가 같은 메시지를 보고 동시에 act할 수 있습니다.

BOSCH spec.


4. Identifier


AMBA AXI에서 ID를 이용해 out of order을 했던 것을 기억하시나요?
CAN에서는 ID를 이용해 우선 순위를 정합니다. 아비터의 기능이 있는거죠.

BOSCH spec.

우선 순위 뿐만 아니라 이 ID를 보고 수신 device가 Message Filtering을 할 수도 있습니다.

BOSCH spec.

 

5. 고속 & 원거리 통신

 

CAN은 최대 1Mbps의 속도와 최대 1000m의 거리까지 통신이 가능합니다.

 

6. 에러 체크

 

CAN에서 전송하는 비트에는 CRC (Cycle Redundancy Code)가 포함되어 있습니다.

이 코드를 보고 메시지에 에러가 있는지 판단합니다.

Checksum 방식을 사용합니다.

 


Message Transfer

메시지는 총 4가지로 구분할 수 있습니다.

 

1. DATA FRAME

BOSCH spec.
TI spec.

가장 기본적으로 Data를 전송하는 메시지 종류입니다.

각 비트에 해당하는 의미는 뒤에서 다시 알아보도록 하고 넘어가겠습니다.

 

 

2. REMOTE FRAME

BOSCH spec.
TI spec.

Remote frame은 다른 device에게 데이터 좀 전송하라고 보내는 신호입니다.

Data frame 과는 전송하는 비트가 약간 다릅니다.

요청하는 것이기 때문에 데이터는 딱히 필요 없습니다.

또한 RTR bit에서 remote frame이란 것을 명시해줘야 합니다.

이 RTR bit는 뒤에서 다시 설명 드릴게요.

 

 

3. ERROR FRAME

BOSCH spec.
TI spec.

Error frame은 말 그대로 에러를 전송하는 메시지입니다.

노드가 메시지에서 에러를 detect했다면 이 메시지를 보냅니다.

 

 

4. OVERLOAD FRAME

 

BOSCH spec.
TI spec.

Overload frame은 완전성을 위해 제안되었다고 하네요.

사용빈도가 너무 높은 노드에게 overload 메시지를 보내줍니다.

그러면 메시지 사이에 추가적인 delay를 주어 이를 해소합니다.

 


Meaning of the BIT field

 

  • SOF
    Start Of Frame으로 메시지의 시작을 나타냅니다.
    1bit로 구성되어 있습니다.
  • Identifier
    11bit의 ID 값입니다. 이것을 보고 수신 유무와 우선 순위를 정할 수 있습니다.

  • RTR
    Remote Transmission Request로 Remote message를 보낼 때 구분 짓기 위해 사용됩니다.
    1bit로 구성되어 있습니다.

  • IDE
    Identifier Extension으로 CAN ID의 확장이 필요할 때 사용합니다.
    1bit로 구성되어 있습니다.
    확장 버전은 아래에 그림으로 첨부하였습니다. (참고 1)

  • r0
    Reserved bit로 추가로 제공된 1bit 입니다.
    나중에 확장해서 사용할 수도 있으니 만들어 놓은 것입니다.

  • DLC
    Data Length Code로 전송할 코드의 byte를 나타냅니다.
    8bytes까지 가능하고 전송해야 할 비트는 아래 그림에 있습니다. (참고 2)

  • DATA
    실제로 전송할 데이터 입니다.
    8bytes (64bits)까지 전송이 가능합니다.
  • CRC
    Cyclic Redundancy Code로 전송 메시지의 오류를 detect 합니다.
    총 16bit이며 ckecksum 15bit와 delimeter 1bit로 구성되어 있습니다.

  • ACK
    메시지를 전송 받으면 그에 대한 응답으로 Acknowledge를 보내줍니다.
    총 2bit이며 Acknowledge 1bit와 delimeter 1bit로 구성되어 있습니다.
  • EOF
    End Of Frame으로 message frame의 끝을 나타냅니다.
    총 7bit인데 동일한 논리값이 5번 연속 채워지면 반대 레벨의 논리값이 자동으로 채워집니다.

  • IFS
    Interframe Space로 frame 사이에 위치하는 비트입니다.
    이 7bit의 시간동안 메시지가 버퍼로 이동하는 작업을 합니다.
    한마디로 다음 frame이 들어오기 전에 시간을 벌어주는 것이지요.

참고 1. Extended CAN
참고 2. DLC

 


 

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

[칩 간 통신] I2C Protocol  (2) 2023.03.15

댓글