Skip to content
자동차 소프트웨어 입문제 2장

CAN 메시지는 실제 전선 위에서 어떤 전압과 회로를 통해 전달될까?

02. CAN 물리 계층과 트랜시버


학습 목표

  1. CAN-High와 CAN-Low 두 선이 왜 필요한지 설명할 수 있다.
  2. 120옴 종단저항이 통신 품질에 어떤 역할을 하는지 이해할 수 있다.
  3. Dominant와 Recessive의 의미를 전압과 우선순위 관점에서 구분할 수 있다.
  4. MCU, CAN Controller, CAN Transceiver의 역할을 나눠 설명할 수 있다.
  5. 트랜시버 데이터시트에서 실무자가 확인해야 할 항목을 알 수 있다.

전체 구조


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핀 커넥터를 자주 만난다.

용도 예시
2CAN-Low
7CAN-High
3GND / 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 ControllerCAN 프레임 포맷, ID, Arbitration, CRC, ACK, 에러 상태 같은 프로토콜 처리
CAN TransceiverMCU의 디지털 신호를 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를 켤 수 있다.

이런 기능은 하드웨어 회로, 전원 스위치, 트랜시버 핀 연결, 소프트웨어 초기화 순서가 함께 맞아야 한다.
따라서 단순히 "트랜시버가 지원한다"만으로 끝나지 않고 회로도와 전원 시퀀스를 같이 확인해야 한다.


핵심 정리

  1. CAN은 CAN-High와 CAN-Low 두 선의 전압 차이를 이용해 데이터를 표현한다.
  2. Dominant(0)는 Recessive(1)보다 우선순위가 높고, 이 특성은 Arbitration에 쓰인다.
  3. 120옴 종단저항은 버스 양 끝에서 신호 반사를 줄여 통신 품질을 안정화한다.
  4. CAN Controller는 프로토콜 처리를, CAN Transceiver는 물리 전압 신호 변환을 담당한다.
  5. 트랜시버의 동작 모드, Wake-up, 핀 연결, 전원 조건은 소프트웨어 디버깅에도 직접 영향을 준다.

확인 질문

  1. CAN이 두 가닥 선을 사용하는 이유는 무엇인가?
  2. Dominant와 Recessive 중 어떤 상태가 버스에서 우선되는가?
  3. 종단저항이 없으면 어떤 문제가 생길 수 있는가?
  4. CAN Controller와 CAN Transceiver를 혼동하면 디버깅에서 어떤 실수를 할 수 있는가?