
Controller Area Network
- Non-Host
CAN 통신을 이해해보면서 굳이 한 마디로 CAN을 정의해보자면 이렇게 정의할 수 있을것 같다.
BOLD체로 표현된 말을 잘 기억해두자, 통행이 잘되는 이유를 알면 어디가서 CAN통신 안다고 할 수 있다.
어떤 기술도 이유없이 나온 기술은 없다. CAN통신은 어떤 문제를 해결하기 위해 등장했을까?
자동차 산업의 발전
우리가 주목할 것
단 두개의 선으로 모든 통신을 가능하게 하다.

글 처음부분에 나온 한 마디가 기억나는가?
여기서 CAN HIGH , LOW 케이블이 도로이고, CAN트랜시버,컨트롤러,MCU 이 3개가 합쳐진 한 덩어리(ECU)가 자동차로 비유된다.
즉, 여기서 하나의 노드(자동차)를 추가하려면 그냥 케이블에 붙히기만 하면 된다.
기존의 얽히고 섥힌 배선들이 굉장히 깔끔하게 정리될 수 있음을 유추할 수 있다.
CAN이 왜 필요한지, 왜 사용해야하는지 깨달았다면 좀 더 깊이 들어가보자.
- ISO 11898
: CAN을 정의해놓은 표준규격 -> 통신을 한다 라는 것은 서로가 어떠한 '약속'을 지켜야만 가능하기 때문에, 항상 표준이 존재한다.
- ECU
: MCU , 센서 등 어떠한 기능을 위해 구성된 하나의 시스템
- 논리 0 , 1
: 논리0 == 우성 == dominant
: 논리1 == 열성 == recessive
- CAN FRAME
: CAN 통신에 사용되는 일종의 데이터 프레임
- CAN 컨트롤러
: ISO 11898-1 규격에 맞게끔 ID Arbitration , 데이터 필드 구조, 에러 검출 , 프레임 종류 , 버퍼처리 및 인터럽트 조건 등을 설정하여 구현된 기기
- CAN 트랜시버
: ISO 11898-2 or 3 규격에 맞게끔 신호를 주고받는 방식을 정의, 구현되있는 기기
겁먹지 말라, 외계어가 아니다.
CAN 통신과 관련된 규정들을 표준화 시킨 것.
| 표준 번호 | 설명 | 특징 요약 |
|---|---|---|
| ISO 11898-1 | 데이터링크 & 객체 계층 | CAN의 프레임 구조, Arbitration, ID, CRC 등 |
| ISO 11898-2 | High-speed 물리 계층 (최대 1Mbps) | 일반 차량용 CAN (TJA1050 등 사용) |
| ISO 11898-3 | Low-speed, fault-tolerant 물리 계층 | 저속이지만 회로 단선/충돌에 강함 |
| ISO 11898-4 | Time-Triggered CAN (TTCAN) | 시간 예약 기반의 deterministic 통신 |
| ISO 11898-5 | High-speed 물리 계층 + wake-up 기능 | 슬립모드 ECU 깨우기 가능 |
| ISO 11898-6 | Selective wake-up 기능 (CAN Partial Networking) | 필요한 ECU만 깨움 (전력 절감) |
복잡하다, 하지만 입문자라면 1~3번(+@4번) 위주로 먼저 학습을 하자, 계속하다보면 자연스럽게 궁금해지고 , 나머지도 체화시킬 수 있다.
ISO 11898-1
ISO 11898-2
ISO 11898-3
ISO 11898-4
왜 굳이 2가지 모드로 나눴을까?
그리고 이게 표준으로 까지 남아있을만큼 서로 대체불가능한 역할이 존재하는걸까?
차량 내부에는 “속도가 중요한 회로”와 “안정성이 중요한 회로”가 공존한다.
- 11898-2 → 속도 필수 구간
- 실시간 제어: ABS, 엔진 제어, 미션
- 수 ms 단위 지연도 치명적 → 빠른 통신 우선
- 11898-3 → 끊기면 안 되는 구간
- 도어락, 창문, 라이트, 에어컨
- 느려도 되지만, 문이 안 열리면 치명적
| 항목 | ISO 11898-2 (High-speed CAN) | ISO 11898-3 (Low-speed, fault-tolerant CAN) |
|---|---|---|
| 속도 | 최대 1 Mbps | 최대 125 kbps |
| 주요 용도 | 파워트레인, ABS, ECU 간 실시간 제어 | 윈도우, 도어락, 센서 등 바디 제어 |
| 물리적 구조 | 버스형 + 종단저항 필수 | 분기 허용 + 각 노드 종단저항 포함 가능 |
| 전압 | ±2V 이상 차동 신호 | ±0.5V ~ ±2V 저전압 |
| 내결함성 | 노드 단선 시 전체 통신 마비 | 1선 끊겨도 통신 유지 (fault-tolerant) |
| 복구성 | 회로 재시작 필요 | 자동 복구 (Bus-off → Active 전환) |
| 비용 | 낮음 (간단 구조) | 높음 (복잡한 트랜시버) |
| 소비전력 | 상대적으로 낮음 | 상대적으로 높음 |



Logic1 == recessive == 열성
Logic0 == dominant == 우성
이게 왜 필요한가?
충돌발생상황 , CAN 버스 내부 데이터 충돌시 bit 값이 Dominant 인 비트가 우선순위를 가지게 된다. (CSMA/CR)
즉, 충돌없이 원활한 통신이 가능한 핵심적인 이유가 여기에 있다.
Node1 , 2 , 3 이 동시에 데이터를 보내는상황
각 노드의 데이터는 다음과 같다.(간략화된 예시)
Node1 : 11111111
Node2 : 00110011
Node3 : 00000000
Node1 : 1 | Listen Mode
Node2 : 0 | 0 | 1 | Listen Mode
Node3 : 0 | 0 | 0 | 0 | 0 ....
즉 ID 값이 낮을수록 우선순위가 높다.
이제 본격적으로, CAN 통신의 데이터가 어떤 구조로 흘러가는지를 뜯어보자.
자동차에선 수많은 ECU들이 각자의 메시지를 보내고, 동시에 버스에서 싸우고 양보하면서 돌아간다.
이 전쟁터에서, 데이터 한 줄을 보내기 위한 프레임은 생각보다 꽤 체계적이다.
출처 : 나무위키
| 필드명 | 길이 | 설명 |
|---|---|---|
| SOF (Start of Frame) | 1bit | 프레임의 시작을 알리는 신호 |
| Arbitration Field | 12bit (ID 11bit + RTR 1bit) | ID 우선순위와 전송 타입 결정 |
| Control Field | 6bit | DLC (데이터 길이 코드) 포함 |
| Data Field | 0~8byte | 전송할 실제 데이터 |
| CRC Field | 15bit + 1bit | 에러 검출용 CRC + CRC delimiter |
| ACK Field | 2bit | 수신 확인 |
| EOF (End of Frame) | 7bit | 프레임 종료 표시 |
| IFS (Interframe Space) | 3bit | 다음 프레임까지 대기 시간 |
각 비트 하나하나가 모두 기능이 있고, 이 구조가 바로 CAN 통신의 뼈대다.
모든 노드가 이 신호를 기준으로 동기화를 시작한다
즉, 하드 동기화 트리거 역할
이 ID 값이 바로 우선순위의 핵심
ID가 낮을수록 우선순위가 높다 → CAN의 CSMA/CR 기반
여기에 들어가는 데이터는 네트워크 상에서 그대로 노출된다 → 암호화는 별도 구현 필요
즉, 혼합 네트워크에서 확장형 노드가 많아도
표준형 ID가 작은 메시지는 우선권을 가진다
| 종류 | 설명 |
|---|---|
| Data Frame | 일반적인 데이터 전송용 |
| Remote Frame | 요청 메시지 (RTR=1) |
| Error Frame | 에러 상황 발생 시 전송됨 |
| Overload Frame | 수신이 너무 빠르거나 처리 못할 경우 전송 |
CAN은 동기식 통신이 아니다.
하지만 비트 타이밍을 위해 강력한 동기화 메커니즘을 갖는다.
하드 동기화
소프트 동기화
CAN이 충돌 없이 통신을 성공시키는 핵심 메커니즘 = ID Arbitration
버스 충돌이 “물리적으로 일어났는데도”,
비트 우선권을 이용해 손실 없이 중재되는 게 CAN의 특징
CAN은 단순한 에러검출 수준이 아니라,
스스로 에러를 감지하고 에러 상황을 전파하며, 자신을 격리할 수 있는 수준의 자가복구 구조를 가진다.
| 에러 종류 | 설명 |
|---|---|
| 비트 에러(Bit Error) | 보낸 비트와 버스에서 읽힌 비트가 다름 |
| 스터핑 에러(Stuff Error) | 동일 비트 5개 이상 연속 발생 → 스터핑 룰 위반 |
| CRC 에러 | 수신자가 계산한 CRC값 ≠ 송신자 CRC |
| 포맷 에러(Form Error) | 프레임 구성이 규칙에 어긋남 (예: EOF 이상 등) |
| ACK 에러 | 수신자가 ACK 비트에 응답하지 않음 (아무도 받지 않았다는 뜻) |
이 에러들은 수신자든 송신자든 누구나 감지하면
곧바로 에러 프레임을 전송해서 전체 노드에게 알린다.
CAN 노드는 에러 발생 빈도에 따라 스스로의 상태를 변화시킨다.
| 상태 | 설명 |
|---|---|
| 능동(Active) | 정상 상태. 에러 발생 시 에러 프레임 전송 가능 |
| 수동(Passive) | 에러 누적 → 에러 프레임 전송 불가. 자기 에러만 카운트 |
| Bus-Off | 심각한 에러 누적 시, 네트워크에서 완전 격리됨 |
내부 동작
기준 이상으로 누적되면 -> 수동 -> 그 이상이면 -> Bus-Off
Bus-Off 상태란?
이 구조 덕분에, CAN은 고장난 노드가 전체 네트워크를 먹통으로 만들지 않도록 설계된다
CAN의 중재는 충돌이 아니라, "우선순위 경쟁"이다
에러는 단순히 확인하는 게 아니라, 네트워크 전체에 즉시 통보되고 자동 회복 로직이 존재한다
노드는 상황에 따라 스스로 활동을 줄이거나, 버스에서 퇴출되기까지 한다
Classic Can에서 발전된 모델들을 가볍게 살펴보자.
고속 & 대용량이 필요한 ECU 간 통신을 위한 Classic CAN의 확장
기존 데이터 필드가 무려 64byte까지 커지게 된다.
그런데 , 보낼 데이터가 더 많아졌는데 어떻게 더 빨리 전송가능할까?

비밀은 Data Field 에서의 클럭속도에 있다, 평상시에는 클래식 CAN처럼 데이터 송수신을 하다가, Data필드에서만 엄청나게 빠른 속도로 송수신을 하게 된다.
핵심 차이
구조 변화
CAN FD보다 더 넓은 대역폭과 유연한 프레임 구조로 Ethernet-Lite 역할을 하는 차세대 CAN
저비용, 저속, 간단한 구조가 필요한 환경에서 Classic CAN을 대체
구조적 특징
장점
단점
| 환경 | 사용 |
|---|---|
| 고속, 정밀 센서 다량 | CAN FD |
| 게이트웨이, 대규모 ECU 통합 | CAN XL |
| 단순 부품 제어, 저가 시스템 | LIN |
CAN 통신의 AtoZ 를 모두 들여다본거 같았지만, 아니다.
하지만, 이 기초 지식을 통해 AtoZ를 모두 빠르고 정확하게 이해할 수 있는 기반을 다질 수 있었다.
2일간의 속성 CAN 공부, 이론은 여기까지 해두고 주문한 CAN 트랜시버가 도착하면 실습 후기로 찾아뵙겠습니다.