Haberler

SPI – Seri Harici Arayüze Giriş

İster yeni başlayan olun, ister deneyimli bir mühendis, bir gün kesinlikle SPI ile karşılaşacaksınız. SPI, mikrodenetleyicilerin (örneğin, Arduino, Raspberry Pi) SD kartlar ve sensörler gibi bir veya daha fazla çevresel cihaza verileri hızlı bir şekilde kısa mesafelerde göndermek için kullandığı en popüler iletişim arayüzlerinden biridir.

Bu kılavuzda aşağıdaki içerikleri ele alacağız. Uzun görünebilir, ancak ilgilendiğiniz bölüme atlayabilirsiniz:

  • SPI Nedir
  • SPI Arayüzü
  • SPI Veri İletimi
  • SPI Slave Seçimi
    • Normal Bağımsız Slave Yapılandırması
    • Daisy Chain Yapılandırması
  • Saat Polaritesi ve Saat Aşaması
  • SPI için Programlama
    • Arduino SPI
    • Raspberry Pi SPI
  • SPI Protokolünün Avantajları ve Dezavantajları
  • SPI Kullanırken İpuçları ve Püf Noktaları
  • Mikrodenetleyicilerde SPI Örnekleri

SPI Nedir?

SPI, Seri Çevresel Arayüz olarak da bilinir, eşzamanlı seri veri protokolü olup, tam çift yönlü çalışan bir arayüz veriyolu olarak işlev görür; burada veriler aynı anda gönderilip alınabilir ve Motorola tarafından geliştirilmiştir.

SPI, UART ve I2C gibi diğer iletişim çevresel birimlerine kıyasla daha hızlı veri iletim hızlarında çalışır = 8Mbit veya daha fazla. Bunun nedeni, SPI’nin kesintisiz veri aktarımı yapabilmesidir; bu sayede gönderilen ve alınan bit sayısı sürekli bir akış halinde gerçekleşir.

Eğer UART ve I2C ile ilgileniyorsanız, diğer makalelerime göz atmak için lütfen sayfanın en altına kaydırın!

SPI’ye dönersek, veri için ayrı hatlar ve hem ana hem de slave’in senkronize olmasını sağlamak için paylaşılan bir saat kullanır. Paylaşılan saat, alıcıya veri hatlarındaki veri bitlerini ne zaman örneklemesi gerektiğini bildiren osilasyon sinyali olarak işlev görür. Her saat döngüsünde bir veri biti aktarılır; bu, veri aktarım hızının ana cihaz tarafından üretilen saat sinyalinin frekansı ile belirlendiği ve verilerin bit bit iletildiği anlamına gelir.

Alıcı slave saat sinyalini algıladığında, veri hatlarındaki veri bitlerini okumaya hazır hale gelir. SPI, hızın önemli olduğu yerlerde kullanılır; örneğin, flaş bellek (örneğin, SD kartlar), ekran modülleri, bilgilerin hızlı bir şekilde güncellendiği ve değiştiği yerler (örneğin, sensörler, termometreler), gerçek zamanlı saatler (RTC’ler), analogdan dijitale dönüştürücüler ve daha fazlası.


SPI Arayüzü

SPI, ayrı hatlar kullanarak veri alımı ve aktarımı yapan bir eşzamanlı veri veriyoludur ve her iki tarafı mükemmel bir senkronizasyonda tutmak için bir saat ve adresleme işlevleri için bir hat kullanır.

Toplamda, SPI veriyolu, ana cihaz ile çevresel cihaz arasında iletişim kurmak için kullanılan toplam 4 hat içerir:

  • MOSI – Ana Veri Çıkışı, Slave Veri Girişi
  • MISO – Ana Veri Girişi, Slave Veri Çıkışı
  • SCLK – Ana cihaz tarafından üretilen saat sinyali, fPCLK/2’ye kadar, slave mod frekansı fCPU/2’ye kadar
  • SS / CSS – Slave etkinleştirme sinyali, ana cihaz tarafından kontrol edilir, bazı entegre devreler CS (Chip select) olarak etiketlenir

MOSI ve MISO

MOSI ve MISO hatları, verilerin iletildiği hatlardır; MOSI, verileri ana cihazdan slave’e iletmekten sorumludur, MISO ise verileri slave’den ana cihaza iletmekten sorumludur.

Slave, ana cihaza bir yanıt göndermesi gerektiğinde, ana cihaz önce slave veri hatlarında veri iletmeden önce önceden belirlenmiş bir saat döngüsü sayısı oluşturacaktır.

Asenkron seri ile karşılaştırıldığında, burada veriler her iki yönde herhangi bir miktarda gönderilirken, ana cihaz SPI’de ne kadar verinin geri döndüğünü ve ne zaman olduğunu bilir.

SCLK

SCLK, slave’e veri hatlarını okumak için sinyal gönderen saat sinyalidir.

SPI arayüzlerinde, bir veya daha fazla slave’e saat sinyalini üreten tek bir ana cihaz vardır.

SS / CSS

SS/CSS, adresleme işlevi olarak kullanılan chip select ile aynı işlevselliğe sahiptir. Bu sinyal genellikle aktif düşük bir sinyaldir ve bir slave’i SPI veriyolundan ayırmak için yüksek çekilir.


SPI Veri İletimi

Bir SPI iletişimi genellikle şu şekilde başlar:

  • Ana cihazın saat sinyali göndermesi ve SS hattı üzerinden bir slave seçmesi.
    • Ana cihaz, bu hat aktif düşük sinyalde olduğundan bir slave seçmek için mantıksal 0 sinyali gönderecektir.
    • Eğer bir bekleme süresi gerekiyorsa (örneğin, analogdan dijitale dönüşüm) ana cihaz, saat sinyalini göndermeden önce bir süre beklemek zorunda kalacaktır.
  • SPI, tam çift yönlü bir arayüzdür, bu nedenle hem ana cihaz hem de slave, MOSI ve MISO hatları üzerinden birbirine veri gönderebilir ve veriler ana cihaz ile slave arasında aynı anda iletilir. Bu, seri saat tarafından senkronize edilir. Örneğin, bu iki işlem aynı anda gerçekleşecektir:
    • Ana cihaz, MOSI hattında bir bit veri gönderir = Slave bunu okur
    • (Eğer bir yanıt gerekiyorsa) Slave, MISO hattında ana cihaza bir bit veri geri döner = Ana cihaz bunu okur
  • SPI, verileri örneklemek veya kaydırmak için saatin yükselen veya alçalan kenarını seçme esnekliği sunar.
  • Gönderilecek veri bitlerinin sayısı için lütfen cihazınızın veri sayfasına başvurun, çünkü her cihaz farklıdır.

SPI Slave Seçimi

Yukarıda belirtildiği gibi, SPI protokolü önce ana cihazın saat sinyali göndermesi ve SS hattı üzerinden bir slave seçmesi ile başlar. SS hattında, ana cihazın birden fazla slave ile veri alması veya göndermesi için bir slave seçmek üzere kullanabileceği iki yol vardır. Bunlar:

“`html

Normal Bağımsız Slave Konfigürasyonu

  • Bu konfigürasyon ile her slave ayrı bir SS hattına ihtiyaç duyacaktır.
  • Master, belirli bir slave’i aktif hale getirmek için o slave’in SS hattını düşük yaparken diğerlerini yüksek tutacaktır.
    • Aynı anda iki slave’in aktif olması büyük bir hatadır çünkü iki slave aynı MISO hattında veri gönderdiğinde, veriler karışacak ve bozulacaktır.
  • Belirli SS hattı düşük olduğunda, MOSI / MISO hattındaki saat ve veri seçilen slave için kullanılabilir hale gelecektir.
  • Slave cihazlarının sayısı arttıkça, daha fazla SS hattına ihtiyaç duyulacak ve master cihazdan daha fazla giriş ve çıkış gerekecektir. Bu nedenle, SS çıkışlarınızı çoğaltacak bir çip olmadan master cihazınıza bağlayabileceğiniz sınırlı sayıda slave olacaktır.

Daisy-Chain Konfigürasyonu

  • Daisy-chain konfigürasyonu, bireysel SS hatlarına sahip olmaktan biraz farklıdır. Bu konfigürasyonda, slave’ler birbirine bağlıdır ve veriler bir slave’den diğerine aktarılır.
  • Daisy-chain konfigürasyonu, tüm ilgili slave’lere giden tek bir SS hattı içerir; master SS hattını yükselttiğinde, tüm slave’ler aktif hale gelecektir.
  • Daisy-chain konfigürasyonu için, master’ın verilerin ilk slave’den son slave’e kadar taşınması için yeterli veri göndermesi gerekecektir, çünkü verilerin her slave’e ulaşmasını istiyorsunuz.
  • Daisy-chain konfigürasyonu kullanırken, ilettiğiniz ilk veri her zaman son slave’e ulaşacaktır.
  • Daisy-chain konfigürasyonu, master’ın yalnızca veri çıkarması gerektiğinde ve geri veri almasına gerek olmadığında kullanılır.
  • Eğer slave cihazdan geri veri almak istiyorsanız, kapalı bir döngü oluşturmak için master cihazın MISO’sunu bağlamanız gerekir.
  • Ancak bunun gerçekleşmesi için, geri verilerin tüm slave’lerden geçebilmesi için yeterli alım komutları göndermeniz gerekecektir; bu, verilerin master’a ulaşabilmesi için önceden veri göndermek gibidir!

Saat Polaritesi ve Saat Fazı

  • SPI’de, veri alışverişi için bir protokol yoktur; bu, yükü sınırlar ve yüksek hızda veri akışı sağlar.
  • Master, belirli bir SPI modunu kullanarak saat polaritesini ve saat fazını seçebilir; her mod, verilerin veri saat sinyalinin yükselen veya düşen kenarında kaydırılıp kaydırılmayacağını (saat fazı olarak bilinir) ve saat sinyalinin yüksek veya düşük durumda ne zaman boşta kalacağını kontrol eder (saat polaritesi olarak bilinir).
  • Saat polaritesini (CPOL) ve saat fazını (CPHA) değiştirerek, master ve slave arasındaki iletişimde esneklik sağlamak için 4 benzersiz mod oluşturabilir.

İşte dört iletim modunu listeleyen bir tablo:

SPI Modu CPOL (Saat Polaritesi) CPHA (Saat Fazı) Çıkış Kenarı Veri Yakalama
0 0 0 Düşen Yükselen
1 0 1 Yükselen Düşen
2 1 0 Yükselen Düşen
3 1 1 Düşen Yükselen

SPI İçin Programlama

Artan sayıda mikrodenetleyici ve mikroişlemci artık, kullanıcıların I2C gibi diğer iletişim çevre birimlerine kıyasla daha hızlı veri göndermesine ve almasına olanak tanıyan yerleşik SPI iletişim çevre birimleriyle donatılmıştır. En popüler iki mikrodenetleyici ve mikroişlemciye bakalım:

Arduino SPI

Bugün, etkileşimli nesneler geliştirmek, çeşitli anahtarlar veya sensörlerden giriş almak ve çeşitli ışıkları, motorları ve diğer çıkışları kontrol etmek için harika bir araç olan Arduino, aynı zamanda SPI’yi de kullanabilir. SPI cihazlarıyla iletişim kurmak için Arduino’yu master cihaz olarak kullanacağız.

Yeni SPI cihazınız için Arduino’da kod yazmaya başlamadan önce, aşağıdakilere dikkat etmelisiniz:

  • Cihazınızın desteklediği maksimum SPI hızı. Bunu SPISettings’teki ilk parametre ile kontrol edebilirsiniz.
  • Verilerin en anlamlı bit (MSB) veya en az anlamlı bit (LSB) olarak mı kaydırıldığı. Bunu SPISettings’teki ikinci parametre ile kontrol edebilirsiniz.
  • Veri saat sinyali boşta iken yüksek mi yoksa düşük mü olduğu ve örneklerin saat darbelerinin yükselen veya düşen kenarında mı olduğu. Bu modları SPISettings’teki üçüncü parametre ile kontrol edebilirsiniz.
  • Bir SPI kütüphanesi kullanıyorsanız, Arduino’daki sağlanan SCLK, MOSI ve MISO pinlerini kullanın çünkü bunlar sabitlenmiştir. SS pini için, özel pini veya başka bir mevcut çıkış pinini kullanabilirsiniz.

Arduino için, SPI cihazlarıyla iletişim kurmanın 2 yolu vardır:

  • Komutlar Kullanarak
    • Herhangi bir pin grubuyla çalışacak yazılım tabanlı
      shiftIn() ve shiftOut() komutlarını kullanabilirsiniz, ancak bu daha yavaş olacaktır.
  • SPI kütüphanesini Kullanarak
    • Ayrıca, belirli pinlerde çalışabilen ancak komutlardan daha hızlı olan Arduino SPI Kütüphanesi‘ni de kullanabilirsiniz.

Arduino için UART ve I2C gibi diğer iletişim çevre birimleriyle ilgileniyorsanız, Arduino İletişim Çevre Birimleri: UART, I2C ve SPI konusundaki blogumuzu kontrol edebilirsiniz.

Raspberry Pi SPI

Mikroişlemciler, atmosfer sensörleri, EEPROM’lar ve çeşitli ekran türleri gibi çevre birimleriyle iletişim kurmak için SPI ile de kullanılabilir. Bir örnek Raspberry Pi’dir:

  • Raspberry Pi, varsayılan olarak Raspberry Pi işletim sistemi Raspbian’da devre dışı bırakılmış olan 2 çip seçeneğine sahip 1 SPI veriyolu ile donatılmıştır.
    • Aktif hale getirmek için raspi-config kullanın.
    • SPI sürücüsü yüklendikten sonra, /dev/spidev0.0 cihazını görmek için >ls /dev/*spi* komutunu girebilirsiniz.
    • Eğer Raspberry Pi’nizde Raspbian yüklü değilse, NOOBS imajını buradan indirip yükleyebilirsiniz!
  • SPI veriyolu, aşağıda gösterildiği gibi P1 başlığında mevcuttur:

Raspberry SPI yazılımı (örneğin, WiringPi, bcm2835 kütüphanesi) ve donanımı (örneğin, standart, iki yönlü, LoSSI modları) hakkında daha fazla bilgi için Raspberry Pi SPI sayfasını kontrol edin!

“`


SPI Kullanımının Avantajları ve Dezavantajları

SPI Kullanımının Avantajları

  • Verilerin aynı anda iletilip alınabilmesini sağlayan tam çift yönlü iletişimi destekler.
  • Yüksek hızlı uygulamaları destekleyen daha iyi sinyal bütünlüğü sağlar.
  • Donanım bağlantısı basittir, yalnızca dört sinyal hattı gereklidir (bazı uygulamalarda üçe düşürülebilir).
  • Transceiver gerektirmez.
  • Slave cihazın adreslemesine gerek yoktur.

SPI Kullanımının Dezavantajları

  • Kısa iletim mesafesi.
  • Akış kontrolü belirtilmemiştir ve verilerin alınıp alınmadığını onaylayan bir mekanizma yoktur, bu I2C’den farklıdır.
  • Daha fazla pin portu kaplanır, cihaz sayısı için pratik bir sınır vardır.
  • UART’taki hata kontrolü gibi bir hata kontrolü yoktur (parite biti kullanarak).
  • Kesme işlemi yalnızca ek sinyal hatları aracılığıyla yapılabilir.
  • Sadece 1 master vardır.

UART, I2C ve SPI Arasındaki Farklar

Protokol Karmaşıklık Hız Cihaz Sayısı Bağlantı Sayısı Çift Yönlü Master ve Slave Sayısı
UART Basit En Yavaş 2 cihaza kadar 1 Tam Çift Yönlü Tekil ile Tekil
I2C Birden fazla cihazı zincirleme kolaydır UART’tan daha hızlı 127’ye kadar, ancak karmaşıklaşır 2 Yarım Çift Yönlü Birden fazla slave ve master
SPI Cihaz sayısı arttıkça karmaşık En Hızlı Birçok, ancak karmaşıklaşır 4 Tam Çift Yönlü 1 master, birden fazla slave

SPI Kullanırken İpuçları ve Püf Noktaları

Projeleriniz için SPI protokolünü kullanmaya karar verdiniz, harika! İşte size yardımcı olacak bazı ipuçları ve püf noktaları:

Kısa Mesafelerde Veri Gönderin

SPI kullanırken, verileri yalnızca birkaç fitlik kısa mesafelerde göndermek için kullanmalısınız. Bu, yüksek hızlı sinyallerden kaynaklanmaktadır.

Verileri daha uzak mesafelere göndermeniz gerekiyorsa, saat hızını düşürmeyi ve özel sürücü çipleri kullanmayı düşünün.

Bir SPI Sürücü/Adaptörü Kullanın

Zorluk mu yaşıyorsunuz? SPI bağlantınız istediğiniz gibi çalışmıyor mu? Neden bir SPI sürücüsü kullanmayı düşünmüyorsunuz? İşte böyle bir tane:

Logic analizörler, veri baytlarını bir ekran veya kayıt için çözümlemenize yardımcı olabilecek çok faydalı araçlardır. Sadece bu değil, SPIDriverımız, SPI cihazlarını kontrol etmek için kullanımı kolay bir araçtır.

Bu SPIDriver, PC ile iletişim kurmak için standart bir FTDI USB seri çipi kullanır, bu nedenle özel sürücülerin yüklenmesine gerek yoktur. Kart, voltaj ve akım izleme ile birlikte 3.3 ve 5 V beslemeleri içerir.

SPI flash çok yaygındır ve bir test klibi kullanarak, SPIDriver, devre içinde SPI flash okumayı ve yazmayı kolaylaştırır. Bir Atmel’in flash’ını okumak veya yazmak için kısa bir betik yeterlidir ve SPI LED şeritlerini de SPI Sürücüye bağlamak oldukça kolaydır, ayrıca doğrudan kontrol edebilmeniz onları çok daha eğlenceli hale getirir!

Uzun şeritleri düzgün bir şekilde animasyon yapmak ve POV efektleri elde etmek için yeterince hızlıdır. Kısa şeritler, SPIDriver’ın güçlü 470 mA yerleşik beslemesi ile doğrudan beslenebilir.

Tüm bu özellikler, SPI ile verileri kolayca iletmenizi sağlayacaktır!


Mikrodenetleyicilerde SPI Örnekleri

Son olarak, SPI’nin mikrodenetleyicilerde nasıl kullanıldığına bakalım:

XIAO Serisi

Tüm XIAO Serisi Mikrodenetleyiciler I2C, UART veya SPI desteği sunar ve incelemek için buraya bağlantı: Seeed Studio XIAO Serisi. Ve şimdi XIAO Serisi’nin çoğu için Ücretsiz Kargo!

  • Parmak boyutunda form faktörü, yalnızca 20×17.5mm. Alan kısıtlı senaryolar için tasarlanmıştır.
  • Birden fazla arayüzü destekleyen 11 mevcut IO’ya kadar.
  • Çeşitli ve karmaşık uygulamalar için güçlü bir çekirdek ile güçlü performans.
  • Tek taraflı bileşenler, yüzey montaj tasarımı. XIAO’yu diğer kartlara kolayca entegre edin.

MCP 3008 / Grove I2C ADC

  • Seeed, aynı işlevlere sahip benzer bir ürün sunmaktadır: Grove I2C ADC ancak iletişim periyodları I2C’dir.
  • 10 bit 8 kanallı analogdan dijitale dönüştürücü (ADC) dir.
  • MCP 3008 için, Raspberry Pi’ye bir SPI seri bağlantısı kullanarak bağlanır. Donanım SPI veri yolu veya herhangi dört GPIO pini ve yazılım SPI kullanarak MCP 3008’e bağlanır.

MCP2551 ve MCP2515 Tabanlı Seri CAN-BUS Modülü

  • Seri CAN Bus modülü, Arduino’nuzu CAN bus yetenekleri ile donatır ve aracınızı hacklemenizi sağlar. CAN bus’a mesaj okumak ve yazmak için izin verir.
  • CAN bus, bir araç içindeki çeşitli mikrodenetleyicilerin ve sensörlerin birbirleriyle iletişim kurmasını sağlayan bir mesajlaşma protokol sistemidir. CAN, uzun mesafeli, orta iletişim hızı ve yüksek güvenilirlik sağlar.
  • Bu Seri CAN Bus modülü, ayrıca yerleşik Grove konektörü aracılığıyla Arduino’nuzla bağlanabilir.
    SPI aracılığıyla mikrodenetleyicilerle arayüz sağlar.

Raspberry Pi için ENC28J60 OVERLAYS HAT

  • Seeed tarafından üretilen bu ürün, Pi zero ENC28J60, Pi zero için basit bir Ağ Adaptörü modülüdür ve çok kolay bir şekilde monte edilir ve yapılandırılır.
  • Raspberry Pi zero’nuzun ağa sorunsuz bir şekilde erişmesini sağlar ve sistem güncellemeleri ve yazılım yükleme işlemlerini kolayca yapmanıza olanak tanır.
  • Microchip’in ENC28J60’ı, bir SPI arayüzüne sahip 28 pinli, 10BASE-T bağımsız Ethernet denetleyicisidir.
  • SPI arayüzü, ana denetleyici ile ENC28J60 arasında bir iletişim kanalı olarak hizmet eder.

Özet

SPI hakkında her şey bu kadar – Seri Peripheral Arayüzüne Giriş! SPI ile ilgili herhangi bir sorunuz varsa, aşağıdaki yorumlar bölümünde yorum yapabilirsiniz!

I2C gibi diğer iletişim çevre birimleriyle ilgileniyor musunuz? Diyagramlarla birlikte I²C hakkında her şeyi öğrenmek için I2C İletişimi – I²C Hakkında Her Şey kılavuzumuzu inceleyin.

UART, I2C ve SPI gibi farklı iletişim çevre birimleri arasındaki farkları bilmiyor musunuz? UART VS I2C VS SPI – İletişim Protokolleri ve Kullanımları kılavuzumuzu kontrol edin.

Leave a Reply

Your email address will not be published. Required fields are marked *