Ulubione Ulubione 88
UARTs
Ostatnim elementem tej szeregowej układanki jest znalezienie czegoś, co zarówno tworzy pakiety szeregowe, jak i kontroluje te fizyczne linie sprzętowe. Wejdź do UART.
Uniwersalny asynchroniczny odbiornik/transmiter (UART) jest blokiem obwodów odpowiedzialnym za implementację komunikacji szeregowej. Zasadniczo, UART działa jako pośrednik między interfejsami równoległymi i szeregowymi. Na jednym końcu UART znajduje się magistrala ośmiu lub więcej linii danych (plus kilka pinów kontrolnych), na drugim dwa przewody szeregowe – RX i TX.
UARTy istnieją jako samodzielne układy scalone, ale częściej można je znaleźć wewnątrz mikrokontrolerów. Będziesz musiał sprawdzić arkusz danych swojego mikrokontrolera, aby zobaczyć, czy ma on jakiekolwiek UART. Niektóre nie mają żadnego, niektóre mają jeden, niektóre mają wiele. Na przykład Arduino Uno – oparte na „starym wiernym” ATmega328 – ma tylko jeden UART, podczas gdy Arduino Mega – zbudowane na ATmega2560 – ma aż cztery UARTy.
Jak oznaczają R i T w akronimie, UARTy są odpowiedzialne zarówno za wysyłanie, jak i odbieranie danych szeregowych. Po stronie nadawczej, UART musi utworzyć pakiet danych – dołączając bity synchronizacji i parzystości – i wysłać ten pakiet linią TX z precyzyjnym taktowaniem (zgodnie z ustawioną szybkością transmisji). Po stronie odbiorczej, UART musi próbkować linię RX z szybkością zgodną z oczekiwaną szybkością transmisji, wybrać bity synchronizacji i wypluć dane.
Bardziej zaawansowane UART mogą wrzucać odebrane dane do bufora, gdzie mogą pozostać, dopóki mikrokontroler po nie nie przyjdzie. UARTy zazwyczaj wypuszczają swoje zbuforowane dane na zasadzie first-in-first-out (FIFO). Bufory mogą być tak małe jak kilka bitów, lub tak duże jak tysiące bajtów.
UARTy programowe
Jeśli mikrokontroler nie ma UARTu (lub ma go za mało), interfejs szeregowy może być bit-banged – bezpośrednio kontrolowany przez procesor. To jest podejście, które stosują biblioteki Arduino, takie jak SoftwareSerial. Bit-banging jest wymagający dla procesora i zazwyczaj nie jest tak precyzyjny jak UART, ale działa w razie potrzeby!