| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
- kotlin
- 임베디드
- 다이나믹프로그래밍
- 우선순위큐
- c++
- 자바
- 프로그래머스
- 구현
- java
- 그리디
- 동적계획법
- level2
- 컴퓨터비전
- 다이나믹 프로그래밍
- JavaScript
- 백준
- 이분탐색
- BFS
- C
- 통신 인터페이스
- dfs
- cpp
- level3
- 2018 KAKAO BLIND RECRUITMENT
- dp
- lv2
- 컴퓨터 비전
- 코틀린
- 누적합
- Stack
- Today
- Total
코드를 느껴바라
[네트워크] CAN 통신 본문
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은 그냥 통신 프로토콜이 아니라
전기적으로 동작하는 실시간 스케줄러라고 부른다.

'개발 > 임베디드(Embedded)' 카테고리의 다른 글
| [임베디드] 엣지 감지 (with LED 토글) (2) | 2026.01.29 |
|---|---|
| [소프트웨어 공학] Automotive-SPICE 개요 (A-SPICE) (2) | 2026.01.23 |
| [C/C++] 정의와 선언의 차이 in C언어 (0) | 2025.12.30 |
| [C/C++] C언어 자료형 (0) | 2025.12.24 |
| [C/C++] C에서 객체를 만드는 방법: 구조체와 생명주기 (0) | 2025.12.24 |
