CAN FD (Controller Area Network Flexible Data-Rate)

👤 Yazar: ozcan 📅 Tarih: 03.08.2026 17:22 👁️ Görüntüleme: 2

CAN FD (Controller Area Network Flexible Data-Rate) İncelemesi

CAN FD (Flexible Data-Rate), 2012 yılında Bosch tarafından klasik CAN 2.0 protokolünün bant genişliği ve veri yükü sınırlarını aşmak amacıyla geliştirilmiş gelişmiş bir haberleşme standardıdır. Geleneksel CAN veriyolunun fiziksel katman güvenilirliğini (diferansiyel sinyalleşme, hat yapısı, hakemlik mantığı) korurken; değişken veri hızı ve genişletilmiş paket boyutu sunarak modern otomotiv (ADAS, elektrikli araç yönetimi) ve endüstriyel sistemlerin yüksek veri iletim ihtiyacını karşılar.

CAN FD Mimari Diyagramı


1. Klasik CAN ile CAN FD Arasındaki İki Temel Yenilik

CAN FD'yi klasik CAN 2.0'dan ayıran iki devrimsel mimari değişiklik mevcuttur:

  • Esnek Veri Hızı (Flexible Data-Rate - BRS): Klasik CAN'de tüm paket (ID, Veri, CRC) sabit bir baudrate ile gönderilir (örneğin 500 kbps). CAN FD'de ise öncelik hakemliği (Arbitration) aşamasında standart hız kullanılırken, veri yükü (Data Payload) ve CRC alanına geçildiğinde bit süresi dinamik olarak kısaltılır ve hız 2 Mbps, 5 Mbps hatta 8 Mbps+ seviyelerine çıkarılır.
  • Genişletilmiş Veri Alanı (DLC Up to 64 Bytes): Klasik CAN çerçevesi paket başına maksimum 8 bayt veri taşıyabilirken, CAN FD bu sınırı paket başına 64 bayta kadar çıkarır (12, 16, 20, 24, 32, 48, 64 baytlık bloklar halinde).
Neden İki Farklı Hız Seviyesi?
Veriyolunda birden fazla cihazın aynı anda konuşmaya başladığı Arbitration (Hakemlik) fazında, sinyalin fiziksel hat boyunca yansıyıp düğümlere ulaşması zaman alır (propagation delay). Bu yüzden hakemlik fazı güvenli düşük hızda (örneğin 500 kbps) yapılır. Hakemliği kazanan cihaz veri alanına geçtiğinde hatta tek başına kaldığı için hız anında 5 Mbps seviyesine yükseltilir (Data Phase).

2. CAN FD Çerçeve Yapısı (Frame Format) ve Yeni Kontrol Bitleri

CAN FD çerçeveleri, klasik CAN ile geriye dönük uyumluluk mantığını korumakla birlikte Control Field alanına 3 yeni kritik bit eklemiştir:

Yeni Bit Adı Tam Adı Açıklama
EDL / FDF Extended Data Length / FD Format Paketin klasik CAN mi (0 - Recessive) yoksa CAN FD mi (1 - Recessive) olduğunu ayırt eden ana bit.
BRS Bit Rate Switch Veri alanında baudrate'in yükseltilip yükseltilmeyeceğini belirler. (0 = Standart Hız, 1 = Yüksek Hızlı Veri Fazı).
ESI Error State Indicator Düğümün donanımsal hata durumunu bildirir (0 = Error Active, 1 = Error Passive).
Geliştirilmiş CRC ve Stuff Bit Sayacı (SBC):
Veri boyutu 64 bayta çıktığı için hata tespit olasılığını korumak adına CRC alanı büyütülmüştür:
  • 16 bayta kadar olan veriler için: 17-Bit CRC
  • 16 bayttan büyük veriler için: 21-Bit CRC
  • Ayrıca CRC alanının başına 4-bitlik Stuff Bit Count (SBC) eklenerek bit dolgulama hatalarının %100 yakalanması sağlanmıştır.

3. Gömülü Sistem Kod Örneği (ESP32-S3 / STM32 Dahili CAN FD Çevre Birimi)

Dahili CAN FD denetleyicisine sahip mikrodenetleyicilerde (örneğin ESP32-S3, STM32G4 veya STM32H7 serisi) ikili baudrate konfigürasyonu (Nominal Bitrate & Data Bitrate) yapılandırılarak 64 baytlık veri transferi gerçekleştirilir:

C++ / ESP32-S3 TWAI (CAN FD) Konfigürasyon ve Paket Gönderim Örneği

#include <Arduino.h>
// Standart ESP32 TWAI / CAN FD Sürücü Başlığı
#include "driver/twai.h"

// Pin Tanımlamaları
#define CAN_TX_PIN GPIO_NUM_17
#define CAN_RX_PIN GPIO_NUM_16

void setup() {
  Serial.begin(115200);

  // 1. Nominal ve Data Bitrate Konfigürasyonu
  // Hakemlik Fazı: 500 kbps | Veri Fazı: 2 Mbps
  twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT(CAN_TX_PIN, CAN_RX_PIN, TWAI_MODE_NORMAL);
  
  // Timing Konfigürasyonu (500 kbps Nominal)
  twai_timing_config_t t_config = TWAI_TIMING_CONFIG_500KBITS();
  
  // Filtre Yapılandırması (Tüm ID'leri kabul et)
  twai_filter_config_t f_config = TWAI_FILTER_CONFIG_ACCEPT_ALL();

  // 2. Sürücüyü Yükle ve Başlat
  if (twai_driver_install(&g_config, &t_config, &f_config) == ESP_OK) {
    Serial.println("CAN FD Sürücüsü Kuruldu.");
  } else {
    Serial.println("CAN FD Sürücü Kurulum Hatası!");
    return;
  }

  if (twai_start() == ESP_OK) {
    Serial.println("CAN FD Veriyolu Başlatıldı!");
  }
}

void loop() {
  // 3. CAN FD 64-Baytlık Paket Hazırlığı
  twai_message_t message;
  message.identifier = 0x456;      // Standard 11-bit CAN ID
  message.extd = 0;                 // Standart Çerçeve
  message.rtr = 0;                  // Veri Çerçevesi
  message.ss = 0;
  message.self = 0;
  message.dlc = 15;                 // CAN FD DLC 15 = 64 Bayt Veri Yükü

  // 64 Baytlık Veri Tamponunu Doldur
  for (int i = 0; i < 64; i++) {
    message.data[i] = (uint8_t)(i + 0x10);
  }

  // Paketi Hatta Sür
  if (twai_transmit(&message, pdMS_TO_TICKS(1000)) == ESP_OK) {
    Serial.println("CAN FD (64 Bayt @ 2Mbps) Paket Başarıyla Gönderildi.");
  } else {
    Serial.println("Paket Gönderim Zaman Aşımı!");
  }

  delay(2000);
}

4. Klasik CAN 2.0 ile CAN FD Detaylı Karşılaştırması

Özellik Klasik CAN (2.0A / 2.0B) CAN FD (Flexible Data-Rate)
Maksimum Veri Boyutu (Payload) Maksimum 8 Bayt Maksimum 64 Bayt
Maksimum Veri Hızı (Data Phase) Sabit 1 Mbit/s 2 Mbit/s - 8+ Mbit/s (Esnek)
Hakemlik Hızı (Arbitration Phase) 1 Mbit/s'ye kadar 1 Mbit/s'ye kadar (Standart Güvenli Hız)
CRC Uzunluğu 15-Bit CRC 17-Bit (0-16B) / 21-Bit (>16B) + SBC
Veri Protokol Verimliliği ~%45 - %50 (Overhead yüksek) ~%80 - %90 (Çok daha az yükle çok daha fazla veri)
Fiziksel Katman (Kablolama) 2-Tel Diferansiyel (CAN_H, CAN_L) 2-Tel Diferansiyel (Aynı fiziksel altyapı)
Geriye Dönük Uyumluluk CAN FD paketlerini anlayamaz (Hata verir) Klasik CAN 2.0 paketlerini sorunsuz okur ve gönderir

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
↑ Sayfa Başı
📞 İletişim ✉ E-Posta Gönder 🟥 YouTube
© 2026 Yenidir.com
Yenidir CMS V0.1