LIN — 한 가닥으로 싸게, 느리게
창문 스위치 하나에 CAN 을 깔면 비싸다. 선 한 가닥, 크리스털 없는 슬레이브, 20kbit/s 로 충분한 곳을 위해 만들어진 버스가 LIN 이다.
CAN 을 이해했다면 LIN 은 "무엇을 포기해서 싸졌는가" 로 읽으면 빠르다.
왜 존재하나
CAN 두 가닥 차동 · 트랜시버 · 크리스털 필요 · 노드당 원가가 있다
LIN 한 가닥 · 12V 그대로 · 슬레이브는 크리스털도 필요 없다
한 대의 차에 스위치·모터·센서가 수십 개다. 전부 CAN 으로 묶으면 배선과 부품값이 감당이 안 된다. 그래서 급하지 않은 것들을 LIN 으로 내리고, LIN 마스터가 CAN 에 붙어 게이트웨이 역할을 한다.
CAN 백본 ──── 도어 ECU(LIN 마스터) ──┬── 창문 모터
├── 미러 조절
└── 스위치 패널
실제로 창문·와이퍼·시트·미러·공조·실내등이 대표적인 LIN 영역이다.
전기 규격 — 몇 볼트인가
12V 계열 그대로 쓴다. 별도 전압을 만들지 않는 것이 원가 절감의 핵심이다.
버스 유휴(열성, 1) VBAT 근처까지 풀업된다 12V 계
버스 활성(우성, 0) GND 근처로 끌어내린다
동작 전압 범위 약 9V ~ 18V
임계값이 송신과 수신에서 다르다
수신 노드 > 60% VBAT → 1 로 읽는다
< 40% VBAT → 0 으로 읽는다
송신 노드 > 80% VBAT → 1 을 냈다고 인정
< 20% VBAT → 0 을 냈다고 인정
송신 쪽 기준이 더 엄격하다. 보내는 쪽이 여유를 두고 만들어야 배선 저항·노이즈로 값이 밀려도 받는 쪽이 옳게 읽는다. 노이즈 마진을 규격에 못 박아 둔 것이다.
풀업이 마스터와 슬레이브에서 다르다
마스터 외부 저항 + 다이오드를 VBAT 와 LIN 사이에 직렬로 보통 1kΩ
슬레이브 트랜시버에 내장된 종단 저항 30kΩ
TJA1021 계열 데이터시트가 "responder(슬레이브)용 종단 저항 내장, commander(마스터)에는 외부 저항과 다이오드를 달라" 고 명시한다. 다이오드는 역전압 보호용이다 — 배터리가 빠지거나 전압이 역전돼도 버스를 통해 전류가 거꾸로 흐르지 않게 한다.
버스가 안 되면 여기부터 본다 — 마스터 풀업이 빠져 있으면 버스가 열성으로 못 올라와 아무것도 통신되지 않는다. 슬레이브만 여럿 붙여 놓고 마스터 풀업을 잊는 것이 전형적인 실수다.
속도와 규모
보율 1 ~ 20 kbit/s (보통 9.6k · 19.2k 를 쓴다)
노드 수 마스터 1 + 슬레이브 최대 15 = 16
버스 길이 보통 40m 이내
왜 20kbit/s 가 상한인가 — 한 가닥 선이 12V 를 오르내리면 가장자리가 완만해야 EMI 가 줄어든다. 빠르게 만들면 방사가 커지고, 그러면 원가를 아끼려고 만든 버스가 EMC 대책 비용을 부른다.
프레임 구조
마스터가 헤더를 보내고, 지정된 슬레이브가 응답을 채운다.
[ 마스터가 보낸다 ─────────────][ 슬레이브가 보낸다 ────────]
Break Sync Protected ID Data 2~8 byte Checksum
| 필드 | 내용 |
|---|---|
| Break | 최소 13비트 + 1 의 우성 구간. "지금부터 새 프레임" 을 알린다 |
| Sync | 고정값 0x55 — 0101_0101 이라 에지가 규칙적이다 |
| Protected ID | 식별자 6비트(64종) + 패리티 2비트 |
| Data | 2·4·8 바이트. ID 범위가 길이를 정한다 |
| Checksum | classic 은 데이터만, enhanced 는 PID 까지 포함한다 |
Sync 가 0x55 인 이유 — 여기가 LIN 의 묘수다
0x55 는 0과 1이 번갈아 나오는 값이라 에지 간격이 곧 1비트 시간이다.
슬레이브는 이 구간을 측정해 자기 보율을 그 자리에서 맞춘다.
슬레이브가 내부 RC 발진기를 써도 된다 → 크리스털이 필요 없다 → 부품값이 준다
UART 는 양쪽이 미리 같은 보율을 알고 있어야 하는데, LIN 은 매 프레임 앞에서 보율을 다시 알려 주는 셈이다. 이 한 가지가 슬레이브 원가를 크게 낮췄다.
체크섬 두 종류를 조심한다
classic 데이터 바이트만 합산 LIN 1.x
enhanced PID 를 포함해 합산 LIN 2.x
마스터와 슬레이브가 서로 다른 방식을 쓰면 모든 프레임이 체크섬 오류로 버려진다. 진단용 ID(0x3C·0x3D)는 규격상 항상 classic 을 쓴다 — 섞여 있는 것이 정상이라 헷갈리기 쉽다.
충돌이 없는 이유 — 스케줄 테이블
CAN 은 아무나 말하고 중재로 가린다. LIN 은 아무도 스스로 말하지 않는다.
마스터의 스케줄 테이블
0ms ID 0x10 헤더 → 창문 스위치가 응답
10ms ID 0x11 헤더 → 미러 위치가 응답
20ms ID 0x12 헤더 → 마스터 자신이 명령을 실어 보냄
…반복
- 충돌이 원천적으로 없다 → 중재 회로가 필요 없다 → 싸다
- 지연이 완전히 예측된다 → 어느 신호가 언제 갱신될지 표에 적혀 있다
- 대신 슬레이브가 급한 일을 즉시 알릴 수 없다 — 자기 차례를 기다려야 한다
급한 이벤트가 필요하면 마스터가 그 슬롯을 자주 배치하거나, 여러 슬레이브가 같은 슬롯을 나눠 쓰는 이벤트 트리거 프레임을 쓴다(충돌하면 마스터가 개별 조회로 전환한다).
설정은 파일로 관리한다
LDF(LIN Description File)에 노드·신호·스케줄이 적혀 있고, 도구가 그것으로 드라이버 설정을 만든다. 통신 매트릭스가 문서로 존재한다는 점이 CAN 의 DBC 와 같은 발상이다.
절전 — 차가 잠들 때
슬립 진입 마스터가 sleep 명령을 보내거나, 버스가 4초 이상 조용하면 슬레이브가 스스로 잔다
웨이크업 누구든 우성 펄스를 만들면 깨어난다 (250µs ~ 5ms)
트랜시버는 슬립 상태에서 수십 µA 수준까지 내려간다. 주차 중에도 배터리를 갉아먹지 않아야 하므로, 자동차 버스에서 절전은 선택이 아니라 요구사항이다.
로컬 웨이크업(핀 입력)과 리모트 웨이크업(버스)을 구분해 보고해 주는 트랜시버도 있다 — "무엇이 차를 깨웠나" 를 추적할 수 있어야 하기 때문이다.
CAN 과 나란히 놓고 보기
| CAN | LIN | |
|---|---|---|
| 배선 | 두 가닥 차동 + 종단 120Ω 둘 | 한 가닥 + 마스터 풀업 |
| 전압 | 차동 2V 폭(3.5V/1.5V) | 12V 계 그대로 |
| 속도 | 500kbit/s ~ 8Mbit/s(FD) | ≤ 20kbit/s |
| 접근 | 다중 마스터 · 중재 | 단일 마스터 · 스케줄 |
| 클럭 | 노드마다 정확한 클럭 필요 | 슬레이브는 Sync 로 보정 |
| 오류 처리 | 오류 카운터 · 버스 오프 | 체크섬 · 응답 타임아웃 |
| 쓰임 | 파워트레인 · 섀시 · 안전 | 바디 · 편의 장치 |
"왜 둘 다 쓰나" 에 대한 답은 원가다. 안전과 속도가 필요한 곳에 CAN, 그렇지 않은 곳에 LIN.
실무에서 데는 곳
마스터 풀업 누락 버스가 열성으로 안 올라온다 → 통신 전무
체크섬 방식 불일치 모든 프레임이 오류로 버려진다
보율 오차 슬레이브 내부 RC 가 크게 틀어지면 Sync 보정으로도 못 맞춘다
브레이크를 UART 로 못 만든다 일반 UART 로 13비트 우성을 만들려면 보율을 잠깐 낮추는 요령이 필요하다
접지 차이 마스터와 슬레이브의 GND 전위가 다르면 임계값이 밀린다
슬립 중 깨어남 반복 잡음이 웨이크업으로 오인되면 배터리를 먹는다
**브레이크 필드 만들기**가 초보에게 특히 걸린다. MCU 에 LIN 전용 하드웨어가 있으면 한 비트로 해결되지만,
없으면 보율을 일시적으로 낮춰 0x00 을 보내는 식으로 13비트 이상의 우성 구간을 만든다.
S32K 계열은 LPUART 가 LIN 모드를 지원해 브레이크 생성·검출을 하드웨어가 처리한다.
확인하는 법
① 전원 끄고 마스터 풀업 저항 측정 1kΩ 근처인지
② 오실로스코프로 버스 파형 유휴에서 VBAT 근처인지, 우성에서 GND 근처인지
③ Sync 구간의 에지 간격 한 비트 시간이 설정 보율과 맞는지
④ 로직 분석기의 LIN 디코더 필드가 규격대로 잘리는지
⑤ 응답이 없으면 슬레이브 전원·주소 PID 를 잘못 잡으면 아무도 응답하지 않는다
한눈에 정리
- LIN 은 원가를 위해 성능을 포기한 버스다 — 한 가닥·12V·20kbit/s·마스터 1 + 슬레이브 15
- 전압 임계는 수신 40/60%, 송신 20/80% 로 다르고, 송신 쪽이 더 엄격하다
- 풀업은 마스터 1kΩ + 다이오드, 슬레이브는 트랜시버 내장 30kΩ
- 프레임은 Break(13+1) → Sync(0x55) → PID(6+2) → Data(2~8) → Checksum
0x55덕분에 슬레이브가 크리스털 없이 보율을 맞춘다 — LIN 원가 절감의 핵심- 충돌이 없는 이유는 스케줄 테이블 — 마스터만 말을 걸고 지연이 예측된다
- 체크섬 classic/enhanced 불일치와 마스터 풀업 누락이 실무 단골 사고다
꼬리질문 대비
- "LIN 을 CAN 대신 쓰는 이유는?" → 선 하나·트랜시버 저가·마스터 슬레이브 단순 구조 — 창문·시트처럼 느린 제어에 충분
- "LIN 에 중재가 없어도 충돌이 안 나는 이유는?" → 마스터가 스케줄 테이블대로 헤더를 내고 지정된 슬레이브만 응답한다
- "클래식과 확장 체크섬의 차이는?" → 확장은 PID 까지 포함해 계산한다 — 섞이면 통신이 안 되므로 노드 간 합의가 필요
출처 — NXP TJA1021 LIN 트랜시버 데이터시트 · NXP AH1103 — LIN 트랜시버 응용 노트 · CSS Electronics — LIN Bus 기초 · Microchip — LIN Physical Layer · ISO 17987 (LIN 2.x 표준화)