SPI kontra I2C: wybór najlepszego protokołu pamięci
Niezależnie od ostatecznego wyboru oba protokoły, SPI oraz I2C, wymagają równoległego poprowadzenia sygnałów oraz podobnej długości ścieżek, a decyzja będzie miała wpływ nie tylko na przygotowywany projekt, ale również na czas realizacji oraz wydajność.
Któregoś dnia wybrałem się po buty i zdałem sobie dokładnie sprawę, czemu nie robię tego tak często: ze względu na wszystkie parametry. Chciałem kupić konkretnie trampki, więc miałem do czynienia ze wskaźnikami dotyczącymi komfortu, sprężystości, trwałości, odporności na wodę, wagi, rozmiaru, wsparcia podbicia i wieloma innymi. Czasami wydaje się, że trzeba skończyć studia, tylko po to, by być w stanie znaleźć właściwe buty dla siebie. To właśnie nazywam nadmiarem informacji.
Z podobnie uciążliwymi decyzjami mamy do czynienia przy projektowaniu układów elektronicznych, gdy trzeba wybrać protokół pamięci Serial Peripheral Interface (SPI) albo Inter-Integrated Circuit (I2C). Decyzja jest jeszcze trudniejsza, gdy obie opcje nie różnią się specjalnie pod względem kosztów. Żeby można było śledzić potrzeby w zakresie parametrów układów pamięci, trzeba wiedzieć, co te funkcje zapewnią dla projektowanego produktu.
Podstawy dotyczące SPI i I2C
SPI to protokół komunikacji o konfiguracji typu „pełny dupleks”. Do komunikacji między urządzeniem nadrzędnym a urządzeniem nadrzędnym wykorzystywane są cztery sygnały: Chip Select (CS), Clock (SCK), Master Out / Slave In (MOSI) oraz Master In / Slave Out (MISO). Pojedyncze połączenie urządzenia nadrzędnego z urządzeniem podrzędnym wymaga jednego sygnału CS. To oznacza, że jeśli do tej samej magistrali zostanie podłączonych więcej niż jedno urządzenie podrzędne, liczba sygnałów CS wzrośnie.
Nie ma oficjalnego limitu prędkości dla magistrali SPI. Bardzo często mikrokontrolery sterują magistralą SPI z prędkościami do 10 MHz. Istnieją cztery tryby SPI, w których dane są przerzucane przy różnych zboczach i różnej polaryzacji sygnału taktującego. Jednak nie ma standardowego mechanizmu, który umożliwiałby urządzeniu nadrzędnemu potwierdzać, że dane zostały pomyślnie odebrane i zapisane przez urządzenie podrzędne.
Z kolei magistrala I2C potrzebuje tylko dwóch przewodów: danych szeregowych (SDA) i zegara szeregowego (SCLK). Pracuje ona ze znacznie mniejszą prędkością 100 kHz, chociaż możliwe jest uzyskanie wyższych prędkości, których większość mikrokontrolerów może nie obsługiwać. Urządzenia podrzędne podłączone do magistrali I2C są identyfikowane na podstawie adresu chipa definiowanego przez osprzęt. Liczba styków sygnałowych mikrokontrolera jest najmniejsza w przypadku magistrali I2C.
Dobrze zdefiniowany standard dla protokołu I2C obejmuje nie tylko prędkość protokołu, ale również polecenia, inicjalizację, transfer danych oraz potwierdzenia pomiędzy urządzeniem nadrzędnym a urządzeniem podrzędnym. Dzięki temu wszystkie urządzenia obsługujące protokół I2C działają w oparciu o jeden standard, co ułatwia implementację.
Istotne kwestie przy wyborze protokołu SPI albo I2C dla pamięci
Oba protokoły, SPI oraz I2C, są powszechnie stosowane z pamięciami szeregowymi, takimi jak Static Random Access Memory (SRAM), Flash czy Electrically Erasable Programmable Read-Only Memory (EEPROM). Żeby ustalić, który protokół będzie najlepiej odpowiadał wymogom projektu, nie wystarczy samo porównanie kosztów. Oto kilka istotnych kwestii, które mogą ułatwić podejmowanie decyzji:
1. Prędkość
W przypadku masowego transferowania danych lub bardzo wąskiego okna na zweryfikowanie danych wejściowych użytkownika względem danych zapisanych w pamięci liczy się każda mikrosekunda. Jeśli głównym problemem jest prędkość, warto wybrać protokół SPI, który zapewnia typową prędkość transferu danych 10 MHz, czyli znacznie większą niż maksymalna prędkość I2C, która wynosi 400 KHz
2. Ograniczona liczba styków
Nie wszyscy projektanci osprzętu mogą cieszyć się z korzystania z wysokiej jakości mikrokontrolerów z ponad 100 stykami. Niektórzy mają trudności z podłączeniem pamięci do mikrokontrolerów z 28 stykami. W takich przypadkach idealnym rozwiązaniem jest protokół I2C, który wymaga tylko pary ścieżek do komunikacji.
3. Rozmiar PCB
Jeśli nie musimy przestrzegać żadnych ograniczeń w zakresie rozmiarów PCB, to każdy z tych protokołów stanowi dobre rozwiązanie. Jednak gdy próbujemy wcisnąć płytkę PCB w niewielką obudowę, a mniejsza liczba ścieżek oznacza mniejszy rozmiar PCB, to lepszym wyborem okazuje się być protokół I2C.
4. Błędy i ich korygowanie
Żaden projektant nie jest doskonały i to samo dotyczy protokołu I2C. Magistrala I2C jest wrażliwa na błędy i blokady, ponieważ zarówno wysyłanie, jak i odbieranie danych odbywa się przy wykorzystaniu tych samych ścieżek. Jeśli urządzenie nadrzędne nie zwolni magistrali na czas, urządzenie podrzędne może przełączyć się w stan blokady, ponieważ wysłało odpowiedź, której urządzenie nadrzędne nie odebrało. Korygowanie błędów może być dość trudne, ponieważ w niektórych przypadkach trzeba będzie zresetować zasilanie zablokowanych urządzeń.
5. Zasilanie
W przypadku projektowania urządzeń zasilanych baterią lub energią słoneczną, trzeba minimalizować zużycie mocy. Urządzenia I2C ogólnie zużywają więcej mocy niż SPI i jeśli pobór mocy stanowi problem, lepiej zastosować protokół SPI w swoim projekcie
Niezależnie od ostatecznego wyboru oba protokoły, SPI oraz I2C, wymagają równoległego poprowadzenia sygnałów oraz podobnej długości ścieżek, aby nie dopuszczać do jakichkolwiek błędów. Podjęta decyzja będzie miała wpływ nie tylko na przygotowywany projekt, ale również na czas realizacji oraz ogólną wydajność.
Artykuł opublikowano dzięki uprzejmości firmy Altium
Kontakt w Polsce: Paweł Czyż 692 273 540