Jeśli budujesz płytę deweloperską dla swojego projektu lub używasz popularnego MCU, znajdziesz wiele protokołów do komunikacji z innymi aktywnymi komponentami. Standardy takie jak USB i Ethernet są wbudowane w większość kontrolerów do pracy z peryferiami komputerowymi. Jednak protokoły takie jak I2C, SPI, UART i inne są używane do interfejsu z podrzędnymi MCU lub programowalnymi układami scalonymi. Różnice między magistralami SPI a I2C a UART są proste, i każdy projektant pracujący z MCU powinien wiedzieć, jak stosować wytyczne dotyczące trasowania i układu dla tych protokołów.
Te protokoły to standardy sygnalizacji o niższej prędkości, więc prawie zawsze nie musisz martwić się o takie rzeczy jak kontrola impedancji czy zachowanie linii transmisyjnych, jeśli pracujesz z tymi protokołami. Jednak istnieją pewne ważne punkty projektowe, które muszą być rozważone, aby zapewnić, że sygnały twoich linii magistrali są poprawnie odczytywane przez twoje odbiorniki. Jest również kwestia adresowania, ale konkretny produkt i twój kod mogą sobie z tym poradzić. Na razie przyjrzyjmy się, jak te trzy powszechne protokoły mogą być używane w układzie twojej PCB, ustalmy kilka wytycznych dotyczących układu/trasowania i omówmy kilka ważnych punktów, aby utrzymać integralność sygnału.
Wszystko od 8-bitowych do 32-bitowych MCU będzie używać przynajmniej jednego z tych protokołów wraz z GPIO do programowania i wysyłania sygnałów do prostych peryferiów. Te trzy protokoły szeregowe to protokoły magistrali; I2C i UART używają schematów adresowania, podczas gdy SPI jest bezadresowy. Chociaż SPI jest bezadresowy, jest to protokół magistrali i nadal może być używany do wybierania urządzeń podrzędnych do odbioru danych.
I2C (wymawiane I do kwadratu C, lub czasami IIC dla międzyzintegrowanego obwodu) używa dwóch linii (standardowy, szybki i bardzo szybki tryb) do sterowania innymi urządzeniami; jedna linia to linia zegarowa (SCL), a druga to linia danych (SDA). Dostępne są trzy tryby, które są podsumowane w poniższej tabeli. Należy zauważyć, że wartości czasu narastania/opadania zakładają, że typowe rezystory szeregowe są zainstalowane przy I/O.
Tryb |
Prędkość transmisji danych/prędkość zegara |
Maks. czas narastania/opadania |
Min. czas narastania/opadania |
Kierunkowość |
Standardowy |
100 kHz |
1000 ns |
- |
Dwukierunkowy |
Szybki |
400 kHz |
300 ns |
20 ns* |
Dwukierunkowy |
Szybki-plus |
1 MHz |
300 ns |
20 ns* |
Dwukierunkowy |
Wysoka prędkość |
3,4 MHz (magistrala 100 pF) 1,7 MHz (magistrala 400 pF) |
120 ns** |
15 ns** |
Dwukierunkowy |
Ultra-szybki |
5 MHz |
50 ns |
25 ns |
Jednokierunkowy |
*Zakłada VDD/VCC = 5,5 V. Skaluje się liniowo, jeśli VDD/VCC jest niższe
**Podziel te wartości przez 2 dla linii zegarowej
Należy zauważyć, że tryb ultra-szybki to jedyny tryb, w którym komunikacja jest wykorzystywana tylko do operacji zapisu w dół strumienia. Ten tryb jest również ważny, ponieważ pomaga nam zobaczyć, kiedy impedancja magistrali będzie musiała być dopasowana, co w praktycznych warunkach jest prawie nigdy. Jeśli przyjmiemy bardzo konserwatywny limit 10% na krytyczną długość linii, znajdujemy, że kluczowa długość tych linii to 0,32 m, co jest znacznie dłuższe niż rozmiar większości płyt, które będą używać I2C. Jeśli użyjemy częstotliwości kolana dla minimalnego czasu narastania/opadania z 10% limitem na krytyczną długość, dochodzimy do znacznie dłuższej wartości 0,92 m. Powinniśmy przyjąć bardziej konserwatywną liczbę 0,32 m dla trybu ultra-szybkiego; każda linia I2C krótsza niż ta wartość nie będzie zachowywać się jak linia transmisyjna, i jedyną naszą troską powinno być schemat zakończenia.
Ważne punkty w zakończeniu to wybór odpowiednich rezystorów podciągających i szeregowych. Rezystory podciągające oraz pojemność linii magistrali VDD/VCC tworzą rozładowujący i ładujący obwód RC, który dostarcza sygnał do odbiornika, gdy sterownik przełącza. Wartości rezystorów podciągających (Rp) dla linii sygnałowych i zegarowych muszą spełniać następującą nierówność:
Należy zauważyć, że liczba w mianowniku powyżej jest zdefiniowana dla czasu przejścia 30% do 70%, co jest standardem w specyfikacji I2C. Dla czasu przejścia 10%-90%, należy zastąpić 0,8473 wartością 2,2. Spowoduje to dalsze ograniczenie wartości rezystorów podciągających.
Pojemność magistrali jest określana przy użyciu standardowych wzorów dla impedancji magistrali VCC, które mogą być obliczone przy użyciu tych samych równań, co dla linii transmisyjnej (zarówno microstrip jak i stripline). Następnie można rozwiązać pojemność magistrali, korzystając z impedancji i opóźnienia propagacji dla linii. Jeśli nie masz ochoty na wykonanie tego obliczenia, można znaleźć w internecie kalkulatory pojemności magistrali I2C. Wreszcie, rezystory szeregowe są opcjonalne zgodnie ze standardem I2C, chociaż mogą być włączone w celu ochrony urządzeń przed szpilkami napięciowymi i spowolnieniem czasów narastania/opadania. Spójrz na rys. 46 na stronie 59 standardu I2C, aby określić odpowiednią wartość rezystora szeregowego do sparowania z wartością rezystora podciągającego.
Protokół SPI jest podobny do I2C. W tej magistrali używa się łącznie 4 linii, a komponenty mogą być rozmieszczone w dwóch możliwych trybach. Jeśli używane jest pojedyncze urządzenie kontrolujące do uruchomienia pojedynczego urządzenia podrzędnego, topologia jest po prostu punkt-punkt. Uruchamianie wielu urządzeń zależy od liczby wyjść wyboru układu dostarczonych przez sterownik (tryb standardowy). Drugi tryb używa łączenia szeregowego (daisy-chaining), gdzie pojedyncze wyjście wyboru urządzenia sukcesywnie uruchamia każde urządzenie w łańcuchu szeregowym.
W powyższym przykładzie, nasz kontroler ma dwa wyjścia wyboru układu, które są używane do uruchamiania, kiedy peryferia będą odbierać i akceptować dane od hosta. Kiedy dane szeregowe są wysyłane z kontrolera, wymagane peryferium również musi być aktywowane przez kontroler podczas ramki danych, aby peryferium mogło zaakceptować i odczytać dane. Jest to programowane w logice kontrolera. Na przykład, jeśli jako kontroler używany jest mikrokontroler lub FPGA, zostanie to zaimplementowane w kodzie dla aplikacji urządzenia.
W przeciwieństwie do I2C, różne parametry sygnalizacyjne w SPI są wysoce konfigurowalne. Metoda rozładowywania RC z pokazaną powyżej pojemnością ścieżki może kontrolować prąd wyjściowy oraz czasy narastania/opadania z twojego interfejsu. SPI jest interfejsem typu push-pull, a moc nie jest pobierana przez rezystor podciągający. Czas narastania jest zdominowany przez zewnętrzną pojemność i impedancję wyjściową sterownika. Specyfikacja SPI na twoim kontrolerze hosta może podać konkretny czas narastania dla określonego poboru prądu do magistrali dla określonej całkowitej pojemności (może to być 50 lub 100 pF). Na przykład, w magistrali SPI na mikrokontrolerze PIC32, czas przejścia wyjściowego jest określony jako 5 ns dla zewnętrznej pojemności 50 pF. Więc jeśli spadniemy do 10 pF, możemy oczekiwać, że czas narastania spadnie do 1 ns dla danego prądu wyjściowego i poziomu napięcia. W takim przypadku masz teraz dozwoloną długość 0,6 cala (bardzo ostrożne przybliżenie z bardzo konserwatywnym limitem 10% na niezgodne długości). Możesz wtedy użyć rezystora szeregowego do zakończenia niskiej impedancji wyjściowej sterownika, w przypadku gdy linia stanie się bardzo długa dla krótkiego czasu narastania.
Protokół uniwersalnego asynchronicznego nadajnika-odbiornika (UART) jest podobny do I2C i SPI. Interfejsy te mają maksymalną prędkość transmisji danych na poziomie ~5 Mbps. Urządzenia UART są również łatwe w obsłudze, ponieważ między urządzeniami nie jest wysyłany zegar; wszystko odbywa się asynchronicznie. Należy zauważyć, że wewnętrzny zegar (systemowy) każdego urządzenia UART musi pracować z pewną wielokrotnością szybkości transmisji (tj. każdy bit jest próbkowany N razy). Do komunikacji między pojedynczym urządzeniem sterującym a pojedynczym urządzeniem podrzędnym używane są tylko dwa przewody.
Należy zauważyć, że format danych, poziomy sygnału i szybkość transmisji urządzenia UART można konfigurować za pomocą zewnętrznego obwodu sterownika. To, czy zobaczysz zachowanie sygnałów wysokiej prędkości, zależy od tego, czy transmitujesz z poziomami sygnału RS-232 czy RS-485. Sygnały UART na poziomach RS-232 są zwykle realizowane bez zakończenia, ponieważ szybkości zboczy są wolne. Jednakże, RS-485 z sygnałami UART zwykle wymaga rezystorów zakończeniowych. Postępuj zgodnie ze standardowymi wytycznymi projektowania wysokiej prędkości, aby określić, kiedy zakończenie jest potrzebne, patrząc na przejście do zachowania linii transmisyjnej (zobacz artykuł, który podlinkowałem powyżej).
Typową metodą zakończenia mającą na celu redukcję przeregulowania, jeśli wystąpi, jest zastosowanie zakończenia szeregowego. Należy zauważyć, że UART może być w stanie spoczynku na wysokim lub niskim poziomie, i mogą być potrzebne rezystory podciągające, aby ustawić wymagany poziom spoczynkowy; upewnij się, że sprawdziłeś specyfikacje swoich komponentów przed dodaniem rezystorów podciągających.
Możesz przeczytać więcej o różnicy między czasowaniem w magistralach synchronicznych i asynchronicznych w tej prezentacji z AltiumLive 2018 autorstwa Maxa Seeleya.
Jeśli zasady dotyczące SPI i UART wydają się nieco niejasne, to dlatego, że masz większą swobodę w projektowaniu interfejsu na poziomie firmware. Gdy którykolwiek z tych standardów działa z szybkimi prędkościami zboczy, są one podatne na przebicie sygnału, podobnie jak standardy sygnalizacji wysokiej prędkości. Jednak, ponieważ masz dużą elastyczność w swojej specyfikacji, zazwyczaj możesz zaprojektować ścieżki tak, aby miały niższą indukcyjność i zmniejszyć indukcyjne przebicie sygnału. Masz pewną elastyczność w trasowaniu tych sygnałów i sprawieniu, że będą one bardzo łatwe do pracy w twoim następnym systemie cyfrowym.
Podczas projektowania systemów cyfrowych z wykorzystaniem standardowych protokołów sygnałowych, możesz zaprojektować różnice między układami I2C, SPI oraz UART, korzystając z zasad projektowania w Altium Designer®. Menedżer Stosu Warstw oraz zintegrowany 3D solver pola od Simberian wykorzystują geometrię twojej płytki i ścieżek do ekstrakcji pasożytniczych elementów w twoich liniach sygnałowych i pomagają określić impedancje, jeśli twoje sygnały kiedykolwiek osiągną zbyt długie długości lub wysokie prędkości.
Altium Designer na Altium 365 dostarcza niespotykany dotąd poziom integracji dla branży elektronicznej, dotychczas zarezerwowany dla świata rozwoju oprogramowania, umożliwiając projektantom pracę z domu i osiąganie niespotykanych poziomów efektywności.
Dopiero zaczynamy odkrywać, co jest możliwe do zrobienia z Altium Designer na Altium 365. Możesz sprawdzić stronę produktu po bardziej szczegółowy opis funkcji lub jeden z Webinarów na Żądanie.