Overview
- CAN은 차량 내에 여러 ECU(Electronic Control Unit) 혹은 장치들 간의 통신을 위해 설계된 프로토콜이다.
- 차량의 기계적 제어에서 ECU를 통한 전기적 제어로 바뀌고, ECU의 개수가 증가하면서 효율적이고 안정적인 통신을 위해 개발되었다.
CAN 통신의 특징
Message Oriented Protocol
- ECU 노드 주소가 아닌 메시지의 우선순위에 따라 Identifier(ID)를 할당하고, 이 Message ID를 이용해 구별한다.
Bus형 or Passive Star형 Topology
- ECU간 1대1 연결을 하면 선도 많아지고, ECU 추가할 때마다 선이 계속 추가돼서 비용이나 무게 등의 측면에서 좋지 않아 Bus형 혹은 Passive Star형 네트워크로 ECU를 연결한다.
Multi Master, Broadcast Communication
- 모든 ECU가 정보를 송신할 수 있고, 목적지가 따로 안 정해져 있어서 해당 정보를 나머지 모든 ECU가 수신 가능하다.
CSMA(Carrier Sense Multiple Access)
- 정보(Frame) 송신하기 전에 BUS의 전압을 읽어서 IDLE인지 BUSY인지 확인(CS)
- 동시에 여러 ECU가 정보를 송수신 (MA)
CD-CR(Collision Detection with Collision Resolution)
- 2개 이상의 ECU가 정보 송신하면 이를 감지하고 Arbitration으로 충돌 해소
Synchronization
- Hard sync : Start of Frame(SoF)의 falling edge마다 동기화한다.
- Resync : 주기적으로 falling edge마다 1bit내의 time segment를 조정한다.
NRZ(Non Return to Zero) bit coding
- 빠르고 효율적으로 데이터를 보낼 수 있지만 timing을 놓칠 수 있어서 동기화를 위해 bit stuffing을 한다.
Bit Stuffing
- 일반적으로 연속적으로 동일한 5bit가 나오면 반대 bit 값을 넣어주는 것과 4bit마다 마지막 비트의 반대 bit 값을 넣어주는 것이 있다.
CAN High/Low twisted pair Wire
- CAN High/Low에 걸린 전압의 차이를 통해 logic “0”, “1” 값을 해독한다. (Differential 방식을 사용하므로 잡음에 강함)
- CAN High = 3.5V, CAN Low = 1.5V 이면 logic “0” (dominant)
- CAN High = 2.5V, CAN Low = 2.5V 이면 logic “1” (recessive)
- 우선 순위: logic “0” (dominant) > logic “1” (recessive)
통신 속도
- CAN 2.0A/B : 최대 1 Mbps, payload 0~8byte
- CAN FD : (Data field 기준) 최대 2~5Mbps, payload 0~64byte
- CAN XL : (Data field 기준) 최대 10Mbps, payload 0~2048byte
CAN 구조

ECU
- Core + CAN Controller로 구성된 MCU와 CAN Tranceiver
-
Core : 연산을 위한 CPU, Memory 등으로 구성
-
CAN Controller : Core한테 data를 송/수신하면 Header, Tail를 en/decoding해서 CAN Transceiver한테 logic 값을 송/수신한다.
-
CAN Transceiver : Logic 값을 Voltage로 변환하여 Controller나 다른 Transceiver에 송/수신한다.
-
BUS
- Free/Idle 상태는 CAN Frame 정보가 없다는 것으로 이때는 아무 ECU가 바로 정보 전송 가능하다.
- Busy 상태는 구리 선에 CAN Frame이 흘러가고 있다는 것으로 이때는 어떤 ECU로 정보 전송 시작이 불가하다.
- 정보 전송이 끝나고 나서 InterFrame Space(IFS)때까지 기다려야 한다.
데이터 통신 방식
- MCU 안의 CPU Core가 Data 를 CAN Controller쪽으로 보낸다.
- CAN Controller가 11898-1 국제표준 규약에 따라 추가적인 Header, Tail를 encoding 하여 logic 값을 CAN Transceiver에 보낸다.
- CAN Transceiver는 받은 Logic 값을 실제 전압으로 변환해서 구리 선에 인가하고 다른 수신하는 CAN Transceiver가 전압을 보고 다시 logic 값으로 변환해서 CAN Controller로 보낸다.
- CAN Controller가 Acceptance filtering을 통해 해당 ID를 읽어올지 아닐지를 정하고 이걸 RX buffer로 CAN frame을 보내서 head, tail를 decoding하여 data를 Core에 보낸다.
CAN Protocol/Frame/Filed 종류
Protocol
| CAN Protocol | Description |
| Classic CAN (2.0A Standard / 2.0B ID Extended Frame) |
CAN 통신의 특징 참고 CAN 2.0A와 2.0B의 차이는 Identifier의 bit 개수의 차이가 있다. |
| CAN FD | Classic CAN에서 Data Field부분의 bit rate를 높여서 한 Frame에 더 많은 Payload를 보낼 수 있게 향상시켰다. |
| CAN XL(Extended Data Field Length) | Classic CAN/CAN FD에서 더 확장하여 더 많은 Payload를 빠르게 전송 가능하도록 향상시켰다. |
Frame
| CAN Frame | Description |
| Data Frame | 송신 측에서 보낸 메시지 ID와 데이터 정보를 담고 있는 Frame |
| Remote Frame | 수신 측에서 특정 메시지 ID정보를 요청하는 Frame |
| Error Frame(Active/Passive) | 송수신 측에서 Error가 감지되면 전송하는 Frame |
| Overload Frame | 수신 측의 내부 상태가 Frame 전송 Delay를 요청하는 Frame |
| * InterFrame Space(IFS) | Frame과 Frame 사이에 최소 3bit 정보의 Idle상태를 유지한다. |
Field
| CAN Frame | Description |
| Arbitration Field | 메시지의 우선 순위를 판단하기 위한 Field |
| Control Field | Message의 종류를 알려주는 Field |
| Data Field | Data(Payload)를 담고있는 Field |
| CRC Field | 메시지의 유효성 검증을 위한 Field |
| Acknowledgement Field | Bus 통신이 성공적으로 송수신 되었는지 확인하는 Field |
'Network' 카테고리의 다른 글
| CAN Frame 설명 (0) | 2025.09.28 |
|---|---|
| SOME/IP Protocol (0) | 2025.09.25 |
| Raw Socket (2) | 2025.08.15 |
| Snort (5) | 2025.07.26 |
| pcap(Packet Capture, 패킷 캡처) (1) | 2025.07.18 |