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:
| Funkcja | SPI | I2C |
| Napęd pinów | Tryb push-pull | Tryb 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-master | Nie | Tak |
| Linie sygnałowe | 4 (dodatkowe urządzenia dodają dodatkowe linie) | 2 |
| Liczba urządzeń peryferyjnych | Liczba 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ływu | Nie | Tak |
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:
| Cechy | SPI | I2C |
| 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 drukowanej | Jeś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ów | Jeś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. |
| Zasilanie | W 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.