İçereği Atla

UART & Haberleşme Performansı

17 Aralık 2025 yazan
UART & Haberleşme Performansı
Burak Emre

Interrupt Tabanlı UART RX’in Gerçek Sınırları

Birçok gömülü sistem projesinde UART haberleşmesi ilk etapta güvenilir görünür. İlk testlerde veri kaybı gözlenmez, sistem kararlı çalışır ve konu çoğu zaman çözüldü olarak kabul edilir. Ancak baud rate artırıldığında, CPU frekansı düşürüldüğünde veya sistem ek iş yükleriyle karşılaştığında, aynı UART sürücüsünün aniden veri kaybetmeye başladığı görülür.

Çoğu durumda problemin kaynağı UART donanımının kendisi değil, RX tarafındaki yazılım mimarisidir.

Bu yazıda, FIFO veya DMA kullanmadan interrupt tabanlı UART RX yaklaşımının ne kadar güvenli çalışabileceğini; hesaplamalar, pratik örnekler ve profesyonel BSP odaklı bir mühendislik bakış açısıyla ele alıyoruz.

Interrupt Tabanlı UART RX Nasıl Çalışır?

Interrupt tabanlı UART RX modeli yaygın olarak kullanılır ve ilk bakışta oldukça basit görünür:

  • UART çevre birimi bir bayt alındığında RX interrupt üretir

  • CPU, interrupt servis rutinine (ISR) girer

  • ISR içerisinde:

    • Durum (status) register’ları kontrol edilir

    • RX veri register’ı okunur

    • Alınan bayt bir yazılım tamponuna yazılır

Bu yaklaşım düşük ve orta seviyedeki baud rate’lerde genellikle sorunsuz çalışır. Ancak sınırları belirleyen kritik bir nokta vardır:

Her gelen bayt CPU zamanı tüketir. Bu süre uzadıkça veya baytlar daha sık geldikçe, sistem kaçınılmaz olarak performans sınırlarına yaklaşır.

FIFO veya DMA Olmadan Neden Problemler Ortaya Çıkar?

FIFO veya DMA kullanılmadığında, UART RX yolu çok düşük toleransa sahiptir:

  • UART çevre birimi bayt almaya devam eder

  • CPU RX interrupt’ını zamanında işleyemezse:

    • Overrun oluşur

    • Veri kaybı meydana gelir

  • Yazılım tarafında bu kayıp çoğu zaman sessizce gerçekleşir

FIFO tamponlama veya DMA ile yük aktarımı olmadan, RX veri yolu tamamen interrupt zamanlamasına bağımlı hale gelir.

Bu durum özellikle şu senaryolarda belirginleşir:

  • Yüksek baud rate haberleşmeler

  • Düşük CPU frekansları

  • Çok görevli veya RTOS tabanlı sistemler

  • Yoğun interrupt trafiği olan ortamlar

ISR Çalışma Süresi vs Baud Rate – Basit Bir Hesap

Sınırları daha net görmek için basit ama açıklayıcı bir hesaplama yapalım.

Varsayımlar

  • CPU frekansı: 64 MHz

  • UART konfigürasyonu: 8N1 (1 bayt = 10 bit)

  • RX ISR çalışma süresi: 10 µs (fonksiyon çağrıları, bit maskeleme ve yazılım FIFO’ya veri yazımı dahil)

Baud Rate’e Göre Bayt Süresi

Baud RateTime per Byte
115200~87 µs
921600~10.8 µs

Durum

  • 115200 baud:

    • ISR süresi: 10 µs

    • Bayt süresi: 87 µs

    • CPU’nun diğer işler için yaklaşık 77 µs zamanı var

  • 921600 baud:

    • ISR süresi: 10 µs

    • Bayt süresi: 10.8 µs

    • CPU neredeyse tamamen UART RX işlemiyle meşgul

Bu noktada sistem, kapasitesinin sınırında çalışır. Ek bir gecikme, başka bir interrupt, RTOS context switch’i veya bir cache miss kolayca veri kaybına yol açabilir..

CPU Frekansı Düşürüldüğünde Ne Olur?

Şimdi aynı kodu ve baud rate’i, ancak daha düşük bir CPU frekansı ile düşünelim.

  • CPU frekansı: 64 MHz → 16 MHz

  • ISR çalışma süresi yaklaşık 4 kat artar

    • 10 µs → ~40 µs

Sonuç olarak:

  • 115200 baud artık güvenli bir çalışma noktası değildir

  • 921600 baud pratikte kullanılamaz hale gelir

  • RX overrun’lar daha sık oluşur

  • Veri kayıpları düzensiz ve debug edilmesi zor hale gelir

Bu da önemli bir mühendislik sonucuna götürür:

UART Polling vs Interrupt vs DMA

Üç yaygın UART RX yaklaşımını kısaca karşılaştıralım:

YöntemCPU YüküYüksek Baud RateGüvenilirlik
PollingÇok yüksek
InterruptOrta⚠️⚠️
DMADüşük
  • Polling basittir ancak aşırı CPU zamanı tüketir
  • Interrupt tabanlı RX dengeli bir çözümdür fakat sınırları nettir
  • DMA tabanlı RX yüksek bant genişliği ve deterministik davranış sağlar

Burada yaygın bir yanlış algıyı düzeltmek gerekir:

Profesyonel Bir BSP Perspektifi

Endüstriyel sistemlerde UART sürücüleri hiçbir zaman tek bir kullanım senaryosu için tasarlanmamalıdır. Profesyonel bir BSP mimarisi, aşağıdaki ölçeklenebilir konfigürasyonları desteklemelidir:

  • Sadece interrupt

  • Interrupt + FIFO

  • DMA tabanlı

Bu esneklik sayesinde aynı uygulama kodu:

  • Farklı MCU’larda

  • Farklı CPU frekanslarında

  • Farklı performans ve sistem yükü koşullarında

değişiklik gerektirmeden çalışabilir.

Bu mimari yaklaşım, aynı firmware’in farklı donanım platformlarında tutarsız davranmasına yol açan saha problemlerini önler.

Teoriden Pratiğe: BSP Geliştirme Eğitimi

UART performans sınırlarını teorik olarak anlamak önemlidir, ancak gerçek değer bu kavramların pratikte uygulanmasıyla ortaya çıkar.

Profesyonel BSP geliştirme sürecinde aşağıdaki konular:

  • Interrupt gecikmesi

  • ISR çalışma süresi

  • FIFO derinliği hesaplaması

  • DMA tabanlı veri akışı

  • CPU frekansı ölçekleme

yalnızca optimizasyon detayları değil, sistem güvenilirliğini, ölçeklenebilirliği ve uzun vadeli sürdürülebilirliği doğrudan etkileyen mimari kararlardır.

BSP Geliştirme Eğitimimizde bu konular sadece teorik olarak anlatılmaz; gerçek donanım üzerinde uygulanır, ölçülür ve analiz edilir. Katılımcılar, interrupt tabanlı RX ile başlayan UART sürücülerini adım adım geliştirerek FIFO tamponlama ve DMA tabanlı veri aktarımına kadar ilerler.

Eğitim sürecinde, üretici tarafından oluşturulmuş HAL kodlarına veya hazır yapılandırmalara güvenmek yerine şu konulara odaklanılır:

  • Donanımın gerçek davranışını anlamak

  • Ölçülebilir kısıtlara dayalı tasarım kararları almak

  • Farklı MCU aileleri arasında taşınabilir ve ölçeklenebilir BSP katmanları oluşturmak

Bu uygulamalı yaklaşım, mühendislerin “çalışıyor” seviyesinin ötesine geçerek gerçek dünya koşullarında güvenilir kalan haberleşme alt sistemleri tasarlamasını sağlar.

Sonuç

UART haberleşmesi basit görünse de, yüksek performans ve güvenilirlik gerektiren sistemlerde ciddi bir mühendislik problemine dönüşür.

  • Interrupt tabanlı RX belirli bir noktaya kadar etkilidir

  • Baud rate arttıkça matematiksel sınırlar ortaya çıkar

  • CPU frekansı ve ISR çalışma süresi kritik parametrelerdir

  • Yüksek hız ve deterministik davranış için DMA kaçınılmazdır

Sağlam bir UART tasarımı, ayar değişiklikleriyle değil, doğru mimariyle başlar.

UART & Haberleşme Performansı
Burak Emre 17 Aralık 2025
Bu gönderiyi paylaş
Etiketler
Arşivle