Tworzysz projekt i musisz wybrać pomiędzy I2C vs SPI? Ale nie wiesz, który z nich wybrać? Jeśli tak, pomożemy Ci zdecydować, który z nich jest lepszy dla Twojego projektu.

Po pierwsze, I2C i SPI to protokoły "low-end". Są jednak łatwe w użyciu i doskonale nadają się do komunikacji między układami na płytce drukowanej.

Jednak wybór niewłaściwego protokołu do projektu może przynieść niepożądane rezultaty. Mimo to pomożemy Ci zrozumieć różnicę między tymi dwoma podobnymi protokołami.

Czy jesteś gotowy? Zaczynajmy!

Co to jest protokół SPI?

W latach osiemdziesiątych XX wieku firma Motorola opracowała protokół SPI, aby umożliwić komunikację między ówczesnymi mikrokontrolerami a innymi urządzeniami peryferyjnymi, takimi jak pamięć EEPROM.

EEPROM

Źródło: 

Wikimedia Commons

Tak więc protokół SPI wykorzystuje cztery linie sygnałowe do komunikacji między elementami. Należy jednak pamiętać, że nie obejmują one linii masy i zasilania. Oto cztery aktywne linie sygnałowe:

SS: Linia Slave Select (kontrolowana przez master SPI)

MOSI: Master Out Slave In (kontrolowana przez master SPI)

SCLK: Serial Clock (kontrolowany przez master SPI)

MISO: Master In Slave Out (sterowane przez urządzenie master SPI)

W tej notatce cztery linie umożliwiają komunikację urządzenia nadrzędnego SPI (sterującego) z urządzeniem podrzędnym SPI (peryferyjnym).

Interfejs protokołu SPI

Co więcej, na magistrali SPI może znajdować się tylko jedno urządzenie sterujące. Nie ma jednak ograniczenia co do liczby urządzeń peryferyjnych, które można dodać. Ponadto dodanie większej liczby urządzeń peryferyjnych oznacza zwiększenie liczby linii SS. Dlatego poniżej pokazano, jak można użyć trzech oddzielnych linii SS do sterowania różnymi urządzeniami peryferyjnymi.

Interfejs protokołu SPI z wieloma urządzeniami podległymi

Ponadto, gdy główny SPI chce się komunikować z urządzeniami peryferyjnymi, wysyłając lub odbierając dane, pociąga za odpowiednią linię SS. W konsekwencji linia ta znajdzie się poniżej. W ten sposób aktywowana jest linia SCLK, która przyjmuje stan wysoki i niski z ustaloną częstotliwością.

Dodatkowo, master SPI wykorzystuje linię MISO do jednoczesnego wysyłania danych i próbek. Należy również pamiętać, że w danym momencie może odbywać się komunikacja tylko między jednym urządzeniem peryferyjnym a SPI master.

Co to jest I2C

Alternatywnie, w 1982 roku firma Philips Semiconductors (obecnie NXP Semiconductors) opracowała pierwszy protokół I2C w celu usystematyzowania komunikacji między układami na jednej płytce drukowanej.

W przeciwieństwie do swojego odpowiednika SCI protokół I2C ma dwie linie komunikacyjne - nie licząc linii masy i zasilania. Linie te obejmują:

SDA: Linia danych szeregowych

SCL: Linia zegara szeregowego

Do jednej magistrali można więc dołączyć dowolną liczbę urządzeń typu enslaver i agent. Linie SCL i SDA muszą być liniami typu open-drain. W rezultacie urządzenia będą miały tylko jedną linię niską w danym momencie. Ponadto na przewodach należy umieścić rezystor podciągający. W ten sposób można podciągnąć linię z powrotem do stanu wysokiego.

Interfejs protokołu I2C

Dzięki temu, że protokół I2C ma konstrukcję typu open-drain, na tej samej magistrali można używać wielu urządzeń nadrzędnych (master). Jeśli jednak dwa urządzenia kontrolera zaczną komunikować się jednocześnie, nastąpi arbitraż, który spowoduje, że jedno z urządzeń przestanie nadawać.

W międzyczasie urządzenia kontrolera monitorują linię SDA podczas komunikacji. Jeśli więc jedno z urządzeń wykryje, że linia SDA jest w stanie niskim podczas nadawania, przerywa nadawanie. Pozwala to na komunikację z innym urządzeniem kontrolera.

Ponadto urządzenie I2C kontrolera przesyła stan START, aby zainicjować komunikację. W związku z tym linia SDA będzie w stanie niskim, podczas gdy linia SCL pozostanie w stanie wysokim. 

Następnie urządzenie sterujące przesyła 7-bitowy adres odbiorcy, do którego chce wysłać dane, oraz bit odczytu (1) lub bit zapisu (0). W tym momencie urządzenie na magistrali odpowie tylko wtedy, gdy będzie miało pasujący 7-bitowy adres, ustawiając linię SDA w stan niski.

Różnice między I2C vs SPI

Protokoły SPI i I2C są do siebie podobne, ponieważ są to protokoły klasy "low-end". Ponadto oba protokoły nie mają takiej szybkości i innych cech, jakimi mogą się pochwalić ich ciężcy kuzyni (SATA, Ethernet, USB i inne). 

Ale jeśli chodzi o zasady działania i funkcje. Przyjrzyjmy się bliżej różnicom między tymi dwoma protokołami.

Złącze USB

Źródło: 

Wikimedia Commons 

Po pierwsze, w protokole SPI można ustawić cztery różne tryby pracy zegara. Aby komunikacja działała, urządzenie zniewalające i urządzenie agenta muszą mieć ten sam model. 

Ponadto szybkość transmisji danych SPI może przekraczać 10 Mb/s, dzięki czemu doskonale nadaje się do przesyłania dużych ilości danych. Protokoły SPI można również znaleźć w czujnikach o dużej szybkości aktualizacji, takich jak wyświetlacze LCD i akcelerometry.

LCD

Źródło: 

Flickr

Z kolei I2C może jednorazowo wysyłać dane w pakiecie jednobajtowym. Ponadto urządzenie peryferyjne odbierające dane musi potwierdzić każdy bajt bitem ACK. Ponadto protokół I2C ma trzy tryby o różnych szybkościach przesyłania danych. 

Bit ACK

Źródło: 

Wikimedia Commons 

Model standardowy osiąga maksymalną szybkość 100 kb/s, tryb szybki - 400 kb/s, a tryb high-speed - 3,4 Mb/s. Z tego powodu protokół I2C jest znacznie wolniejszy od protokołu SPI. W związku z tym protokół I2C najlepiej sprawdza się w czujnikach temperatury i przetwornikach analogowo-cyfrowych.

Czujniki temperatury

Źródło: 

Wikimedia Commons 

Porównanie protokołów I2C i SPI

W poniższej tabeli przedstawiono istotne różnice między protokołami I2C i SPI:

FunkcjaSPII2C
Napęd pinówTryb push-pullTryb otwarty dren
Maks. PrędkośćBrak (ale można znaleźć 10 - 100 Mb/s)100 kb/s (metoda standardowa) 400 kb/s (metoda szybka) 3,4 Mb/s (tryb szybki)
Multi-masterNieTak
Linie sygnałowe4 (dodatkowe urządzenia dodają dodatkowe linie)2
Liczba urządzeń peryferyjnychLiczba pinów dostępnych dla linii SS w SPI master jest jedynym ograniczeniem liczby urządzeń peryferyjnych, jakie można miećMaks. 112 przy adresowaniu 7-bitowym
Kontrola przepływuNieTak

Protokoły SPI i I2C - zalety i wady

SPI 

Plusy

Protokoły SPI zużywają niewielką ilość energii

Obsługuje także szybką komunikację w trybie full-duplex.

Wady

Istnieją różne wersje i niestandardowe warianty, które powodują problemy z kompatybilnością

Potrzebne są dodatkowe linie sygnałowe do komunikacji z wieloma urządzeniami peryferyjnymi na tej samej magistrali.

Obsługuje tylko komunikację na krótkich dystansach. Nie można przesyłać danych do urządzeń znajdujących się na oddzielnych płytkach.

I2C 

Zalety

Nie są potrzebne dodatkowe linie do sterowania wieloma urządzeniami na tej samej magistrali

Możliwość przesyłania danych do innych płytek drukowanych, ale przy niskiej prędkości transmisji

Niższa czułość na zakłócenia

Możliwość przesyłania danych na większe odległości

Mniejsze koszty użytkowania niż SPI

Wady

Szybkość transmisji jest mniejsza niż w przypadku SPI

Zużywa więcej energii niż protokół SPI

Niezwolnienie magistrali komunikacyjnej przez jedno urządzenie może spowodować zablokowanie protokołu I2C.

Czynniki, które należy wziąć pod uwagę przy wyborze między SPI a I2C

Wybór najlepszego protokołu dla danego projektu wykracza poza cenę. Oto kilka rzeczy, które należy wziąć pod uwagę przed dokonaniem wyboru:

Ograniczona liczba pinów

Oto zalety i wady protokołów SPI i I2C: jeśli nie lubisz używać mikrokontrolerów z więcej niż 100 pinami, jest to ważny czynnik do rozważenia. W takim przypadku należy wybrać protokół, który wymaga mniejszej liczby linii do komunikacji.

Zasilanie

W zależności od projektu możesz chcieć zminimalizować lub zmaksymalizować zużycie energii. Dlatego należy się upewnić, że wybrano protokół, który najlepiej odpowiada potrzebom zużycia energii.

Szybkość

Gdy chodzi o przesyłanie ogromnych ilości danych, każda mikrosekunda ma kluczowe znaczenie. Jeśli więc szybkość jest tym, czego potrzebujesz, wybierz protokół, który spełnia Twoje standardy szybkości.

Rozmiar płytki drukowanej

Przed wyborem protokołu należy koniecznie wziąć pod uwagę rozmiar płytki drukowanej. Zwiększy to szanse na uzyskanie pożądanych wyników.

Wybór między SPI a I2C

Oto cechy każdego z protokołów, które pomogą Ci podjąć najlepszą decyzję dla Twojego projektu:

CechySPII2C
SzybkośćJeśli projekt wymaga transmisji z większą prędkością, najlepszym wyborem jest protokół SPI.W przypadku projektów dla urządzeń o małej szybkości można wybrać protokół I2C.
Rozmiar płytki drukowanejJeśli nie przeszkadza Ci rozmiar płytki drukowanej, możesz wybrać protokół SPI lub I2C.Jeśli płytka drukowana ma mniejszy rozmiar i mniej ścieżek, warto rozważyć wybór I2C.
Ograniczona liczba pinówJeśli nie masz nic przeciwko dodatkowym liniom do komunikacji, wybierz protokół SPI.Jeśli nie chcesz korzystać z wielu ścieżek, idealnym wyborem będzie protokół I2C.
ZasilanieW przypadku urządzeń o mniejszym poborze mocy należy używać protokołu SPI.W przypadku urządzeń o większym poborze mocy należy użyć protokołu I2C.

Zrozumienie protokołu UART

UART to układy fizyczne w układzie scalonym lub mikrokontrolerze, które ustanawiają komunikację szeregową między urządzeniami w systemach wbudowanych. 

Ponadto w przypadku komunikacji UART zawsze mamy do czynienia z bezpośrednią komunikacją między nadajnikiem i odbiornikiem UART.

UART vs I2C vs SPI

W przeciwieństwie do innych protokołów komunikacyjnych, takich jak SPI i I2C, UART jest protokołem czysto fizycznym. Ponadto nie używa paradygmatu master/slave do komunikacji. Zamiast tego mikrokontroler używa dwóch urządzeń UART do wysyłania i odbierania danych. Ponadto do komunikacji UART potrzebne są tylko dwa przewody. Przewody te pomogą w przesłaniu danych z pinu Tx nadajnika do pinu Rx odbiornika.

Interfejs protokołu UART 

Zaokrąglanie

W rzeczywistości protokoły SPI i I2C są używane w różnych aplikacjach. Czasami można spotkać się z urządzeniami, które mają interfejsy SPI i I2C na jednym układzie scalonym. Nie trzeba więc wybierać między nimi.

Jeśli jednak musisz wybierać między tymi dwoma protokołami, SPI jest lepszy w projektach wymagających szybszego transferu danych. Z drugiej strony, jeśli mikrokontroler ma ograniczoną liczbę pinów, lepiej sprawdzi się protokół I2C.

Masz pytania? Zapraszamy do kontaktu z nami. Chętnie pomożemy.