USART, UART, RS232, USB, SPI, I2C, TTL itp. Co to wszystko jest i jak się ze sobą wiążą?


165

Jako początkujący miłośnik elektroniki słyszałem, że te warunki i inne są wszędzie rozpowszechniane. U podstaw rozumiem, że wszystkie opierają się na komunikacji między urządzeniami, komputerami, urządzeniami peryferyjnymi itp.

Mam podstawową wiedzę o tym, jak działają wszystkie, ale wprawiają mnie w zakłopotanie, gdy widzę ich tak wielu i mam trudności ze zrozumieniem, w jaki sposób się ze sobą wiążą. Na przykład, czy UART jest podzbiorem USART? Jaka jest różnica między RS232 a szeregowym? Jakie są podstawowe różnice między tymi wszystkimi metodami komunikacji: niezawodność, koszt, zastosowanie, szybkość, wymagania sprzętowe?

Jeśli możesz sobie wyobrazić, mam wszystkie te warunki zapisane na kartach, rozrzucone na stoliku do kawy, i potrzebuję kogoś, kto pomoże mi zorganizować zrozumienie. Wybacz mi, jeśli to pytanie jest trochę niejasne, ale naprawdę czuję, że taka jest natura tego pytania.


Odpowiedzi:


253

Szeregowy jest terminem uniwersalnym dla wszystkiego, co jest „Time Division Multiplexed”, aby użyć drogiego terminu. Oznacza to, że dane są przesyłane w czasie, najczęściej jeden bit po drugim. Wszystkie protokoły, które nazywasz, są protokołami szeregowymi.

UART, dla Universal Asynchronous Receiver Transmitter, jest jednym z najczęściej używanych protokołów szeregowych. Jest prawie tak stary jak ja i bardzo prosty. Większość kontrolerów ma sprzętowy UART na pokładzie. Wykorzystuje pojedynczą linię danych do transmisji i linię do odbioru danych. Najczęściej przesyłane są 8-bitowe dane w następujący sposób: 1 bit startowy (niski poziom), 8 bitów danych i 1 bit stopowy (wysoki poziom). Bit początkowy niskiego poziomu i bit stopowy wysokiego poziomu oznaczają, że zawsze istnieje przejście od wysokiego do niskiego poziomu w celu rozpoczęcia komunikacji. Tak opisuje UART. Brak poziomu napięcia, więc możesz go mieć przy 3,3 V lub 5 V, w zależności od tego, który używa twój mikrokontroler. Zwróć uwagę, że mikrokontrolery, które chcą komunikować się za pośrednictwem UART, muszą uzgodnić prędkość transmisji, szybkość transmisji, ponieważ mają tylko synchronizujące się bity początkowe. To się nazywa komunikacja asynchroniczna.

W przypadku komunikacji na duże odległości (nie musi to być setki metrów) 5 V UART nie jest bardzo niezawodny, dlatego jest zamieniany na wyższe napięcie, zwykle +12 V dla „0” i -12 V dla „0” 1 ”. Format danych pozostaje taki sam. Następnie masz RS-232 (który tak naprawdę powinieneś nazywać EIA-232, ale nikt tego nie robi).

Zależność czasowa jest jedną z głównych wad UART, a rozwiązaniem jest USART dla uniwersalnego nadajnika odbiornika synchronicznego / asynchronicznego. Może to zrobić UART, ale także protokół synchroniczny. W trybie synchronicznym przesyłane są nie tylko dane, ale także zegar. Z każdym bitem impuls zegarowy mówi odbiornikowi, że powinien zatrzasnąć ten bit. Protokoły synchroniczne albo wymagają większej przepustowości, jak w przypadku kodowania Manchester, lub dodatkowego przewodu do zegara, takiego jak SPI i I2C.

SPI (Serial Peripheral Interface) to kolejny bardzo prosty protokół szeregowy. Mistrz wysyła sygnał zegarowy i po każdym impulsie zegarowym przesuwa jeden bit do urządzenia podrzędnego, a drugi do wewnątrz, wychodząc z urządzenia podrzędnego. Nazwy sygnałów to SCK dla zegara, MOSI dla Master Out Slave In i MISO dla Master In Slave Out. Za pomocą sygnałów SS (Slave Select) master może sterować więcej niż jednym slave na magistrali. Istnieją dwa sposoby podłączenia wielu urządzeń podporządkowanych do jednego urządzenia nadrzędnego, jedno jest wspomniane powyżej, tj. Za pomocą wyboru podrzędnego, a drugi to łączenie łańcuchowe, wykorzystuje mniejszą liczbę pinów sprzętowych (wybrane linie), ale oprogramowanie komplikuje się.

I2C(Inter-Integrated Circuit, wymawiane „I squared C”) jest również protokołem synchronicznym i jest to pierwszy, który widzimy, który ma w sobie trochę „inteligencji”; inne głupio przesuwały się między sobą i to wszystko. I2C wykorzystuje tylko 2 przewody, jeden do zegara (SCL) i jeden do danych (SDA). Oznacza to, że master i slave wysyłają dane tym samym przewodem, ponownie kontrolowanym przez master, który tworzy sygnał zegara. I2C nie używa osobnych ustawień Slave do wyboru konkretnego urządzenia, ale ma adresowanie. Pierwszy bajt wysłany przez urządzenie nadrzędne ma 7-bitowy adres (dzięki czemu można użyć 127 urządzeń na magistrali) i bit do odczytu / zapisu wskazujący, czy następny bajt (y) również będzie pochodzić od urządzenia nadrzędnego, czy powinien pochodzić z niewolnik. Po każdym bajcie odbiorca musi wysłać „0”, aby potwierdzić odbiór bajtu, które master zatrzaskuje za pomocą 9 impulsu zegarowego. Jeśli master chce zapisać bajt, ten sam proces powtarza się: master umieszcza bit po bicie na szynie i za każdym razem podaje impuls zegarowy, aby zasygnalizować, że dane są gotowe do odczytu. Jeśli master chce odbierać dane, generuje tylko impulsy zegara. Slave musi zadbać o to, aby następny bit był gotowy po podaniu impulsu zegara. Protokół ten jest opatentowany przez NXP (wcześniej Phillips), aby zaoszczędzić na kosztach licencyjnych. Atmel używa słowa TWI (interfejs 2-przewodowy), który jest dokładnie taki sam jak I2C, więc każde urządzenie AVR nie będzie miało I2C, ale będzie miało TWI. Jeśli master chce odbierać dane, generuje tylko impulsy zegara. Slave musi zadbać o to, aby następny bit był gotowy po podaniu impulsu zegara. Protokół ten jest opatentowany przez NXP (wcześniej Phillips), aby zaoszczędzić na kosztach licencyjnych. Atmel używa słowa TWI (interfejs 2-przewodowy), który jest dokładnie taki sam jak I2C, więc każde urządzenie AVR nie będzie miało I2C, ale będzie miało TWI. Jeśli master chce odbierać dane, generuje tylko impulsy zegara. Slave musi zadbać o to, aby następny bit był gotowy po podaniu impulsu zegara. Protokół ten jest opatentowany przez NXP (wcześniej Phillips), aby zaoszczędzić na kosztach licencyjnych. Atmel używa słowa TWI (interfejs 2-przewodowy), który jest dokładnie taki sam jak I2C, więc każde urządzenie AVR nie będzie miało I2C, ale będzie miało TWI.

Dwa lub więcej sygnałów na tym samym przewodzie może powodować konflikty i miałbyś problem, jeśli jedno urządzenie wyśle ​​„1”, a drugie „0”. Dlatego magistrala jest okablowana LUB: dwa rezystory podnoszą magistralę na wysoki poziom, a urządzenia wysyłają tylko niskie poziomy. Jeśli chcą wysłać wysoki poziom, po prostu zwalniają autobus.

TTL (Transistor Transistor Logic) nie jest protokołem. Jest to starsza technologia dla logiki cyfrowej, ale nazwa jest często używana w odniesieniu do napięcia zasilania 5 V, często niepoprawnie odnosząc się do tego, co należy nazwać UART.


O każdym z nich możesz napisać książkę i wygląda na to, że jestem na dobrej drodze. To jest bardzo krótki przegląd, daj nam znać, jeśli niektóre rzeczy wymagają wyjaśnienia.


+1 tylko w TTL, zgaduję, że OP oznacza Szeregowy TTL, który z mojego doświadczenia opisuje sygnały UART przed transiwerem / sterownikiem magistrali RS232.
kenny,

4
@Kenny - ale nie ma czegoś takiego jak „serial TTL”. To jest UART. Co jeśli napięcie wynosi 3,3 V? TTL odnosi się tylko do 5 V.
stevenvh

o tym mówię, we / wy UART są często nazywane przeze mnie szeregowym TTL.
kenny,

Niesamowita odpowiedź! Przeczytam go jeszcze kilka razy i dam znać, jeśli mam pytania. Dzięki, Steven.
capcom

8
Lepszym rozwiązaniem byłoby łowienie w wieku Uart :-)
Vaibhav Garg

11

Jest to bardzo blisko terytorium czegoś, w którym lepiej byłoby czytać artykuły niż zadawać pytania na niestandardowe odpowiedzi, ale aby zająć się jednym ważnym punktem, który czasami zamazuje producent:

Istnieją dwa podstawowe typy interfejsów szeregowych: synchroniczny i asynchroniczny.

Interfejsy synchroniczne mają przesyłane dane wraz z ich taktowaniem w stosunku do jawnego zegara, który jest również podany. Klasycznym przykładem tego jest SPI, ale istnieją również specjalne formy, takie jak I2S dla konwerterów audio, JTAG, interfejsy konfiguracyjne FPGA itp. Wiele równoległych kanałów komunikacyjnych to tylko pomysł rozszerzony na przenoszenie większej liczby bitów na raz. Często, ale nie zawsze, najpierw wysyłają najbardziej znaczący bit.

Interfejsy asynchroniczne mają taktowanie czasowe zakodowane w samym strumieniu danych. W przypadku „portów szeregowych” i powiązanych standardów, takich jak RS232, taktowanie słowa jest zależne od bitu początkowego, a odbiornik jedynie próbkuje linię w odpowiednich odstępach czasu. Inne interfejsy mogą być nieco bardziej skomplikowane i wymagają bardziej wyszukanego odzyskiwania zegara za pomocą pętli i algorytmów zablokowanych fazowo. UART to „Uniwersalny asynchroniczny nadajnik odbiorczy” - tak naprawdę nazwa bloku funkcjonalnego często wykorzystywanego do implementacji „portu szeregowego” z pewną elastycznością względem długości słowa, szybkości i warunków początkowych / końcowych. Rzeczy takie jak RS232, RS422 itp. Są standardami dla elektrycznej sygnalizacji zewnętrznej danych, które można z nich uzyskać - napięcia, pojedynczego lub różnicowego, jeśli 1 jest wysokie lub niskie itp.

„USART” może być źródłem uzasadnionego zamieszania, ponieważ jest rodzajem urządzenia hybrydowego, „Unversal Synchronous / Asynchronous Receiver Transmitter” Zasadniczo jest to i jest najczęściej używane jako UART, ale można go również skonfigurować do wygenerować (lub rozważyć) osobny zegar zsynchronizowany z danymi i może być w stanie odwrócić kolejność bitów. Zwykle jest konfigurowalny do współpracy z SPI, ale może nie być w stanie usunąć czasu przeznaczonego na bity start / stop, więc może nie być w stanie działać z czymś takim jak I2S, w którym można oczekiwać ciągłego przepływu danych bez przerw między słowami.


Bardzo ładne wytłumaczenie (Y) Uwielbiałem zwięzłość. Thankyou
@chris

8

RS-232 to bardzo prosty protokół szeregowy, który pierwotnie był używany dla modemów i teletypów. Jest to tak zwany port szeregowy (lub port COM w MS-Windows). Na linii nominalnie wykorzystuje poziomy ± 12V, ale mogą się one znacznie różnić, ponieważ wykrywanie jest określone przy ± 3V. Zawsze istnieje sterownik linii (obecnie zwykle z rodziny MAX232), który konwertuje te poziomy na wewnętrzne poziomy sygnału cyfrowego komputera lub mikrokontrolera i z nich.

TTL oznacza Transistor-Tranzystor-Logika i ma swój poziom dla logicznego zera w pobliżu 0 V i dla logicznego w pobliżu 5 V. Często każda logika 5V nazywa się TTL, chociaż większość obwodów jest obecnie zbudowana jako CMOS. Obecnie istnieje również wiele obwodów, które działają przy 3,3 V, co nie jest już TTL.

W odniesieniu do poziomów wewnętrznych poziomy na linii RS-232 są odwrócone, + 12V odpowiada logicznemu niskiemu, a -12V odpowiada logicznemu wysokiemu, co może być mylące.

Do opisu formatu danych zwykle pokazuje się sygnał logiczny. Gdy linia jest bezczynna, jest wysoka. Transmisja rozpoczyna się od niskiego bitu początkowego, najpierw bity danych od najmniej znaczącego bitu, opcjonalny bit parzystości i jeden do dwóch bitów stopu (logiczny 1). Nazywa się to transmisją asynchroniczną, ponieważ bity start i stop synchronizują dane dla każdego bajtu osobno.

UART (Universal Asynchronous Receiver Transmitter) to urządzenie w komputerze lub mikrokontrolerze, które wykonuje tego rodzaju asynchroniczną komunikację.

USART (Universal Asynchronous Synchronous Receiver Transmitter) to urządzenie, które może dodatkowo wykonywać synchroniczną transmisję, stąd dodatkowe S. Jaki to rodzaj, należy to sprawdzić w karcie danych.

SPI, I²C i USB to różne historie (aw przypadku USB bardzo długie).


1

Zgadzam się z tym, co wspomniano o protokołach SPI i CAN. Aby poprawić lepszą wydajność, zaprojektowano protokół CAN. W tej koncepcji arbitrażu stosuje się dwa urządzenia gotowe do komunikacji, a następnie w zależności od ich priorytetu następuje transmisja lub odbiór. CAN jest szeroko stosowany w wielu branżach.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.