SPI

SPI library

Bu kütüphane, ana cihaz olarak Arduino ile SPI cihazlarıyla iletişim kurmanızı sağlar.

Bu kütüphaneyi kullanmak için
#include <SPI.h>

Seri Çevresel Arabirime (SPI) Kısa Bir Giriş

Seri Çevresel Arabirim (SPI), mikro denetleyiciler tarafından kısa mesafelerde bir veya daha fazla çevresel aygıtla hızlı bir şekilde iletişim kurmak için kullanılan senkronize bir seri veri protokolüdür. İki mikrodenetleyici arasındaki iletişim için de kullanılabilir.

Bir SPI bağlantısı ile her zaman çevresel aygıtları kontrol eden bir ana aygıt (genellikle bir mikro denetleyici) vardır. Genellikle tüm aygıtlar için ortak üç hat vardır:

  • MISO (Master In Slave Out) - The Slave line for sending data to the master,
  • MOSI (Master Out Slave In) - The Master line for sending data to the peripherals,
  • SCK (Serial Clock) - The clock pulses which synchronize data transmission generated by the master

ve her cihaza özel bir hat:

  • SS (Slave Select) - the pin on each device that the master can use to enable and disable specific devices.

Bir cihazın Slave Select pini düşük olduğunda, master ile iletişim kurar. Yüksek olduğunda efendiyi yok sayar. Bu, aynı MISO, MOSI ve CLK hatlarını paylaşan birden fazla SPI cihazına sahip olmanızı sağlar.

Yeni bir SPI cihazının kodunu yazmak için birkaç şeye dikkat etmeniz gerekir:

  • What is the maximum SPI speed your device can use? This is controlled by the first parameter in SPISettings. If you are using a chip rated at 15 MHz, use 15000000. Arduino will automatically use the best speed that is equal to or less than the number you use with SPISettings.
  • Is data shifted in Most Significant Bit (MSB) or Least Significant Bit (LSB) first? This is controlled by second SPISettings parameter, either MSBFIRST or LSBFIRST. Most SPI chips use MSB first data order.
  • Is the data clock idle when high or low? Are samples on the rising or falling edge of clock pulses? These modes are controlled by the third parameter in SPISettings.

SPI standardı gevşektir ve her cihaz biraz farklı uygular. Bu, kodunuzu yazarken cihazın veri sayfasına özellikle dikkat etmeniz gerektiği anlamına gelir.

Genel olarak konuşursak, dört iletim şekli vardır. Bu modlar, verinin veri saati sinyalinin yükselen veya düşen kenarında (saat fazı olarak adlandırılır) kaydırılıp kaydırılmadığını ve saatin yüksek veya düşük olduğunda (saat polaritesi olarak adlandırılır) boşta olup olmadığını kontrol eder. Dört mod, polarite ve fazı bu tabloya göre birleştirir:

kip Saat Polaritesi (CPOL) Saat Fazı (CPHA) Çıktı Kenarı Veri yakalama
SPI_MODE0 0 0 düşen Yükselen
SPI_MODE1 0 1 Yükselen düşen
SPI_MODE2 1 0 Yükselen düşen
SPI_MODE3 1 1 düşen Yükselen

SPI parametrelerinizi aldıktan sonra, SPI bağlantı noktasını kullanmaya başlamak için SPI.beginTransaction () öğesini kullanın. SPI bağlantı noktası tüm ayarlarınızla yapılandırılacaktır. SPISettings'i kullanmanın en basit ve etkili yolu doğrudan SPI.beginTransaction () içinde yer alır. Örneğin:

SPI.beginTransaction( SPISettings (14000000, MSBFIRST, SPI_MODE0));

Diğer kütüphaneler SPI.endTransaction() kesintilerden kullanırsa, siz SPI.endTransaction() kadar SPI.endTransaction() erişmeleri engellenir. İşlemin başlaması ve en SPI ayarları uygulanır SPI.endTransaction() SPI ayarlarını değiştirmez. Eğer, ya da bazı kütüphane, ikinci kez beginTransaction çağırır sürece, ayar korunur. Programınız SPI kullanan diğer kitaplıklarla birlikte kullanılıyorsa, en iyi uyumluluk için SPI.endTransaction() önce arasındaki süreyi en aza indirmeye çalışmalısınız.

Çoğu SPI cihazında, SPI.beginTransaction() sonra, bağımlı seçim pinini DÜŞÜK yazar, veri aktarmak için istediğiniz sayıda SPI.transfer() öğesini çağırır, ardından SS pinini YÜKSEK yazar ve son olarak SPI.endTransaction() .

SPI hakkında daha fazla bilgi için Wikipedia'nın SPI sayfasına bakın.

Bağlantılar

Aşağıdaki tablo, farklı Arduino kartlarında SPI hatlarının hangi pimlerin kesildiğini gösterir:

Arduino / Genuino Kurulu MOSI MİSO SCK SS (köle) SS (master) seviye
Uno veya Duemilanove 11 veya ICSP-4 12 veya ICSP-1 13 veya ICSP-3 10 - 5V
Mega1280 veya Mega2560 51 veya ICSP-4 50 veya ICSP-1 52 veya ICSP-3 53 - 5V
Leonardo ICSP-4 ICSP-1 ICSP-3 - - 5V
nedeniyle SPI-4 SPI-1 SPI-3 - 4, 10, 52 3,3V
Sıfır ICSP-4 ICSP-1 ICSP-3 - - 3,3V
101 11 veya ICSP-4 12 veya ICSP-1 13 veya ICSP-3 10 10 3,3V
MKR1000 8 10 9 - - 3,3V

MISO, MOSI ve SCK'nin ICSP başlığında tutarlı bir fiziksel konumda bulunduğunu unutmayın; bu, örneğin, her tahtada çalışan bir kalkanın tasarlanmasında yararlıdır.

AVR tabanlı kartlardaki Slave Select (SS) pimi hakkında not

Tüm AVR tabanlı kartlar, harici bir master tarafından kontrol edilen bir slave olarak hareket ettiklerinde yararlı olan bir SS pinine sahiptir. Bu kütüphane yalnızca ana modu desteklediğinden, bu pim her zaman ÇIKIŞ olarak ayarlanmalıdır, aksi takdirde SPI arayüzü donanım tarafından otomatik olarak bağımlı moda geçerek kütüphaneyi çalışmaz hale getirir.

Bununla birlikte, cihazlar için Slave Select (SS) olarak herhangi bir pimi kullanmak mümkündür. Örneğin, Arduino Ethernet kalkanı, yerleşik SD karta SPI bağlantısını kontrol etmek için pin 4'ü ve Ethernet denetleyicisine bağlantıyı kontrol etmek için pin 10'u kullanır.

Örnekler



Son düzeltme 2019/12/24 by SM

Fonksiyonlar

Ayrıca bakınız