UART, I2C ve SPI: gömülü sistemlerin seri haberleşme protokolleri
Sözlük

UART, I2C ve SPI: gömülü sistemlerin seri haberleşme protokolleri

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 4 dk okuma

UART, I2C ve SPI mikrodenetleyicilerin sensör ve çevre birimleriyle konuştuğu seri haberleşme protokolleridir. Hatları, çalışma mantığı ve seçim ölçütleri.

UART, I2C ve SPI nedir?

UART, I2C ve SPI, gömülü sistemlerde bir mikrodenetleyicinin sensörler, ekranlar, bellek çipleri ve diğer işlemcilerle veri alışverişi yapmak için kullandığı seri haberleşme yöntemleridir. Seri demek, bilgi bitlerinin paralel olarak çok telden değil, az sayıda hat üzerinden sırayla gönderilmesi demektir. Bu sayede devre kartında daha az bağlantı gerekir.

Her biri aynı soruya farklı cevap verir: veri nasıl gönderilir, alıcı hangi bitin ne zaman geldiğini nasıl anlar ve birden fazla cihaz nasıl bir arada çalışır?

UART nasıl çalışır?

UART (Universal Asynchronous Receiver Transmitter), eşzamansız çalışır: ayrı bir saat hattı yoktur. Cihazlar arasında yalnızca gönderme hattı (TX) ve alma hattı (RX) bulunur; bağlantıda bir cihazın TX'i diğerinin RX'ine bağlanır.

Alıcı ve gönderici baştan aynı veri hızında (baud rate) çalışacak şekilde ayarlanır. Her veri paketi, başlangıç biti ile başlar, veri bitleriyle devam eder, isteğe bağlı eşlik (parity) biti içerebilir ve bitiş biti ile kapanır. Alıcı bu çerçeveye bakarak bitleri doğru zamanda örnekler. Hız ayarı eşleşmezse veri anlamsız karakterler olarak görülür.

UART doğası gereği tek bir cihaz çiftine hizmet eder (noktadan noktaya). GPS modülleri, bluetooth modülleri ve hata ayıklama konsolu bağlantıları tipik kullanım alanlarıdır.

I2C nasıl çalışır?

I2C (Inter-Integrated Circuit), ortak bir yol (bus) üzerinde birden fazla cihazı konuşturur. Yalnızca SDA (veri) ve SCL (saat) hatlarını kullanır. Saati bir cihaz üretir; bu cihaza controller, yanıt verenlere target denir (eski belgelerde master ve slave terimleri de geçer).

Her cihazın yol üzerinde bir adresi vardır. Controller önce adresi gönderir, adresi eşleşen cihaz kendini tanıtır ve veri aktarımı başlar. Alıcı her bayttan sonra onay (ACK) sinyali gönderir. Hatlar açık kollektör yapıda olduğu için yol üzerinde çekme (pull-up) dirençleri gerekir.

Örneğin tek bir I2C yoluna sıcaklık sensörü, ivmeölçer ve küçük bir ekran bağlanabilir; hepsi aynı hatları paylaşır. Kablolama sade olur, fakat hız UART ve SPI'ya göre genellikle daha düşüktür ve aynı adresi kullanan cihazlar çakışır.

SPI nasıl çalışır?

SPI (Serial Peripheral Interface), senkron ve tam çift yönlüdür. Temel olarak şu hatları kullanır: saat (SCK), controller'dan çevre birimine veri (MOSI), çevre biriminden controller'a veri (MISO) ve cihaz seçme (CS ya da SS).

Controller, konuşmak istediği cihazın CS hattını aktif yapar ve saat üreterek veriyi hem gönderir hem alır. Adresleme olmadığı için her cihaz kendi CS hattına ihtiyaç duyar; cihaz sayısı arttıkça kullanılan pin sayısı da artar. Buna karşılık SPI yüksek hızlara çıkabildiği için bellek çipleri, SD kartlar, ekranlar ve hızlı ADC'lerde tercih edilir.

SPI'nin standart bir hata denetimi ya da onay mekanizması yoktur; doğrulama yazılım katmanında yapılır.

Hangi protokol ne zaman seçilir?

Seçim, cihaz sayısına, hıza ve pin kısıtına göre verilir:

  • Hız ölçütü: yüksek veri hızı gerekiyorsa SPI genellikle öne çıkar. I2C orta düzey, UART ise bağlantı tipine göre değişir.
  • Hat ve pin ölçütü: az pin kullanmak gerekiyorsa I2C avantajlıdır. SPI'da her ek cihaz bir CS hattı daha tüketir.
  • Cihaz sayısı: çok sayıda düşük hızlı sensör için I2C pratiktir. Tek ve özel bir bağlantı için UART yeterlidir.
  • Mesafe ve gürültü: bu protokollerin hepsi kısa devre içi mesafeler için tasarlanmıştır. Uzak mesafe ve gürültülü ortamda UART'ın üstüne kurulan fiziksel standartlar ya da endüstriyel yollar tercih edilir.
  • Güvenilirlik: I2C'nin onay mekanizması ve UART'ın eşlik biti basit hata yakalama sağlar; SPI'da bu iş uygulamaya kalır.

Çoğu gerçek kartta bu protokollerin hepsi birlikte bulunur.

Sık yapılan hatalar

Başlangıç düzeyinde sık karşılaşılan sorunlar şunlardır:

  • UART'ta TX ile RX'in çapraz bağlanmaması ve tarafların aynı baud rate ayarlanmaması.
  • I2C'de çekme direncinin unutulması; hat yüksek seviyeye çıkamaz, iletişim kurulmaz.
  • I2C cihaz adreslerinin çakışması ve veri sayfasındaki adresin yanlış yorumlanması.
  • SPI'da saat polaritesi ve faz modunun cihaza uymaması; veri kayık okunur.
  • Farklı çalışma gerilimlerindeki cihazların seviye dönüştürücü olmadan bağlanması.

Bu tür hatalarda ilk adım, mantık analizörü ya da osiloskopla hatlardaki işareti gözlemlemektir.

Mindset programlarında nerede çalışılır?

Gömülü Sistem Programlama (Embedded C) programı GPIO ve temel çevre birimleri, kesme yönetimi, zamanlayıcılar ve haberleşme birimleri başlıklarında bu protokollerin mikrodenetleyicide nasıl sürüldüğünü işler. Embedded Linux ve Cihaz Sürücüsü Geliştirme programı ise bir sensör sürücüsüne uzanan alt sistemleri kapsar.

Sensör Füzyonu ve Gömülü Sinyal İşleme programı sensör teknolojileri ve arayüzlerini ele alır; Akıllı Bina Teknolojileri ve IoT Sensörleriyle Tesis İzleme programı ise sahadaki sensör iletişim mimarisine bakar. Donanıma yakın çalışan yazılım, test ve saha ekipleri bu yapıdan yararlanır.

İlgili Mindset programı

Gömülü Sistem Programlama (Embedded C)

Sık sorulanlar

Sık sorulan sorular

UART neden saat hattı kullanmaz?

UART eşzamansızdır; alıcı ve gönderici baştan aynı baud rate üzerinde anlaşır ve alıcı, başlangıç bitinden itibaren kendi saatiyle bitleri örnekler. Ayrı saat hattı olmaması bağlantıyı basitleştirir ama tarafların hız ayarı eşleşmezse veri bozulur.

I2C ile SPI arasındaki en önemli fark nedir?

I2C az hatla çok cihazı adresleme yoluyla bağlar, hızı genellikle daha düşüktür. SPI ise cihaz başına ayrı seçme hattı kullanır, adresleme yoktur ve yüksek hıza çıkabilir. Az pin ve çok sensör için I2C, hız gereken bellek ya da ekran bağlantısı için SPI daha uygun olur.

Bir mikrodenetleyicide bu protokoller aynı anda kullanılabilir mi?

Evet. Mikrodenetleyiciler genellikle her protokol için ayrı donanım birimleri içerir. Örneğin bir kart, GPS ile UART üzerinden, sensörlerle I2C üzerinden, ekran ve bellekle SPI üzerinden aynı anda konuşabilir. Kullanılan pin sayısı ve yazılımın eşzamanlılığı sınır belirler.

I2C hatlarında çekme direnci neden gerekir?

I2C hatları açık kollektör yapıdadır; cihazlar hattı yalnızca alçak seviyeye çekebilir. Yüksek seviyeye dönüşü çekme dirençleri sağlar. Direnç yoksa ya da değeri uygun değilse hat yüksek seviyeye çıkamaz ve iletişim kurulamaz. Bu direnç değerleri hız ve hat uzunluğuna göre seçilir.

UART, I2C ve SPI Nedir? Seri Haberleşme Rehberi