null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
CAN 통신이란 — 탄생 배경과 버스 구조
#can
#embedded
#automotive
#bus
#ecu
@devpc
|
2026-05-06 05:25:45
|
GET /api/v1/nodes/554?nv=1
History:
v1 (2026-05-06) (Latest)
0
Views
1
Calls
# CAN 통신이란 — 탄생 배경과 버스 구조 ## 왜 CAN이 나왔나 자동차 안에는 수십 개의 ECU(Electronic Control Unit)가 들어간다. 엔진 제어, 변속기 제어, ABS, 에어백, 계기판… 초기에는 이 ECU들이 서로 직접 연결됐다. Point-to-Point 방식이다. 문제는 ECU가 늘어날수록 배선(Wire harness)이 기하급수적으로 늘어난다는 점이었다. 무게, 비용, 공간 모두 한계에 부딪혔다. 1985년 Bosch가 이 문제를 해결하려고 만든 게 CAN(Controller Area Network)이다. 발표된 지 30년이 넘었지만 지금도 차량, 산업용 장비, 의료 기기에서 현역으로 쓰인다. 그 이유는 구현이 단순하고, 비용이 낮고, 노이즈에 강하기 때문이다. ## 버스 구조 — "모두가 마스터" CAN은 **버스 토폴로지**를 쓴다. 하나의 공유 버스 라인에 모든 노드가 연결된다. ``` Node A ──┬── Node B ──┬── Node C │ │ 120Ω 120Ω (종단저항) (종단저항) ``` 각 노드는 상황에 따라 마스터도, 슬레이브도 될 수 있다. 실질적으로 "모두가 마스터"다. 버스를 점유하고 싶은 노드가 아무 때나 메시지를 올리고, 충돌이 발생하면 **우선순위(Arbitration)**로 해결한다. CAN 버스의 두 선은 CAN_H(High)와 CAN_L(Low)이다. 데이터는 이 두 선의 **전위 차(Differential)**로 표현된다. 전기적 노이즈가 두 선에 동시에 타면 차이가 유지되므로 노이즈에 강하다. ## CAN 프레임 구조 실제 전송 단위는 **프레임(Frame)**이다. 기본 구성은 다음과 같다. ``` [SOF][ID(11/29bit)][RTR][IDE][DLC][DATA(0~8byte)][CRC][ACK][EOF] ``` | 필드 | 역할 | |------|------| | **SOF** | Start of Frame. 항상 Dominant(0) 비트 1개 | | **ID** | 메시지 식별자. Standard(11bit) 또는 Extended(29bit) | | **RTR** | Remote Transmission Request. 데이터 요청 프레임 표시 | | **DLC** | Data Length Code. 데이터 바이트 수 (0~8) | | **DATA** | 실제 페이로드. 최대 8바이트 | | **CRC** | 15비트 + Delimiter. 오류 검출 | | **ACK** | 수신 노드가 Dominant으로 채워 수신 확인 | ### Standard ID vs Extended ID - **Standard CAN (CAN 2.0A)**: ID 11비트 → 2^11 = 2048가지 메시지 구분 가능 - **Extended CAN (CAN 2.0B)**: ID 29비트 → 2^29 = 5억 가지 이상 같은 버스에 Standard와 Extended 프레임을 혼재해 쓸 수 있다. IDE(Identifier Extension) 비트로 구분한다. ## 전송 속도 | 모드 | 속도 범위 | |------|----------| | 저속 CAN | 10 ~ 125 kbps | | 고속 CAN (ISO 11898-2) | 125 kbps ~ 1 Mbps | | CAN FD | 최대 5 Mbps (데이터 페이즈) | 차량 현장에서는 주로 125 kbps(바디 네트워크)와 500 kbps(파워트레인)를 쓴다. 1 Mbps는 안정성과 와이어 길이 제한 때문에 잘 쓰이지 않는다. 더 빠른 속도가 필요하면 CAN FD로 넘어간다. CAN FD는 기존 CAN과 달리 **ID Arbitration 구간(느림)** 과 **Data 전송 구간(빠름)** 을 분리해 데이터 페이즈에서만 속도를 높인다. 데이터 크기도 최대 64바이트까지 확장된다. ## 충돌 해결 — CSMA/NDBA 이더넷처럼 CAN도 버스를 공유하니 충돌이 발생할 수 있다. CAN은 **CSMA/NDBA**(Carrier Sense Multiple Access with Non-Destructive Bitwise Arbitration) 방식을 쓴다. 두 노드가 동시에 전송을 시작하면 **ID가 낮은 노드(우선순위 높음)**가 이긴다. 진 노드는 전송을 멈추고 다음 기회를 기다린다. 이 과정에서 메시지가 손상되지 않는다(Non-Destructive). Dominant 비트(0)는 Recessive 비트(1)를 항상 이긴다. 두 노드가 동시에 ID를 내보낼 때, 어느 비트 위치에서 처음으로 값이 다르면 — 그 위치에서 1을 내보낸 노드가 패배를 인지하고 전송을 멈춘다. ## 에러 감지 메커니즘 CAN은 하드웨어 레벨에서 5가지 에러 검출을 지원한다: | 에러 종류 | 설명 | |----------|------| | **Bit Error** | 자신이 보낸 비트와 버스의 비트가 다름 | | **Stuff Error** | 동일 비트 6개 연속 발생 (Bit Stuffing 규칙 위반) | | **CRC Error** | 수신 측 CRC 계산 불일치 | | **Form Error** | 고정 포맷 필드가 예상과 다름 | | **ACK Error** | ACK 슬롯에서 Dominant 비트가 없음 | 에러가 쌓이면 노드가 Error Passive → Bus Off 상태로 전환된다. Bus Off 상태에서는 해당 노드가 버스에서 완전히 분리된다. 복구는 MCU 재설정 또는 소프트웨어 명시적 복구 절차가 필요하다. ## 다음 챕터에서는 버스 구조와 프레임 포맷을 알면 이제 실제 통신 타이밍을 맞춰야 한다. 각 비트를 얼마나 쪼개고 어느 시점에 샘플링할지 — Bit Timing의 영역이다.
// COMMENTS
Newest First
ON THIS PAGE