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

같은 CAN 버스에서 여러 ECU가 동시에 메시지를 보내려 하면 어떤 메시지가 먼저 나갈까?

03. CAN 비트 타이밍과 메시지 중재


학습 목표

  1. Baud Rate와 버스 길이의 관계를 이해할 수 있다.
  2. Sampling Point, Time Quantum, TSEG, SJW의 큰 역할을 설명할 수 있다.
  3. CAN ID가 메시지 의미와 우선순위에 모두 관여한다는 점을 이해할 수 있다.
  4. Arbitration이 Dominant/Recessive 특성을 이용해 동작하는 방식을 설명할 수 있다.
  5. Bus Load가 높아질 때 발생하는 실무 문제를 이해할 수 있다.

전체 구조


1. 같은 버스에서는 같은 Baud Rate를 써야 한다

CAN 통신에서 Baud Rate는 버스 위에서 1초에 몇 비트 수준의 신호를 주고받을지 정하는 값이다.
같은 CAN 버스에 참여하는 ECU들은 같은 Baud Rate를 사용해야 한다.

만약 어떤 ECU는 500kbps로 설정하고 다른 ECU는 250kbps로 설정하면, 같은 신호를 서로 다른 타이밍으로 해석하게 된다.
그 결과 메시지를 정상적으로 읽지 못하고 에러가 발생한다.

Baud Rate는 보통 OEM 또는 네트워크 설계자가 정하고, 부품사는 그 값에 맞춰 ECU를 설정한다.


2. 속도가 빠를수록 버스 길이에는 제약이 생긴다

CAN 신호도 전기 신호이므로 전선을 따라 이동하는 데 시간이 걸린다.
버스가 길수록 신호가 왕복하는 데 시간이 오래 걸리고, ACK나 Arbitration 같은 동작에서도 타이밍 여유가 줄어든다.

그래서 일반적으로 속도가 높을수록 허용 가능한 버스 길이는 짧아진다.

Baud Rate 예시상대적 특징
125kbps긴 버스 길이에 유리하지만 전송량은 적다
500kbps차량에서 자주 만나는 중간 수준
1MbpsHigh Speed CAN의 높은 속도 영역, 버스 길이 제약이 커진다

정확한 값은 네트워크 토폴로지, 케이블, 트랜시버, 샘플링 포인트, EMC 조건에 따라 달라진다.
실무에서는 OEM 사양에서 지정한 Baud Rate와 물리 배선 조건을 기준으로 본다.


3. Sampling Point는 비트를 읽는 기준 시점이다

CAN 신호는 시간에 따라 변하는 전압이다.
수신자는 각 비트 구간 안에서 어느 시점에 값을 읽을지 정해야 한다. 그 지점이 Sampling Point다.

Sampling Point는 보통 비트 시간의 몇 퍼센트 지점인지로 표현한다.
예를 들어 80%라면 한 비트 구간의 뒤쪽 80% 지점에서 버스 상태를 읽는다는 뜻이다.

이 값도 CAN DB나 네트워크 사양에서 함께 전달되는 경우가 많다.
계측 장비를 연결할 때도 Baud Rate뿐 아니라 Sampling Point를 맞춰야 하는 상황이 있다.


4. Time Quantum, TSEG, SJW는 타이밍을 나누고 보정하는 단위다

CAN Controller는 한 비트 시간을 더 작은 단위로 나눠 관리한다.
이때 사용하는 기본 단위가 Time Quantum이다.

비트 시간은 대략 다음 요소들로 구성된다.

요소의미
Sync Segment비트 시작을 맞추는 구간
TSEG1전파 지연과 위상 보정 전반부
TSEG2Sampling Point 이후 구간
SJW동기화 오차를 보정할 때 한 번에 조정 가능한 폭

실무에서 이 값을 직접 계산하는 일은 많지 않다.
대부분 OEM 사양이나 MCU 설정 예제가 값을 제공한다.

다만 의미는 알고 있어야 한다.
클럭 오차, 버스 길이, 신호 지연 때문에 ECU마다 비트를 읽는 타이밍이 조금씩 어긋날 수 있고, CAN Controller는 SJW 같은 파라미터로 그 오차를 일정 범위 안에서 보정한다.


5. CAN ID는 메시지 구분자이자 우선순위 기준이다

CAN 메시지에는 ID 영역이 있다.
Standard Format에서는 11비트 ID를, Extended Format에서는 29비트 ID를 사용한다.

포맷ID 길이특징
Standard Format11bit전통적으로 많이 사용
Extended Format29bit더 많은 ID 공간 필요 시 사용

CAN ID는 두 가지 관점에서 중요하다.

  1. 수신 ECU가 어떤 메시지인지 구분하는 기준
  2. 여러 ECU가 동시에 송신하려 할 때 우선순위를 정하는 기준

ID 값이 작을수록 우선순위가 높다.
이것은 ID 비트가 앞에서부터 전송되고, Dominant(0)가 Recessive(1)보다 우선하기 때문이다.


6. Arbitration은 충돌을 파괴하지 않고 중재한다

일반적인 네트워크에서 여러 장치가 동시에 말하면 충돌이 발생할 수 있다.
CAN은 이 상황을 전기적 특성과 ID 비교를 이용해 중재한다.

예를 들어 세 ECU가 동시에 메시지를 보내려 한다고 하자.

ECU메시지 ID이진수 예시
BMS0x12300100100011
Engine0x13400100110100
Airbag0x15400101010100

ID 비트를 앞에서부터 동시에 버스에 출력한다.
어떤 ECU가 Recessive(1)를 보냈는데 실제 버스에서 Dominant(0)를 읽으면, 자신보다 우선순위 높은 메시지가 있음을 알고 송신을 멈춘다.

이 방식의 중요한 장점은 우선순위 높은 메시지가 깨지지 않고 그대로 전송된다는 점이다.
패배한 ECU들은 버스가 다시 비면 재전송을 시도한다.


7. 버스가 바쁠수록 낮은 우선순위 메시지는 늦어진다

CAN 버스는 한 순간에 하나의 메시지만 보낼 수 있다.
따라서 여러 ECU가 자주 메시지를 보내면 버스가 바빠진다. 이 정도를 Bus Load라고 한다.

Bus Load는 일정 시간 중 실제 메시지 전송에 사용된 시간의 비율로 볼 수 있다.

Bus Load가 높아지면 다음 문제가 생길 수 있다.

  • 낮은 우선순위 메시지가 계속 밀린다
  • 주기 메시지가 원하는 주기에 맞춰 나가지 못한다
  • 진단이나 계측 메시지가 응답 지연을 겪는다
  • 최악의 경우 제어 로직의 시간 조건을 만족하지 못할 수 있다

그래서 CAN DB를 설계할 때 메시지 길이, 주기, ID 우선순위, 네트워크 분리 여부를 함께 고려한다.


8. Bus Load를 줄이는 기본 방법

Bus Load는 메시지 수, 메시지 길이, 전송 주기, Baud Rate의 영향을 받는다.

방법효과주의점
메시지 주기 늘리기전송 횟수 감소실시간성이 떨어질 수 있음
데이터 길이 줄이기메시지 전송 시간 감소필요한 Signal을 못 담을 수 있음
불필요한 메시지 제거버스 여유 확보수신 ECU 영향 분석 필요
Baud Rate 높이기같은 시간에 더 많이 전송버스 길이와 EMC 조건 확인 필요
네트워크 분리부하와 장애 범위 분리게이트웨이 설계 필요

개발자는 "통신이 된다"에서 멈추지 않고, Bus Load와 지연이 제어 요구사항을 만족하는지 확인해야 한다.


핵심 정리

  1. 같은 CAN 버스에 참여하는 ECU들은 같은 Baud Rate와 호환되는 비트 타이밍을 사용해야 한다.
  2. Sampling Point는 각 비트 값을 읽는 기준 시점이고, Time Quantum과 TSEG는 이를 구성하는 세부 단위다.
  3. CAN ID는 메시지 의미를 구분하면서 동시에 송신 우선순위도 결정한다.
  4. Arbitration은 Dominant/Recessive 특성을 이용해 충돌 없이 우선순위 높은 메시지를 먼저 전송한다.
  5. Bus Load가 높아지면 낮은 우선순위 메시지가 지연될 수 있으므로 네트워크 설계와 검증에서 반드시 관리해야 한다.

확인 질문

  1. 같은 CAN 버스에서 ECU마다 Baud Rate가 다르면 어떤 일이 생기는가?
  2. CAN ID 값이 작을수록 우선순위가 높은 이유는 무엇인가?
  3. Arbitration에서 패배한 ECU는 왜 자신이 졌다는 것을 알 수 있는가?
  4. Bus Load를 낮추기 위해 메시지 주기를 늘리면 어떤 trade-off가 생기는가?