코드를 느껴바라

[네트워크] CAN 통신 본문

개발/임베디드(Embedded)

[네트워크] CAN 통신

feelTheCode 2026. 1. 10. 15:04

CAN통신이란?

CAN은 Controller Area Network의 약자이다.

단순 통신 프로토콜이 아닌 전기적으로 동작하는 실시간 스케줄러라고 부르는데 그 이유를 알아보자.

 

CAN통신은 버스 토폴로지 구조인데 버스 토폴로지를 간단히 설명하면

네트워크의 모든 노드가 단일 전송 채널에 연결되는 구조이다.

차량에서 주로 CAN통신을 많이 사용하는데

왜 버스 토폴로지인 CAN통신을 고집하는 것일까?

그 이유는 여러 이유가 존재한다.

이유 의미
중재를 선에서 직접 수행 CSMA/CR 같은 전기적 우선권 판정
배선 최소화 자동차 배선 무게/비용 절감
고장 전파 감지 쉬움 에러 프레임 즉시 전파
실시간성 보장 ID 기반 우선순위

 

근데 다른 것들은 알겠는데 CSMA/CR는 뭘까?

근데 약자를 네트워크를 배울때 비슷한 용어를 배웠던 기억이 있는데

CSMA/CA라던지 CSMA/CD와 같이 Collision 관련 프로토콜이라고 유추할 수 있다.

 

일단 약자를 풀어쓰면 Carrier Sense Multiple Access/Collision Resolution이고
간단히 설명하면 충돌이 나면 → 선 위에서 승자 결정 → 그대로 계속 전송 해주는 하드웨어 스케줄러이다.

 

CSMA/CR은 전기적으로

  • Dominant(0) : 강한 전압
  • Recessive(1) : 약한 전압

두 상태를 통해서 버스 사용의 우선권을 서로 인식한다.

 

버스 규칙은

하나라도 0을 내면, 버스는 무조건 0이 된다.

ECU A ECU B 실제 버스
1 1 1
1 0 0 (B 승)
0 1 0 (A 승)

 

자기가 1을 냈는데
버스에서 0이 읽히면?

→ “아 나보다 우선순위 높은 놈이 있다”
→ 즉시 송신 중단 + 버스 해방

 

승자는 멈추지 않고 계속 감.

이제 다시 CAN통신으로 돌아와서

 

CAN통신의 Multi-master, multi-casting 프로토콜에 대해서 설명해보겠다.

Multi-master, Multi-casting 프로토콜

멀티 마스터와 멀티 캐스팅이 일단 뭔지 설명하기 전에 

이 둘은 갑자기 뭐냐?라는 의문에 답하자면

CAN 통신이 지향하는 설계 철학이자 프로토콜이다.

그럼 각 각 무슨 의미일지 알아보자.

 

Multi-master는 무엇이냐?

  • 중앙 서버가 없음
  • 모든 ECU가 자기 판단으로 바로 송신 가능
  • 누구든 바로 브레이크 메시지 뿌릴 수 있음

→ 그래서 “마스터 기다리는 지연” 자체가 없음.

 

그럼 Multi-casting은?

  • 목적지 개념이 없음
  • ID = 의미
  • 모든 ECU가 전부 듣고,
  • 필요한 놈만 그 ID 필터로 수신

→ 송신 한 번 = 관련된 모든 ECU가 동시에 반응

 

Multi-Master를 만족하기 위해서 구현할 것 == CSMA/CR

멀티 마스터를 통해 모든 ECU가 동시에 말할 수 있게 하기 위해서는

아까 설명한 CSMA/CR이 필수이다.

 

Multi-master == “누구든 마음대로 동시에 말할 수 있음”

→ 동시에 말하면 무조건 충돌이 생김

Multi-master가 되려면 반드시 필요한 것
중앙 통제 없음 충돌 해결 장치
아무나 송신 가능 실시간성 보장
브레이크 ECU도, 에어백 ECU도 즉시 송신 전기적 하드웨어 우선권

 

Multi-Casting을 만족하기 위해서 구현할 것 == ID 중심 설계

멀티 캐스팅이 되기 위해서는 ID 중심 설계가 필수이다.

 

Multi-casting = “받을 놈만 받고, 나머진 무시”

→ 그러려면:

  • 목적지 주소가 아니라
  • 메시지 자체의 의미를 구분하는 키가 필요함

→ 그게 바로 ID

역할 의미
메시지 의미 브레이크? RPM? 조향각?
하드웨어 우선순위 누가 먼저 나가느냐
멀티캐스트 그룹 주소 누가 받아야 하느냐

 

우선순위에 대해서 보강설명을 하자면 

CAN통신은 프레임 단위로 이루어지는데 

A, B, C 노드가 동시에 버스에 내가 말하고 싶습니다.!라고 ID를 비트단위로 전기적신호로 보내게 된다.

ex) A, B, C 노드의 각 ID

A : 10001

B : 11101

C : 10000

 

1. 첫번째 비트는 모두 1이라 전부 다음라운드로 진출

2. 2번째 비트에서 B 혼자 1이라 탈락, 나머지 A, C는 생존

3. 3번째 ~ 4번째 무승부

4. 5번째 비트에서 C의 승리로 C가 승!

 

그럼 그 셋중에 0이 제일 먼저 유일하게 나오는 노드 C가 버스 접근 권한을 얻게 되고

나머지는 패배하고 다음 IDLE을 기다리게 된다.

정리 및 마무리

이러한 내용을 기반으로 CAN통신을 재정의하자면

“Multi-master / Multi-casting 세계관을 만들기 위해
ID·CSMA/CR·Dominant/Recessive·하드웨어 중재 구조를
하나의 물리-논리 통합 프로토콜로 설계한 버스”다.

 

그렇기 때문에 CAN은 그냥 통신 프로토콜이 아니라

전기적으로 동작하는 실시간 스케줄러라고 부른다.

반응형