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'yi klasik CAN 2.0'dan ayıran iki devrimsel mimari değişiklik mevcuttur:
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). |
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:
#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);
}
| Ö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 |
Henüz yorum yapılmamış. İlk yorumu siz yapın!