CAN 동기화(Synchronization) — CAN 수신자가 송신자와 같은 시간 기준으로 비트를 샘플링하도록 유지하는 메커니즘. 초기 동기화로 프레임 시작 시점을 맞추고, 프레임 전송 중에는 신호 에지를 이용해 수신자 타이밍을 지속적으로 재조정한다.
왜 필요한가
- CAN 프레임을 올바르게 수신하려면 수신자가 프레임 시작 시점과 비트 duration을 알아야 한다.
- Baud rate가 네트워크 내 모든 노드에서 동일하게 설정되므로 비트 duration은 이론적으로 공유되지만, 각 노드의 크리스탈에는 부정확성이 있어 실제 속도가 상이.
- 최대 5 비트 시간까지 동일 값이 연속될 수 있어 (스터핑 5+1 규칙의 상한), 수신자는 이 구간 동안 자체 타이밍 검증 수단이 없다.
- 보정이 없으면 Tx/Rx 노드 간 드리프트가 누적되어 비트 에러로 이어짐.
비동기 전송과 클럭 드리프트
- CAN은 공통 클럭 선이 없는 비동기 전송(직렬 통신과 병렬 통신) → 송·수신자가 각자의 로컬 클럭을 사용.
- Clock Drift: 크리스탈 오차로 인해 장시간 반복 시 파형이 점진적으로 어긋나는 현상.
- 예: 동일 주기 신호를 42 초 후 측정하면 초기 대비 파형이 어긋남.
- 해결: CAN은 프레임 내 falling edge마다 재동기화를 수행해 드리프트를 상시 보정.
Clock Synchronization 분류
| 유형 | 목적 |
|---|---|
| Offset Correction | 클럭의 시작 시점 일치 |
| Rate Correction | 클럭 주파수 일치 |
CAN의 Hard Synchronization은 Offset Correction에 해당 (SOF 에지로 Bit time 재시작), Bit Re-synchronization은 Rate Correction에 해당 (SJW로 TSEG 길이 조정).
동기화의 두 유형
| 유형 | 시점 | 기준 에지 | 분류 |
|---|---|---|---|
| Initial / Hard Synchronization | 프레임 시작 | bus idle의 recessive → SOF의 dominant (1 → 0 falling edge) | Offset Correction |
| Bit Re-synchronization | 프레임 진행 중 | 프레임 내 모든 falling edge (stuff bit도 포함) | Rate Correction |
- Hard Sync: SOF 수신 시 내부 Bit time을 SYNC_SEG 시점에 강제로 재시작. 모든 노드가 동일한 기준점으로 cyclic bit-duration timer 가동.
- Bit Re-sync: 프레임 내 변화 에지에서 SJW(Synchronization Jump Width) 설정만큼 SEG1 / SEG2의 길이를 조정 → 수신자 비트 시간을 송신자 비트 시간에 맞춰 단축(shortening) 또는 연장(prolongation) 재보정.
- 가능한 한 자주 동기화를 확인. 비트 스터핑이 프레임 비트 스트림 내에 추가 falling edge를 보장.
위상 에러 () 판별
수신 노드는 버스 에지를 자신의 내부 Bit Time과 비교해 위상 에러 를 계산.
| 의미 | |
|---|---|
| 비트 길이 일치 (동기 유지) | |
| 수신자 Bit Time이 짧음 (수신 클럭 빠름) | |
| 수신자 Bit Time이 김 (수신 클럭 느림) |
위상 에러만큼 PHASE_SEG 길이를 조정해 보정 (최대 SJW 범위 내).
Nominal Bit Time 구조
Nominal Bit Time: 설계자가 네트워크의 비트 타임에 명목상 할당하기 원하는 값. 1 비트 전송을 위한 Bit Time은 4개 Segment로 구성.
| 세그먼트 | 길이 | 역할 |
|---|---|---|
| SYNC_SEG | 1 (고정) | 버스 노드 동기화. 수신자가 송신자와 동기 상태면 이 구간 안에 에지가 관찰됨 |
| PROP_SEG | 가변 | 신호 전파 지연(배선 + 트랜시버) 보정 |
| PHASE_SEG1 | 가변 | Edge phase error 보정 (연장 가능, 수신 클럭이 빠를 때) |
| PHASE_SEG2 | ≥ 2 | 후속 비트 레벨 계산용 (단축 가능, 수신 클럭이 느릴 때) |
- Sampling Point: PHASE_SEG1과 PHASE_SEG2의 경계 — 이 시점에 비트 값(0/1)을 결정.
- (Time Quantum): Bit time을 구성하는 최소 시간 단위.
Note
구현에 따라 PROP_SEG와 PHASE_SEG1을 합쳐 TSEG_1, PHASE_SEG2를 TSEG_2로 표기하기도 한다 (TC275 등). 논리적 구조는 동일.
동기 판정
- 에지가 SYNC_SEG 안에 수신되면 동기 상태.
- 에지가 너무 일찍 도착하면 → 수신자 클럭이 느림 → TSEG_1 연장 또는 다음 비트의 TSEG_2 조정으로 보정.
- 에지가 너무 늦게 도착하면 → 수신자 클럭이 빠름 → TSEG_1 혹은 현재 비트의 TSEG_2 단축.
Propagation Delay
가장 멀리 있는 두 노드 간 신호가 왕복하는 데 걸리는 시간. CAN 중재와 ACK 구간에서 왕복이 1 비트 시간 내에 끝나야 한다.
— 전송 매체 지연
- 꼬임쌍선 UTP: = 5 ns/m.
- 1 µs 동안 200 m, 0.5 µs 동안 100 m 이동.
— 전자 부품 지연 (약 100 ns)
- , : CAN Controller Bit 송수신 처리 시간.
- , : CAN Transceiver의 데이터 변환 시간.
- : 실제 신호 인식 시간 (히스테리시스, 인덕턴스·커패시턴스 의존).
대표 트랜시버 타이밍
| 항목 | MIN | TYP | MAX | 단위 |
|---|---|---|---|---|
| TXD → Bus active | 25 | 55 | 110 | ns |
| TXD → Bus inactive | 25 | 60 | 95 | ns |
| Bus active → RXD | 20 | 50 | 110 | ns |
| Bus inactive → RXD | 45 | 95 | 155 | ns |
| TXD dominant time-out | 250 | 450 | 750 | µs |
| propagation (TXD→RXD) | — | — | 250 | ns |
PROP_SEG 최소 시간
송신→수신 왕복을 1 비트 시간 내에 수용하려면:
100 m 구리선 예시: .
Data Rate vs Bus Length
중재·ACK 구간의 왕복 지연을 수용해야 하므로 버스 길이가 길수록 Baud rate 상한이 낮아진다.
| Bit rate | 최대 버스 길이 |
|---|---|
| 1 Mbit/s (HS) | 40 m |
| 500 kbit/s | 130 m |
| 250 kbit/s | 270 m |
| 125 kbit/s | 530 m |
| 100 kbit/s | 620 m |
| 50 kbit/s | 1.3 km |
| 10 kbit/s | 6.7 km |
| 5 kbit/s | 10 km |
- 반대로 주어진 Baud rate에서 허용 가능한 최대 길이도 결정됨.
- 이 제약은 CAN FD에서 페이로드 구간만 Baud rate를 올리는 BRS(Bit Rate Switch) 도입의 직접적 근거.
버스 길이 제약 조건
하나의 Bit Time 내에 두 노드가 서로의 비트를 인식할 수 있어야 한다:
- Arbitration Phase — 모든 노드가 서로의 전송 비트 값을 비교 가능해야 함.
- Acknowledge Phase — 송신자는 수신자의 ACK 신호를 1 비트 시간 내에 수신해야 함.
버스 길이가 과도하면 Propagation delay가 커져 Sampling Point가 어긋나고 Error 또는 Arbitration 실패 발생.
TC275 CAN 통신 속도 설정 예시
Infineon TC275 MCU의 CAN_NBTRx 레지스터는 비트 타이밍을 필드로 구성.
| 필드 | 역할 |
|---|---|
| BRP | Baud Rate Prescaler (5:0) |
| DIV8 | Prescaler 8배수 선택 (0: / 1: ) |
| TSEG1 | Sample 전 세그먼트 길이 (= PROP_SEG + PHASE_SEG1) |
| TSEG2 | Sample 후 세그먼트 길이 (= PHASE_SEG2) |
| SJW | Re-sync Jump Width (조정 가능한 최대 수) |
예시: , DIV8=0, TSEG1=14, TSEG2=3, BRP=9
- .
- .
- .
- .
- Bit time = → 500 kbps.
- Sampling Point = .
Multiple Transmissions during Bit Time
송신 비트가 수신자에 도달하기까지 전파·전자적 지연이 누적된다.
- 단일 송신자만 있는 구간(일반 페이로드 전송)에서는 지연이 문제되지 않는다.
- 그러나 중재(Identifier + RTR)와 ACK 비트는 여러 송신자가 동시에 비트를 버스에 구동한다.
ACK 비트의 왕복 예시
- 노드 A가 recessive ACK 비트 송신.
- 노드 B·C가 이를 수신 후 dominant ACK을 버스에 구동 → A에게 다시 돌아옴.
- A가 관찰하는 ACK 비트의 총 지연 = 2 × 전자 지연 + 2 × 버스 전파 지연.
- 따라서 노드들은 비트 시간 내 다소 늦은 시점에서 비트 값을 샘플링 → 긴 버스·느린 전자 회로일수록 샘플 포인트가 뒤로 밀림.