테마
02. CAN 물리 계층과 트랜시버
학습 목표
- CAN-High와 CAN-Low 두 선이 왜 필요한지 설명할 수 있다.
- 120옴 종단저항이 통신 품질에 어떤 역할을 하는지 이해할 수 있다.
- Dominant와 Recessive의 의미를 전압과 우선순위 관점에서 구분할 수 있다.
- MCU, CAN Controller, CAN Transceiver의 역할을 나눠 설명할 수 있다.
- 트랜시버 데이터시트에서 실무자가 확인해야 할 항목을 알 수 있다.
전체 구조
1. CAN은 두 가닥 선을 사용한다
CAN 통신은 일반적으로 두 가닥의 전선을 사용한다.
- CAN-High
- CAN-Low
두 선은 하나의 신호를 서로 다른 전압 관계로 표현한다.
이런 방식을 **차동 신호(Differential Signal)**라고 생각하면 된다.
| 상태 | CAN-High 예시 | CAN-Low 예시 | 의미 |
|---|---|---|---|
| Recessive | 약 2.5V | 약 2.5V | 논리 1 |
| Dominant | 약 3.5V 또는 3.75V | 약 1.5V 또는 1.25V | 논리 0 |
정확한 전압 값은 트랜시버와 표준 조건에 따라 달라질 수 있지만, 핵심은 두 선의 전압 차이를 보고 0과 1을 판단한다는 점이다.
두 선을 사용하면 외부 노이즈에 상대적으로 강해진다.
노이즈가 두 선에 비슷하게 더해져도 수신자는 두 선의 차이를 보기 때문에 영향을 줄일 수 있다.
2. Dominant는 Recessive보다 우선순위가 높다
CAN에서는 논리 0을 Dominant, 논리 1을 Recessive라고 부른다.
이 이름은 전기적으로도, 프로토콜적으로도 중요하다.
여러 ECU가 동시에 버스에 신호를 낼 때, 하나라도 Dominant(0)를 출력하면 버스는 Dominant 상태가 된다.
즉 0이 1보다 우선순위가 높다.
이 특성은 뒤에서 볼 Arbitration의 핵심이다.
CAN은 별도의 중앙 중재 장치 없이도 이 전기적 우선순위를 이용해 메시지 송신 우선순위를 결정한다.
3. 꼬임선과 D-Sub 커넥터
CAN-High와 CAN-Low는 현장에서 보통 서로 꼬인 형태의 전선으로 다룬다.
두 선을 꼬면 외부 노이즈가 두 선에 비슷하게 들어가게 되어 차동 신호의 장점을 살리기 좋다.
개발 환경에서는 여러 ECU와 장비를 연결할 때 커넥터 표준도 중요하다.
서로 다른 모양의 커넥터를 쓰면 물리적으로 연결이 불편하고, 핀 배치가 다르면 CAN-High와 CAN-Low를 잘못 연결할 수 있다.
차량 개발 환경에서는 D-Sub 9핀 커넥터를 자주 만난다.
| 핀 | 용도 예시 |
|---|---|
| 2 | CAN-Low |
| 7 | CAN-High |
| 3 | GND / V- |
이 표는 개발 장비에서 자주 쓰는 D-Sub 9핀 배치 예시다.
정비소나 차량 실차에서 보는 OBD-II/J1962 16핀 진단 커넥터와는 다르다. 일반적인 OBD-II CAN 배치에서는 CAN-High가 6번, CAN-Low가 14번 핀에 놓인다.
프로젝트나 장비마다 핀 사용이 다를 수 있으므로 실제 연결 전에는 반드시 장비 매뉴얼과 프로젝트 배선 정보를 확인해야 한다.
4. 버스 양 끝에는 120옴 종단저항이 필요하다
CAN 버스에는 보통 양 끝에 120옴 종단저항을 둔다.
종단저항은 전기 신호가 전선 끝에서 반사되어 파형을 왜곡하는 것을 줄이는 데 필요하다.
개발 중에는 실제 차량 전체 네트워크가 아니라 ECU 하나와 계측 장비만 연결하는 경우가 많다.
이때 종단저항이 포함된 커넥터나 별도 종단저항을 사용하지 않으면 통신이 불안정하거나 아예 되지 않을 수 있다.
원래 되던 CAN 통신이 갑자기 안 될 때는 다음을 확인한다.
- CAN-High와 CAN-Low가 바뀌지 않았는가?
- GND 기준이 맞는가?
- 버스 양 끝에 종단저항이 있는가?
- 장비 쪽에 이미 종단저항이 내장되어 있지는 않은가?
- 보레이트와 샘플링 포인트가 같은가?
5. CAN Controller와 CAN Transceiver는 다르다
CAN 통신을 구현할 때 MCU 내부의 CAN Controller와 외부 CAN Transceiver를 구분해야 한다.
역할을 나누면 다음과 같다.
| 구성 요소 | 역할 |
|---|---|
| 소프트웨어 | 어떤 메시지를 보낼지, 받은 메시지를 어떻게 처리할지 결정 |
| CAN Controller | CAN 프레임 포맷, ID, Arbitration, CRC, ACK, 에러 상태 같은 프로토콜 처리 |
| CAN Transceiver | MCU의 디지털 신호를 CAN-High/CAN-Low 전압 신호로 변환하고 버스를 구동 |
| CAN Bus | 실제 전기 신호가 이동하는 물리 매체 |
소프트웨어 개발자는 보통 CAN Controller 레지스터나 드라이버 API를 통해 송수신을 제어한다.
하지만 하드웨어 이슈를 디버깅할 때는 트랜시버와 배선도 함께 봐야 한다.
6. 트랜시버 데이터시트에서 볼 것
CAN Transceiver 데이터시트에는 많은 정보가 들어 있다. 처음부터 전부 이해하려 하기보다, 실무에서 먼저 필요한 항목을 잡는 편이 좋다.
| 항목 | 확인 이유 |
|---|---|
| 지원 CAN 종류 | High Speed CAN, CAN FD 지원 여부 |
| 핀 설명 | TXD, RXD, CANH, CANL, STB, EN, INH, ERR 등 역할 확인 |
| 동작 모드 | Normal, Standby, Sleep, Listen-only 등 |
| Wake-up 기능 | 저전력 상태에서 CAN 버스 이벤트로 MCU를 깨울 수 있는지 확인 |
| 전원 조건 | 배터리 전원, 로직 전원, 입력 전압 범위 확인 |
| 레퍼런스 회로 | 실제 회로 설계와 핀 연결 확인 |
| 오류 알림 | 트랜시버가 MCU에 에러 상태를 알려주는 핀이 있는지 확인 |
예를 들어 트랜시버가 Normal 모드에 들어가려면 특정 핀 조합이 필요할 수 있다.
소프트웨어가 CAN Controller를 정상 설정했는데도 통신이 안 된다면, 트랜시버가 Standby나 Sleep 상태인지 확인해야 한다.
7. Remote Wake-up은 저전력 설계와 연결된다
차량 ECU는 항상 최대 전력으로 켜져 있으면 안 된다.
시동이 꺼진 상태에서도 배터리가 연결되어 있으므로, 필요하지 않은 ECU는 저전력 상태로 들어가야 한다.
일부 CAN Transceiver는 Sleep 상태에서도 CAN 버스의 특정 Wake-up 패턴을 감지할 수 있다.
이 기능을 활용하면 MCU 전원을 꺼 둔 상태에서, 버스 이벤트가 발생했을 때 다시 MCU를 켤 수 있다.
이런 기능은 하드웨어 회로, 전원 스위치, 트랜시버 핀 연결, 소프트웨어 초기화 순서가 함께 맞아야 한다.
따라서 단순히 "트랜시버가 지원한다"만으로 끝나지 않고 회로도와 전원 시퀀스를 같이 확인해야 한다.
핵심 정리
- CAN은 CAN-High와 CAN-Low 두 선의 전압 차이를 이용해 데이터를 표현한다.
- Dominant(0)는 Recessive(1)보다 우선순위가 높고, 이 특성은 Arbitration에 쓰인다.
- 120옴 종단저항은 버스 양 끝에서 신호 반사를 줄여 통신 품질을 안정화한다.
- CAN Controller는 프로토콜 처리를, CAN Transceiver는 물리 전압 신호 변환을 담당한다.
- 트랜시버의 동작 모드, Wake-up, 핀 연결, 전원 조건은 소프트웨어 디버깅에도 직접 영향을 준다.
확인 질문
- CAN이 두 가닥 선을 사용하는 이유는 무엇인가?
- Dominant와 Recessive 중 어떤 상태가 버스에서 우선되는가?
- 종단저항이 없으면 어떤 문제가 생길 수 있는가?
- CAN Controller와 CAN Transceiver를 혼동하면 디버깅에서 어떤 실수를 할 수 있는가?