00 FlexRay nedir?
FlexRay, BMW, DaimlerChrysler, Philips Semiconductors ve Freescale Semiconductor tarafından 2000'li yılların başında geliştirilen yüksek hızlı, deterministik otomotiv ve savunma veri bus standardıdır. ISO 17458 olarak standardize edilmiştir.
CAN (Controller Area Network) protokolünün non-deterministik CSMA/CA arbitration mekanizması, sürücüsüz araç, steer-by-wire ve aktif süspansiyon gibi güvenlik kritik uygulamalarda yeterli determinizm sağlayamıyordu. FlexRay'in TDMA (Time-Division Multiple Access) tabanlı statik segmenti, bu sorunu çözmek üzere tasarlanmıştır.
| Platform | Kullanım alanı | Yıl |
|---|---|---|
| BMW X5 (E70) | Aktif süspansiyon (VDC), dinamik damper kontrolü | 2007 |
| BMW iDrive (5. nesil) | Merkezi sürücü bilgi sistemi veri bus'ı | 2008 |
| Audi A8 (D4) | Chassis domain, aktif roll stabilizasyonu | 2010 |
| Mercedes-Benz S-Klasse (W222) | Magic Body Control aktif süspansiyon | 2013 |
| Airbus A350 XWB | Bazı sayısal ikiz ve sistemleri (test/doğrulama) | 2014 |
| Boxer IFV (Bundeswehr) | Araç yönetim sistemi haberleşmesi | 2009 |
| Toyota FCV / Lexus LS | Güvenlik kritik chassis domain | 2015+ |
CAN, LIN, MOST ve FlexRay karşılaştırması
| Özellik | CAN | LIN | FlexRay | MOST |
|---|---|---|---|---|
| Hız | 1 Mbps | 20 kbps | 10 Mbps | 150 Mbps |
| Arbitration | CSMA/CA | Master/Slave | TDMA+FTDMA | MOST frame |
| Determinizm | Kısmi | Yüksek | Tam (statik) | Yüksek |
| Redundancy | Yok | Yok | 2 kanal | Ring |
| Tipik kullanım | Powertrain, body | Sensörler, aktüatörler | Chassis, ADAS | Infotainment |
| ISO standart | ISO 11898 | ISO 17987 | ISO 17458 | MOST150 |
Boxer IFV (Infantry Fighting Vehicle), Almanya ve Hollanda kara kuvvetlerinin kullandığı modüler zırhlı araçtır. Araç yönetim sistemindeki FlexRay ağı, motor yönetimi, silah sistemi ve hareket platformu arasında deterministik iletişim sağlar. CAN'ın CSMA arbitration kaynaklı non-determinizmi, gerçek zamanlı silah nişangah kontrolü için uygun değildi.
01 Fiziksel katman
FlexRay, iki bağımsız kanal (Channel A ve Channel B) üzerinden diferansiyel sinyal iletimi kullanır. Her iki kanal da bağımsız çalışabilir ve bağımsız arızalar tolere edilebilir.
Sinyal seviyeleri ve kablo özellikleri
FlexRay Diferansiyel Sinyal:
BP (Bus Plus) : ─────╮ ╭───── ╭─────
╰─────╯ ╰─────
BM (Bus Minus): ─────╯ ╰───── ╰─────
Idle (recessive): BP ≈ BM ≈ 2.5V (diferansiyel ≈ 0V)
Data_1 (dominant): BP ≈ 3.5V, BM ≈ 1.5V (diferansiyel ≈ +2V)
Data_0 (dominant): BP ≈ 1.5V, BM ≈ 3.5V (diferansiyel ≈ -2V)
| Parametre | Değer | Açıklama |
|---|---|---|
| Veri hızı | 2,5 / 5 / 10 Mbps | Cluster tasarımında sabit seçilir |
| Kanal sayısı | 2 (A ve B) | Her ikisi de bağımsız çalışır |
| Topoloji | Pasif star / aktif star / bus | Uygulama mimarisine bağlı |
| Kablo empedansı | 80–110 Ω | Shielded twisted pair önerilir |
| Terminasyon | Her uçta 80–110 Ω | Sonlandırma direnci zorunlu |
| Maks. node sayısı | 22 (pasif) / 64+ (aktif star) | Aktif star ile ölçeklenebilir |
| Maks. kablo uzunluğu | 24 m (aktif star ile daha fazla) | Sinyal attenüasyonu sınırlar |
Bus Guardian IC
FlexRay'in güvenlik mimarisinin kritik unsuru Bus Guardian IC'dir. Her ECU'nun FlexRay transksiyveri önünde bir Bus Guardian bulunur ve ECU'nun yalnızca kendisine ayrılan TDMA zaman diliminde (slot) bus'a erişmesini donanım seviyesinde zorlar.
02 Communication cycle yapısı
FlexRay iletişimi tekrarlanan "communication cycle" birimlerine bölünmüştür. Her döngü dört segment içerir: static, dynamic, symbol window ve network idle time (NIT).
FlexRay Communication Cycle (tipik 5 ms veya 10 ms):
┌────────────────────────────┬────────────┬────────┬─────┐
│ STATIC SEGMENT │ DYNAMIC │ SYMBOL │ NIT │
│ (TDMA slotları) │ SEGMENT │ WINDOW │ │
│ Slot 1│ Slot 2│ ... │Slot N│ (FTDMA) │ │ │
└────────┴────────┴─────┴─────┴────────────┴────────┴─────┘
←── deterministik ──→←── event-triggered ──→
Her segment kendi zamanlama garantileriyle çalışır.
Static Segment (TDMA)
Static segment, önceden belirlenmiş sabit boyutlu zaman dilimlerinden (slot) oluşur. Her slot belirli bir ECU'ya atanmıştır. Aktif süspansiyon gibi kritik sistemler için bu segment kullanılır: örneğin BMW X5'te süspansiyon sensör verileri her döngünün aynı statik slotunda iletilir.
Dynamic Segment (FTDMA)
Dynamic segment, olay-tetiklemeli (event-triggered) mesajlar içindir. Minislot adı verilen küçük zaman birimlerine bölünmüştür. Bir ECU mesaj göndermek istediğinde bir sonraki minislot'ta başlar — bu CAN arbitration'a benzer ancak bant genişliği daha belirli sınırlar içindedir.
Symbol Window ve NIT
03 Frame yapısı
FlexRay frame üç bölümden oluşur: header, payload ve trailer. Toplam frame boyutu 5–254 bayt payload içerebilir.
FlexRay Frame:
┌──────────────────────────────┬────────────────────────┬─────────────┐
│ HEADER (5 byte) │ PAYLOAD (0–254 byte) │ TRAILER (3b)│
└──────────────────────────────┴────────────────────────┴─────────────┘
Header yapısı (40 bit = 5 byte):
┌──┬──┬──┬──┬──┬──────────────┬────────────────┬──────────────────────┐
│Re│PP│NF│Sy│St│ Frame ID │ Payload Length │ Header CRC (11b) │
│sv│ │ │nc│up│ (11 bit) │ (7 bit) │ │
└──┴──┴──┴──┴──┴──────────────┴────────────────┴──────────────────────┘
1b 1b 1b 1b 1b 11b 7b 11b
+ Cycle Count (6b) — tekrarlama kontrolü için
Header flag'leri
| Bit | İsim | Açıklama |
|---|---|---|
| Reserved (R) | Rezerv | Her zaman 0 — ileride kullanım için ayrılmış |
| Payload Preamble (PP) | Payload Preamble Indicator | 1 = Payload'ın başında Network Management Vector veya Message ID var |
| Null Frame (NF) | Null Frame Indicator | 0 = Geçerli veri yok (slot boş ama koruyucu amaçlı gönderildi) |
| Sync Frame (Sy) | Sync Frame Indicator | 1 = Bu frame cluster senkronizasyon referansı olarak kullanılır |
| Startup Frame (St) | Startup Frame Indicator | 1 = Bu frame cluster başlatma sürecinde kullanılır |
| Frame ID | Slot tanımlayıcısı | 1–2047 arası — hangi slota ait olduğunu belirtir |
| Payload Length | Payload uzunluğu | 2-byte word sayısı cinsinden (0–127 → 0–254 byte) |
| Header CRC | Header bütünlük kodu | 11-bit CRC (Sync, Startup, Frame ID, Payload Length üzerinden) |
| Cycle Count | Döngü sayacı | 0–63 arası — cycle counter. Tekrarlama filtresi için kullanılır. |
Trailer (Frame CRC)
3 byte (24 bit) Frame CRC, header ve payload'ın bütünlüğünü doğrular. Üretecisi CRC24Q polinomu (0xB2B117) kullanır. Herhangi bir bit hatası bu kontrol toplamıyla tespit edilir.
import struct
def parse_flexray_header(header_5bytes: bytes) -> dict:
"""5-byte FlexRay header'ı parse et"""
assert len(header_5bytes) == 5
# Tüm 40 biti integer'a dönüştür
val = int.from_bytes(header_5bytes, byteorder='big')
reserved = (val >> 39) & 1
pp = (val >> 38) & 1
nf = (val >> 37) & 1
sync = (val >> 36) & 1
startup = (val >> 35) & 1
frame_id = (val >> 24) & 0x7FF # 11 bit
payload_len= (val >> 17) & 0x7F # 7 bit (word sayisi)
header_crc = (val >> 6) & 0x7FF # 11 bit
cycle_cnt = val & 0x3F # 6 bit
return {
"frame_id" : frame_id,
"payload_words": payload_len,
"payload_bytes": payload_len * 2,
"cycle_count" : cycle_cnt,
"sync" : bool(sync),
"startup" : bool(startup),
"null_frame" : not bool(nf),
"payload_preamble": bool(pp),
"header_crc" : header_crc,
}
# Ornek header: Frame ID=5, 4 word payload, cycle=12, sync frame
example_hdr = bytes([0x10, 0x05, 0x04, 0x00, 0x0C])
info = parse_flexray_header(example_hdr)
for k, v in info.items():
print(f" {k}: {v}")
04 Cluster konfigürasyonu
FlexRay cluster'ı (ağı) çalışabilir hale getirmek için tüm ECU'ların üzerinde mutabık kaldığı bir dizi global parametre tanımlanmalıdır. Bu konfigürasyon FIBEX XML formatında dağıtılır.
Temel cluster parametreleri
| Parametre | Örnek değer | Açıklama |
|---|---|---|
| gdCycle | 5000 µs | Communication cycle süresi |
| gNumberOfStaticSlots | 40 | Statik segment slot sayısı |
| gdStaticSlot | 100 µs | Tek statik slot süresi |
| gdMinislot | 25 µs | Dinamik segment minislot süresi |
| gNumberOfMinislots | 20 | Dinamik segment minislot sayısı |
| gdSymbolWindow | 50 µs | Symbol window süresi |
| gdNIT | 500 µs | Network idle time süresi |
| gdBit | 100 ns | Bit süresi (10 Mbps için) |
| gClusterDriftDamping | 2 | Saat senkronizasyon damping faktörü |
FIBEX (Field Bus Exchange Format) XML
FIBEX, FlexRay cluster tanımını XML formatında ifade eden ASAM standardıdır. Tüm slot atamaları, ECU node özellikleri ve zamanlama parametreleri bu dosyada tanımlanır.
<!-- FlexRay Cluster FIBEX tanımı (kısaltılmış) -->
<fx:CLUSTER id="C_FlexRay_1">
<fx:PROTOCOL>FLEXRAY</fx:PROTOCOL>
<fx:BAUDRATE>10000000</fx:BAUDRATE> <!-- 10 Mbps -->
<fx:TIMING>
<fx:CYCLE-LENGTH>5000</fx:CYCLE-LENGTH> <!-- 5 ms -->
<fx:STATIC-SLOTS>40</fx:STATIC-SLOTS>
<fx:STATIC-SLOT-LENGTH>100</fx:STATIC-SLOT-LENGTH> <!-- 100 µs -->
<fx:MINISLOT-LENGTH>25</fx:MINISLOT-LENGTH>
<fx:NUMBER-OF-MINISLOTS>20</fx:NUMBER-OF-MINISLOTS>
</fx:TIMING>
<fx:CHANNEL-A>active-star</fx:CHANNEL-A>
<fx:CHANNEL-B>active-star</fx:CHANNEL-B>
</fx:CLUSTER>
<!-- ECU Tanımı: Süspansiyon Kontrol Modülü -->
<fx:ECU id="ECU_SuspensionCtrl">
<fx:NODE>
<fx:STATIC-SLOT-ASSIGNMENT>
<fx:SLOT-ID>5</fx:SLOT-ID> <!-- Slot 5: CH A+B -->
<fx:CHANNEL>A_AND_B</fx:CHANNEL>
</fx:STATIC-SLOT-ASSIGNMENT>
<fx:STATIC-SLOT-ASSIGNMENT>
<fx:SLOT-ID>6</fx:SLOT-ID> <!-- Slot 6: sadece CH A -->
<fx:CHANNEL>A</fx:CHANNEL>
</fx:STATIC-SLOT-ASSIGNMENT>
</fx:NODE>
</fx:ECU>
<!-- Frame tanımı -->
<fx:FRAME id="FRM_SuspensionData">
<fx:SLOT-ID>5</fx:SLOT-ID>
<fx:PAYLOAD-LENGTH>8</fx:PAYLOAD-LENGTH> <!-- 16 byte -->
<fx:PDU-INSTANCES>
<fx:PDU ref="PDU_WheelSpeed_FL"/>
<fx:PDU ref="PDU_WheelSpeed_FR"/>
<fx:PDU ref="PDU_SuspensionPos"/>
</fx:PDU-INSTANCES>
</fx:FRAME>
Startup ve senkronizasyon
FlexRay cluster başlatma sürecinde en az iki "coldstart node" (startup + sync frame gönderen ECU) gerekmektedir. Başlatma süreci birkaç adımdan oluşur:
- Listen: ECU bus'ı dinler, mevcut cluster aktivitesini tespit etmeye çalışır.
- Collision Resolution: Birden fazla coldstart node varsa aralarında çakışma çözüm mekanizması devreye girer.
- Consistency Check: Cluster parametrelerinin tutarlılığı doğrulanır.
- Normal Operation: Tüm ECU'lar senkronize çalışmaya başlar.
05 Linux FlexRay desteği
Linux çekirdeğinde FlexRay desteği CAN protokolüne kıyasla oldukça sınırlıdır. Ancak ticari yazılım yığınları ve AUTOSAR entegrasyonu mevcuttur.
SocketCAN ve FlexRay
Linux'un SocketCAN altyapısı (AF_CAN + CAN_RAW) CAN için kapsamlı destek sunmaktadır. FlexRay için benzer bir AF_FLEXRAY soket arayüzü önerilmiş ancak mainline kernel'a dahil edilmemiştir. Bazı BSP (Board Support Package) tedarikçileri özel FlexRay socket implementasyonları sunar.
# FlexRay kernel modülü (üretici özel):
sudo modprobe flexray
sudo modprobe flexray_mpc5121 # Freescale MPC5121 FlexRay IP için
# Cihaz listesi:
ip link show | grep fr
# 5: fr0: <NOARP,UP,LOWER_UP> mtu 254 ... state UNKNOWN
# FlexRay arayüzünü yapılandır (araç özel BSP):
ip link set fr0 type flexray speed 10000000
ip link set fr0 up
Elektrobit Linux FlexRay Stack
Elektrobit (eb), AUTOSAR uyumlu FlexRay yazılım yığınlarının önde gelen tedarikçilerinden biridir. eb tresos Studio ile Linux üzerinde FlexRay stack konfigürasyonu ve simülasyonu yapılabilir.
# eb tresos Studio Linux kurulumu:
tar -xzf eb_tresos_studio_linux_v28.0.tar.gz
cd eb_tresos_studio/
./install.sh
# FlexRay simülasyon projesi oluştur:
./tresos_studio --project fr_cluster_sim --protocol flexray
# FIBEX dosyasını yükle:
./tresos_studio --import-fibex bmw_x5_suspension.xml
# Simülasyonu başlat:
./tresos_studio --run-sim --duration 1000ms --log fr_trace.bin
Vector CANdb++ ve .dbc → .arxml dönüşümü
# FIBEX'ten AUTOSAR .arxml'e dönüştür (Vector Fibex2arxml):
fibex2arxml --input bmw_x5.fibex --output bmw_x5.arxml
# FlexRay log dosyasını analiz et (Python ile):
python3 - <<'EOF'
import can # python-can FlexRay eklentisi (Vector sürücüsü ile)
import cantools
db = cantools.db.load_file('bmw_x5_flexray.arxml')
bus = can.interface.Bus(bustype='vector',
channel=0, bitrate=10000000,
protocol='flexray')
for msg in bus:
try:
decoded = db.decode_message(msg.arbitration_id, msg.data)
print(f"Slot {msg.arbitration_id}: {decoded}")
except Exception:
pass
EOF
06 AUTOSAR bağlamı
AUTOSAR (AUTomotive Open System ARchitecture), FlexRay'i destekleyen yazılım mimarisi standartları tanımlar. Classic Platform (CP) FlexRay'i tam olarak destekler.
AUTOSAR Classic Platform FlexRay katmanları
AUTOSAR Classic Platform — FlexRay Yazılım Yığını:
┌─────────────────────────────────────────────────────────────────┐
│ APPLICATION LAYER │
│ (SWC: Software Components) │
├─────────────────────────────────────────────────────────────────┤
│ RTE (Runtime Environment) │
├───────────┬─────────────┬────────────────┬───────────────────── ┤
│ FrIf │ FrTp │ FrNm │ FrSM │
│ FlexRay │ Transport │ Network Mgmt │ State Manager │
│ Interface │ Protocol │ │ │
├───────────┴─────────────┴────────────────┴─────────────────────┤
│ Fr (FlexRay Driver) │
├─────────────────────────────────────────────────────────────────┤
│ FlexRay Hardware (Transceiver + Controller) │
└─────────────────────────────────────────────────────────────────┘
AUTOSAR FlexRay modülleri
| Modül | AUTOSAR ID | Görev |
|---|---|---|
| Fr (FlexRay Driver) | AUTOSAR_SWS_FlexRayDriver | FlexRay controller donanım soyutlaması. Buffer yönetimi, slot konfigürasyonu, POC (Protocol Operation Control) durum makinesi. |
| FrIf (FlexRay Interface) | AUTOSAR_SWS_FlexRayInterface | Fr sürücüsünü üst katmanlara sunar. PDU yönlendirme, frame tetikleme, trigger transmit / receive indication. |
| FrTp (FlexRay Transport Protocol) | AUTOSAR_SWS_FlexRayTransportProtocol | 254 byte'tan büyük mesajları segmentlere böler (ISO 15765 benzeri). UDS teşhis servisleri için kullanılır. |
| FrNm (FlexRay Network Management) | AUTOSAR_SWS_FlexRayNM | Ağ uyanma/uyku yönetimi. ECU'ların koordineli uyku moduna geçmesini sağlar — araç park edildiğinde güç tasarrufu. |
| FrSM (FlexRay State Manager) | AUTOSAR_SWS_FlexRayStateManager | FlexRay cluster başlatma/durdurma durum makinesi. CommunicationManager ile entegrasyon. |
PDU routing — ComStack örneği
<!-- AUTOSAR .arxml FlexRay Frame tanımı -->
<FR-CLUSTER>
<SHORT-NAME>FlexRayCluster_SuspensionDomain</SHORT-NAME>
<BAUD-RATE>10000000</BAUD-RATE>
<COMMUNICATION-CYCLE>
<CYCLE-LENGTH>5000</CYCLE-LENGTH>
<STATIC-SLOT-LENGTH>100</STATIC-SLOT-LENGTH>
<NUMBER-OF-STATIC-SLOTS>40</NUMBER-OF-STATIC-SLOTS>
</COMMUNICATION-CYCLE>
</FR-CLUSTER>
<!-- Frame to PDU mapping -->
<FR-FRAME>
<SHORT-NAME>SuspensionDataFrame</SHORT-NAME>
<FRAME-LENGTH>16</FRAME-LENGTH> <!-- 16 byte payload -->
<PDU-TO-FRAME-MAPPINGS>
<PDU-TO-FRAME-MAPPING>
<PDU-REF>WheelSpeed_FL_PDU</PDU-REF>
<START-POSITION>0</START-POSITION>
<PACKED-BYTE-LENGTH>4</PACKED-BYTE-LENGTH>
</PDU-TO-FRAME-MAPPING>
<PDU-TO-FRAME-MAPPING>
<PDU-REF>SuspensionPosition_PDU</PDU-REF>
<START-POSITION>4</START-POSITION>
<PACKED-BYTE-LENGTH>8</PACKED-BYTE-LENGTH>
</PDU-TO-FRAME-MAPPING>
</PDU-TO-FRAME-MAPPINGS>
</FR-FRAME>
07 FlexRay analiz araçları
FlexRay cluster analizi için Vector, Lauterbach ve açık kaynak araçları kullanılır.
Vector CANoe FlexRay
# CANoe komut satırı simülasyonu (CANoeScript):
CANoe /CFG bmw_x5_flexray.cfg /Start /StopAfter 5000 /Log output.blf
# BLF (Binary Logging File) dosyasını Python ile analiz et:
python3 - <<'EOF'
import can
from can.util import load_environment_config
log = can.BLFReader("output.blf")
flexray_msgs = []
for msg in log:
if msg.channel == "FlexRay":
flexray_msgs.append({
"timestamp" : msg.timestamp,
"slot_id" : msg.arbitration_id,
"cycle" : msg.channel_specific.get("cycle", 0),
"data" : msg.data.hex()
})
print(f"Toplam FlexRay mesaj: {len(flexray_msgs)}")
for m in flexray_msgs[:5]:
print(f" Slot {m['slot_id']} Cycle {m['cycle']}: {m['data']}")
EOF
Lauterbach TRACE32 FlexRay
# TRACE32 FlexRay trace komutu (PowerView scripting):
# FlexRay.TRACE.Init <cluster_file> <channel>
FlexRay.TRACE.Init bmw_x5.fibex A+B
FlexRay.TRACE.Start
# ... 5 saniye bekle ...
FlexRay.TRACE.Stop
FlexRay.TRACE.Export CSV fr_trace.csv
python-flexray (açık kaynak)
pip install python-flexray
from flexray import FlexRayFrame, FlexRayCluster
# Cluster tanımını yükle (FIBEX veya arxml):
cluster = FlexRayCluster.from_fibex("bmw_x5_suspension.fibex")
# Ham frame verisi (header + payload):
raw_frame = bytes([
0x10, 0x05, 0x08, 0x00, 0x0C, # 5-byte header
0x13, 0x88, 0x27, 0x10, # 4 byte: FL hız = 5000, FR hız = 10000
0x01, 0xF4, 0x02, 0x58, # süspansiyon pozisyonları
0x00, 0x00, 0x00, 0x00,
0xA3, 0xB2, 0xC1, # 3-byte Frame CRC
])
frame = FlexRayFrame.from_bytes(raw_frame)
print(f"Slot ID: {frame.slot_id}")
print(f"Cycle: {frame.cycle_count}")
print(f"Sync: {frame.sync_frame}")
# PDU decode (cluster tanımından):
decoded = cluster.decode_frame(frame)
for signal_name, value in decoded.items():
print(f" {signal_name}: {value}")
# Beklenen çıktı:
# WheelSpeed_FL: 5000 rpm
# WheelSpeed_FR: 10000 rpm
# SuspensionPos_FL: 500 mm
# SuspensionPos_FR: 600 mm
08 Pratik: BMW X5 süspansiyon ve steer-by-wire
BMW X5 E70'in Adaptive Drive aktif süspansiyon sistemi, FlexRay'in gerçek dünya uygulamasının en iyi örneklerinden biridir. Bu bölümde sistemin FlexRay mimarisi ve ISO 26262 ASIL gereksinimleri incelenmektedir.
BMW X5 E70 FlexRay ağ mimarisi
BMW X5 E70 Chassis Domain FlexRay Network:
┌─────────────────────────────────────────────────────────────────┐
│ FlexRay Cluster (10 Mbps) │
│ gdCycle = 5 ms Channel A + B (dual redundant) │
├──────────┬──────────┬──────────┬──────────┬────────────────────┤
│ VDM │ EHC │ DSC │ ICM │ EPS │
│(Vehicle │(Electro- │(Dynamic │(Integrated│(Electric Power │
│Dynamics │hydraulic │Stability │Chassis │Steering) │
│ Mgmt) │ Control) │Control) │ Mgmt) │ │
├──────────┼──────────┼──────────┼──────────┼────────────────────┤
│ Slot 1 │ Slot 5 │ Slot 9 │ Slot 13 │ Slot 17 │
│(10 ms) │(10 ms) │(5 ms) │(5 ms) │(5 ms) │
└──────────┴──────────┴──────────┴──────────┴────────────────────┘
EHC = Elektronik amortisör (Adaptive Drive damper control)
VDM = Her 5 ms'de yaw rate, lateral g, longitudinal g verileri iletir
DSC = Her 5 ms'de yaw moment talebi ve ABS müdahale bilgisi
Aktif süspansiyon deterministik zamanlama gereksinimi
BMW Adaptive Drive sistemi, araç dinamiği hesaplamalarını 5 ms periyodik döngüde çalıştırır. Yaw rate sensör verisi EHC'ye maksimum 5 ms gecikmeyle ulaşmalıdır. CAN ile bu garanti verilemezdi; FlexRay statik segmenti bu garantiyi donanım düzeyinde sağlar.
/*
* AUTOSAR SWC: EHC (Electro-Hydraulic Control) — aktif damper
* Platform: TriCore TC1797, AUTOSAR CP 4.3
* Periyot: 5 ms (FlexRay static segment Slot 5 ile tetiklenir)
*/
#include "Rte_EHC_SuspensionCtrl.h" /* AUTOSAR RTE başlığı */
/* Sinyal tanımları (FIBEX'ten ARXML'e, arxml'den RTE'ye üretildi) */
#define YAW_RATE_MAX_DEG_S 150.0f
#define LATERAL_G_MAX 1.5f
/* SWC RunEntity: her 5 ms'de FlexRay frame alımında tetiklenir */
FUNC(void, EHC_CODE) EHC_SuspensionCtrl_5ms(void) {
float32 yaw_rate_deg_s = 0.0f;
float32 lateral_accel_g = 0.0f;
float32 roll_angle_deg = 0.0f;
/* Slot 1'den (VDM): araç dinamik verileri al */
Rte_Read_SRVehicleDynamics_YawRate(&yaw_rate_deg_s);
Rte_Read_SRVehicleDynamics_LateralAccel(&lateral_accel_g);
Rte_Read_SRVehicleDynamics_RollAngle(&roll_angle_deg);
/* Süspansiyon kuvvet talebi hesapla */
float32 anti_roll_force_Nm = lateral_accel_g * 9.81f * 450.0f;
/* 450 = araç sprung mass * roll moment kolu */
/* Damper kuvvetini sınırla */
if (anti_roll_force_Nm > EHCA_MAX_FORCE_NM)
anti_roll_force_Nm = EHCA_MAX_FORCE_NM;
if (anti_roll_force_Nm < -EHCA_MAX_FORCE_NM)
anti_roll_force_Nm = -EHCA_MAX_FORCE_NM;
/* Slot 5'e (EHC çıkış): amortisör valf komutu yaz */
Rte_Write_SRDamperControl_AntiRollForce(anti_roll_force_Nm);
Rte_Write_SRDamperControl_DamperMode(DAMPER_MODE_COMFORT);
}
Steer-by-Wire güvenilirlik gereksinimleri
Steer-by-Wire (SbW) sisteminde fiziksel direksiyon-tekerlek mekanik bağlantısı yoktur. Bu durum, iletişim güvenilirliğini hayati hale getirir. FlexRay'in çift kanal (A + B) yapısı, SbW için gereken güvenilirlik seviyesini sağlar.
| Gereksinim | FlexRay çözümü | ISO 26262 ASIL |
|---|---|---|
| Direksiyon komutunun maksimum gecikme garantisi | Statik slot: 5 ms deterministik | ASIL-D (D seviyesi) |
| Tek nokta arıza toleransı | Channel A arızası → Channel B devreye girer | ASIL-D |
| Veri bütünlüğü | Frame CRC + Header CRC çift kontrol | ASIL-C/D |
| Güncellik kontrolü | Cycle Counter ile bayat veri tespiti | ASIL-B |
| Timeout tespiti | Boş slot (null frame) izleme | ASIL-C |
FlexRay → CAN Gateway senaryosu
Modern araçlarda tüm ağlar FlexRay kullanmaz. Chassis domain FlexRay kullanırken body domain (kapı, aydınlatma, klima) CAN kullanır. Gateway ECU ikisi arasında köprü görevi görür.
/*
* AUTOSAR PduR (PDU Router) — FlexRay to CAN routing tablosu
* Bu konfigürasyon AUTOSAR Configurator'da üretilir.
*/
/* Araç hızı: FlexRay Slot 1 → CAN ID 0x1A0 (body network) */
const PduR_RoutingPathType PduR_RoutingTable[] = {
{
.src_pdu_id = FR_PDU_VEHICLE_SPEED, /* FlexRay kaynak */
.dst_pdu_id = CAN_PDU_VEHICLE_SPEED, /* CAN hedef */
.scaling = 1.0f, /* birim dönüşümü yok */
.gateway_type = PDUGATEWAY_FLEXRAY_TO_CAN
},
{
.src_pdu_id = FR_PDU_YAW_RATE,
.dst_pdu_id = CAN_PDU_YAW_RATE,
.scaling = 1.0f,
.gateway_type = PDUGATEWAY_FLEXRAY_TO_CAN
},
};
void PduR_FrIfRxIndication(PduIdType pduId,
const PduInfoType* pduInfo) {
/* FlexRay'den gelen PDU'yu CAN'a yönlendir */
for (int i = 0; i < PDUR_ROUTING_TABLE_SIZE; i++) {
if (PduR_RoutingTable[i].src_pdu_id == pduId) {
CanIf_Transmit(PduR_RoutingTable[i].dst_pdu_id, pduInfo);
}
}
}
ISO 26262, otomotiv fonksiyonel güvenlik standardıdır. ASIL-D (Automotive Safety Integrity Level D) en yüksek güvenlik bütünlüğü seviyesidir — direksiyon ve fren sistemleri için gereklidir. FlexRay'in çift kanal yapısı ve deterministik zamanlaması ASIL-D gereksinimlerinin karşılanmasına doğrudan katkı sağlar. Bununla birlikte, sadece FlexRay kullanmak ASIL-D sertifikasyonu için yeterli değildir; yazılım uygulaması, ECU donanımı ve sistem mimari tasarımının tamamı ISO 26262 analizinden geçmelidir. Tipik bir SbW sistemi için güvenlik analizi (HARA, FMEA, FTA) 12–24 ay sürebilir.