FlexRay는 CAN의 대역폭·결정론 한계를 넘어서기 위해 설계된 자동차용 버스 프로토콜로, 최대 10 Mbit/s의 대역폭과 프레임당 최대 254바이트의 페이로드를 지원한다[1] — 다른 자동차 버스와의 대역폭·응용 도메인 비교는 Bus Classification에서 다룬다. CAN의 이벤트 구동 중재는 우선순위가 낮은 메시지의 지연을 예측할 수 없게 만드는 반면, FlexRay는 각 노드에 고정 슬롯을 배정하는 시간 동기(TDMA) 방식으로 이 문제를 해결한다 — 이 접근 메커니즘 자체는 Bus Access에서 다룬다.
통신 사이클
반복되는 통신 사이클(communication cycle)은 정적 세그먼트(static segment)와 네트워크 유휴 시간(NIT, Network Idle Time)을 항상 포함하고, 동적 세그먼트(dynamic segment)와 심볼 윈도우(symbol window)는 선택적으로 구성할 수 있다[1].
정적 세그먼트는 통신 사이클마다 반복되는 고정 길이 슬롯으로 구성되며, 슬롯 배정과 접근 규칙은 Bus Access에서 다룬 시간 동기 방식을 따른다. 동적 세그먼트는 미니슬롯(minislot) 단위로 쪼개져 프레임 ID가 낮은 노드부터 순서대로 미니슬롯을 차지한다 — 해당 미니슬롯에 보낼 데이터가 있는 노드는 그 미니슬롯을 프레임 전송 구간으로 확장하고, 없으면 미니슬롯이 그대로 지나간다. 이 덕분에 정적 세그먼트의 결정론을 해치지 않으면서도 이벤트 기반의 유연성을 더한다[1].
심볼 윈도우는 CAS(Collision Avoidance Symbol)·MTS(Media Access Test Symbol) 같은 관리용 심볼을 중재 없이 전송하는 구간이고, NIT는 위 세 구간에 할당되지 않은 나머지 시간으로 각 노드가 클록 동기화 오차를 보정하는 데 쓰인다[1].
프레임 포맷
FlexRay 프레임은 Header Segment(5바이트)·Payload Segment(0~254바이트)·Trailer Segment(24비트 CRC)로 구성된다[1].
| 필드 | 크기 | 의미 |
|---|---|---|
| Frame ID | 11비트 | 프레임의 슬롯 번호 |
| Payload length | 7비트 | Payload Segment 길이(2바이트 워드 단위) |
| Header CRC | 11비트 | Header Segment 오류 검출용 CRC |
| Cycle count | 6비트 | 현재 통신 사이클 번호 |
Frame ID는 정적 세그먼트에서 그 프레임이 차지하는 슬롯 번호와 그대로 대응한다[1].
노드와 이중 채널
FlexRay 노드는 애플리케이션을 실행하는 Host, 프로토콜을 처리하는 Communication Controller, 채널의 논리 신호를 물리 신호로 변환하는 Bus Driver로 구성되고, 여기에 정해진 슬롯 밖에서 노드가 송신하지 못하도록 막는 선택적 요소인 Bus Guardian이 더해질 수 있다[1].
FlexRay는 물리적으로 독립된 두 채널(Channel A·Channel B)을 지원해 한 채널에 결함이 생겨도 다른 채널로 통신을 유지할 수 있다 — X-by-Wire처럼 단일 결함으로 시스템이 멈추면 안 되는 응용에서 요구되는 이중화다[1]. 채널이 지원하는 물리 토폴로지(버스·액티브 스타·혼합)는 Bus Networking에서 다룬다.
Example
FlexRay를 최초로 양산 적용한 차량은 2006년형 BMW X5로, 섀시 도메인의 파일럿 응용으로 도입돼 능동 롤 안정화와 전자식 댐핑 제어를 결합한 AdaptiveDrive의 모든 기능을 조율했다[2].