SPI Nedir?
Serial Peripheral Interface/ Seri Çevre Birimi Ara yüzü (SPI), mikrodenetleyiciler, shift registerlar, sensörler ve SD kartlar gibi küçük çevre birimleri arasında veri göndermek için yaygın olarak kullanılan bir haberleşme veri yoludur.
İletişime geçmek istediğiniz cihazı seçmek için bir seçim hattı ile birlikte ayrı saat ve veri hatları kullanır.
Seri iletişim, bir iletişim kanalı veya veri yolu üzerinden sırayla, her seferinde bir bit veri gönderme işlemidir.
UART, CAN, USB, I2C ve SPI iletişimi gibi birçok seri iletişim türü vardır.
SPI (Serial Peripheral Interface) Protokolü
- Serial Peripheral Interface Bus ya da SPI veri yolu full duplex modda çalışan senkron bir seri veri bağlantısı standardıdır.
- Master/Slave kipinde çalışan aygıtlardan master aygıt veri çerçevesini başlatır.
- Birden fazla slave aygıt varsa kendilerine ait çırak seçim (çip seçim) teliyle seçilebilirler.
- SPI, benzer seri iletişim biçimlerinden daha fazla tele ihtiyaç duyar.
- Bu nedenle dört telli olarak da anılır.
SPI Arayüz
SPI veri yolu dört lojik sinyal tanımlar
- SCLK: Seri Saat (master aygıt çıkışı);
- MOSI; SIMO: master Çıkış, slave aygıt giriş (Master dan Slave e veriyi Gönderir)
- MISO; SOMI: Usta aygıt Giriş, slave Çıkış;(Slave den Master a veriyi gönderir)
- SS: slave seçimi (Seçim yapılan Slave LOW seçilmeyen ise HIGH olur)
Farklı adlandırmalar da sıklıkla kullanılır
- SCK; CLK: Seri Saat (birincil aygıt çıkışı)
- SDI; DI, DIN, SI: Serial Data In; Data In, Serial In
- SDO; DO, DOUT, SO: Serial Data Out; Data Out, Serial Out
- nCS, CS, CSB, CSN, nSS, STE: Chip Select, Slave Transmit Enable (düşünce aktif, birincil aygıt çıkışı)
SDI/SDO (DI/DO, SI/SO) geleneği birincil aygıttaki SDO pininin ikincil aygıttaki SDI pinine bağlanmasını gerekli kılar. Çip seçim kutbu nadiren yükselince aktif olarak kullanılır.
Kod ve Fonksiyon Açıklamaları
SPI.h kütüphanesi projeye dahil edilince gelen fonksiyonlar
- SPI.begin(): SCK, MOSI ve SS’yi çıkışlara ayarlayarak, SCK ve MOSI’yi düşüğe ve SS’yi yükseğe çekerek SPI veri yolunu başlatır.
- SPI.setClockDivider(bölücü): SPI saat bölücüyü sistem saatine göre ayarlamak için. AVR tabanlı kartlarda, mevcut bölücüler 2, 4, 8, 16, 32, 64 veya 128’dir. Varsayılan ayar, SPI saatini sistem saatinin frekansının dörtte birine ayarlayan SPI_CLOCK_DIV4’tür. (20MHz’de çalışan kartlarda 5MHz olur.)
- bölücü: (SPI_CLOCK_DIV2, SPI_CLOCK_DIV4, SPI_CLOCK_DIV8, SPI_CLOCK_DIV16, SPI_CLOCK_DIV32, SPI_CLOCK_DIV64, SPI_CLOCK_DIV128) olabilir.
- SPI.transfer(val): SPI aktarımı, eşzamanlı gönderme ve alma işlemine dayalıdır: alınan veriler receivedVal’de döndürülür.
- SPI.beginTransaction(SPISettings(speedMaximum, dataOrder, dataMode)): speedMaximum saattir, dataOrder(MSBFIRST veya LSBFIRST), dataMode(SPI_MODE0, SPI_MODE1, SPI_MODE2 veya SPI_MODE3) olabilir.
SPI’de aşağıdaki gibi dört çalışma modu vardır:
- Mode 0 (varsayılan): Saat normalde düşüktür (CPOL = 0) ve veriler düşükten yükseğe geçişte (ön uç) örneklenir (CPHA = 0).
- Mode 1: Saat normalde düşüktür (CPOL = 0) ve veriler yüksekten düşüğe geçişte (arka kenar) örneklenir (CPHA = 1).
- Mode 2: Saat normalde yüksektir (CPOL = 1) ve veriler yüksekten düşüğe geçişte (ön uç) örneklenir (CPHA = 0).
- Mode 3: Saat normalde yüksektir (CPOL = 1) ve veriler düşükten yükseğe geçişte (arka kenar) örneklenir (CPHA = 1).
- SPI.attachInterrupt(handler): Bir bağımlı cihaz ana cihazdan veri aldığında çağrılacak fonksiyon.
SPI Avantajları ve Dezavantajları
Avantajları
- Asenkron seri haberleşmeden daha hızlıdır
- Veri alma donanımı basit bir shift register olabilir
- Birden fazla çevre birimini(alıcı) destekler
Dezavantajları
- Diğer iletişim yöntemlerinden daha fazla sinyal hattı (kablo) gerektirir
- İletişim önceden iyi tanımlanmış olmalıdır (istediğiniz zaman rastgele miktarda veri gönderemezsiniz)
- Denetleyici tüm iletişimi kontrol etmelidir (çevre birimleri doğrudan birbirleriyle konuşamaz)
- Genellikle her bir çevre birimi için ayrı CS hatları gerektirir; bu, çok sayıda çevre birimine ihtiyaç duyulursa sorunlu olabilir.