CAN 한 프레임이 8바이트라서 생긴 계층이다. 진단 데이터는 그보다 훨씬 길다.
프레임 네 종류
첫 바이트의 상위 니블로 구분한다.
| 종류 | 니블 | 역할 |
|---|---|---|
| Single Frame | 0 | 7바이트 이하 — 한 번에 |
| First Frame | 1 | 전체 길이 선언 + 첫 조각 |
| Consecutive Frame | 2 | 순번(0~15 순환)과 함께 이어 보냄 |
| Flow Control | 3 | 수신 측이 속도를 지정 |
흐름
송신 ──FF(전체 길이)──►
◄──FC(BS, STmin)── 수신 "한 번에 BS개까지, 간격은 STmin 이상"
──CF #1──►
──CF #2──►
◄──FC── BS개를 다 보내면 다시 허락을 받는다
- BS(Block Size) — 연속으로 보낼 수 있는 프레임 수
- STmin — 프레임 사이 최소 간격
왜 수신이 속도를 정하나
받는 쪽 버퍼와 처리 속도가 더 느릴 수 있기 때문이다. 저성능 ECU가 고성능 진단기에 밀려 데이터를 흘리는 일을 막는 흐름 제어다. TCP의 수신 윈도가 하는 일과 같은 발상이지만, 훨씬 단순하고 지연이 예측 가능하다.
순번이 있는 이유
CF의 0~15 순환 번호로 유실과 순서 뒤바뀜을 감지한다. CAN 자체는 프레임 재전송을 하드웨어가 처리하지만, 조각의 논리적 순서까지는 책임지지 않는다.
CAN FD여도 필요하다
FD의 64바이트도 진단 데이터에는 부족하다. 조각 수가 줄어들 뿐 계층은 그대로 쓴다.