Biblioteka ta umożliwia komunikację z urządzeniami SPI, z Arduino jako urządzeniem głównym.
Aby korzystać z tej biblioteki#include <SPI.h>
Krótkie wprowadzenie do szeregowego interfejsu peryferyjnego (SPI)
Szeregowy Interfejs peryferyjny (SPI) jest synchronicznym szeregowym protokołem danych używanym przez mikrokontrolery do szybkiej komunikacji z jednym lub kilkoma urządzeniami peryferyjnymi na krótkich dystansach. Może być również używany do komunikacji między dwoma mikrokontrolerami.,
przy połączeniu SPI istnieje zawsze jedno urządzenie główne (Zwykle mikrokontroler), które steruje urządzeniami peryferyjnymi., Zazwyczaj istnieją trzy linie wspólne dla wszystkich urządzeń:
- MISO (Master in Slave Out) – linia Slave do wysyłania danych do urządzenia master,
- MOSI (Master Out Slave In) – Linia Master do wysyłania danych do urządzeń peryferyjnych,
- SCK (Serial Clock) – impulsy zegara synchronizujące transmisję danych generowaną przez master
i jedna linia specyficzna dla każdego urządzenia:
- SS (Slave IN wybierz) – pin na każdym urządzeniu, którego master może używać do włączania i wyłączania określonych urządzeń.,
gdy Pin Select urządzenia jest niski, komunikuje się on z master. Kiedy jest na haju, ignoruje mistrza. Pozwala to na posiadanie wielu urządzeń SPI współdzielących te same linie MISO, MOSI i CLK.
aby napisać kod dla nowego urządzenia SPI, musisz zwrócić uwagę na kilka rzeczy:
- Jaka jest maksymalna prędkość SPI Twojego urządzenia? Jest to kontrolowane przez pierwszy parametr w SPISettings. Jeśli używasz Chipa o częstotliwości 15 MHz, użyj 15000000. Arduino automatycznie użyje najlepszej prędkości, która jest równa lub mniejsza niż liczba, której używasz w SPISettings.,
- czy dane są najpierw przesuwane w najbardziej znaczącym Bitie (MSB) lub najmniej znaczącym Bitie (LSB)? Jest to kontrolowane przez drugi parametr SPISettings, MSBFIRST lub LSBFIRST. Większość układów SPI wykorzystuje MSB first Data order.
- czy zegar danych jest bezczynny, gdy jest wysoki czy niski? Czy próbki znajdują się na rosnącej lub opadającej krawędzi impulsów zegara? Tryby te są kontrolowane przez trzeci parametr w SPISettings.
standard SPI jest luźny i każde urządzenie implementuje go nieco inaczej. Oznacza to, że podczas pisania kodu musisz zwrócić szczególną uwagę na arkusz danych urządzenia.,
Ogólnie rzecz biorąc, istnieją cztery tryby transmisji. Te tryby kontrolują, czy dane są przesuwane i wyłączane na rosnącej lub opadającej krawędzi sygnału zegara danych (zwanego fazą zegara) oraz czy zegar jest bezczynny, gdy jest wysoki lub niski (zwany polaryzacją zegara).,se according to this table:
Mode | Clock Polarity (CPOL) | Clock Phase (CPHA) | Output Edge | Data Capture |
SPI_MODE0 | 0 | 0 | Falling | Rising |
SPI_MODE1 | 0 | 1 | Rising | Falling |
SPI_MODE2 | 1 | 0 | Rising | Falling |
SPI_MODE3 | 1 | 1 | Falling | Rising |
Once you have your SPI parameters, use SPI.,beginTransaction (), aby rozpocząć korzystanie z portu SPI. Port SPI zostanie skonfigurowany z Twoimi wszystkimi ustawieniami. Najprostszym i najbardziej efektywnym sposobem użycia SPISettings jest bezpośrednio wewnątrz SPI.beginTransaction ().Na przykład:
SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));
jeśli inne biblioteki używają SPI z przerwań, nie będą miały dostępu do SPI dopóki nie wywołasz SPI.endTransaction()
. Ustawienia SPI są stosowane na początku transakcji i SPI.endTransaction()
nie zmieniają ustawień SPI., O ile ty, lub jakaś biblioteka, wywołania rozpoczynają siętransakcja po raz drugi, ustawienie jest utrzymywane. Powinieneś spróbować zminimalizować czas pomiędzy wywołaniem SPI.endTransaction()
, aby uzyskać najlepszą kompatybilność, jeśli twój program jest używany razem z innymi bibliotekami używającymi SPI.
w przypadku większości urządzeń SPI, po SPI.beginTransaction()
, zapiszesz pin select Slave LOW, wywołasz SPI.transfer()
dowolną liczbę razy, aby przesłać dane, a następnie zapiszesz PIN SS HIGH, a na koniec wywołasz SPI.endTransaction()
.
więcej o SPI znajdziesz na stronie Wikipedii o SPI.,
połączenia
poniższa tabela pokazuje, na których pinach linie SPI są podzielone na różnych tablicach Arduino:
zauważ, że MISO, MOSI i SCK są dostępne w spójnej fizycznej lokalizacji w nagłówku ICSP; jest to przydatne, na przykład, w projektowaniu tarczy, która działa na każdej tablicy.
uwaga na temat Pin Select (SS) na płytach opartych na AVR
wszystkie płyty oparte na AVR mają pin SS, który jest przydatny, gdy działają jako slave kontrolowane przez zewnętrzny master., Ponieważ ta biblioteka obsługuje tylko tryb master, ten pin powinien być ustawiony zawsze jako wyjście, w przeciwnym razie interfejs SPI może być automatycznie przełączony w tryb slave przez sprzęt, co spowoduje, że biblioteka nie będzie działać.
jest jednak możliwe użycie dowolnego pinu jako Slave Select (SS) dla urządzeń. Na przykład Arduino Ethernet shield wykorzystuje pin 4 do sterowania połączeniem SPI z pokładową kartą SD, a pin 10 do sterowania połączeniem z kontrolerem Ethernet.
przykłady
- Czujnik ciśnienia barometrycznego: odczyt ciśnienia powietrza i temperatury z czujnika za pomocą protokołu SPI.,
- Digital Pot Control: sterowanie potencjometrem cyfrowym AD5206 za pomocą protokołu SPI.
Ostatnia zmiana 2019/12/24 przez SM