logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

USART vs. UART - jakie są różnice?

ghost666 16 Lis 2019 15:43 13848 15
  • Czy kiedykolwiek zdarzyło Ci się użyć terminu UART tylko po to, by zostać poprawionym przez innego inżyniera, że nie jest to UART, ale USART? W pewnych przypadkach oba te terminy są zamienne, ale w wielu innych używanie ich wymiennie jest niepoprawne. Przyjrzyjmy się, czym dokładnie są USART i UART, a także jakie są pomiędzy nimi główne różnice.

    Większość inżynierów systemów wbudowanych zna interfejs UART: uniwersalny asynchroniczny odbiornik/nadajnik. Jest to urządzenie peryferyjne mikrokontrolera, które konwertuje przychodzące i wychodzące bajty danych na strumień szeregowy. Bit początkowy rozpoczyna szeregowy strumień, a bit lub dwa stopu kończy słowo danych (ramkę). UART ma również możliwość dodania bitu parzystości do ramki, aby pomóc w wykryciu, jeżeli podczas transmisji wystąpił błąd. Rysunek 1 pokazuje standardowy przykład ramki, jaką można zobaczyć oglądając dane przesyłane przez UART.


    USART vs. UART - jakie są różnice?
    Rys.1. Ramka danych w interfejsie UART.


    Z kolei USART jest to uniwersalny synchroniczny/asynchroniczny odbiornik/nadajnik. Jest to urządzenie peryferyjne mikrokontrolera, które przekształca przychodzące i wychodzące bajty danych w szeregowy strumień bitów... Definicja USART jest identyczna z definicją UART, ale w skrócie pojawia się dodatkowe słowo - "synchroniczny". Muszą zatem istnieć jakieś różnice, w przeciwnym razie USART byłby tym samym co UART i nikt nikogo nie musiałby poprawiać.

    Istotnie, różnice są, i to ważne. Przyjrzyjmy się im po kolei.

    Pierwszą różnicą między USART a UART jest sposób, w jaki dane szeregowe mogą być taktowane. UART generuje swój własny zegar danych wewnętrznie, w mikrokontrolerze i synchronizuje go ze strumieniem danych wykrywając początkowe przejście - bit startu. Nie ma tutaj przychodzącego sygnału zegarowego związanego z danymi, więc aby prawidłowo odbierać strumień takich danych, odbiornik musi wiedzieć z wyprzedzeniem, jaka powinna być prędkość transmisji.

    Z kolei USART, można skonfigurować do pracy w trybie synchronicznym. W tym trybie urządzenie peryferyjne wysyła sygnał zegarowy na zewnątrz, a odbierające urządzenie peryferyjne może odzyskać go ze strumienia danych, nie znając przy tym wcześniej szybkości tej transmisji. Alternatywnie, niektóre łącza używać mogą wręcz osobnej linii zegarowej do taktowania całej transmisji. Użycie zewnętrznego zegara pozwala na znacznie większą szybkość transmisji danych z wykorzystaniem interfejsu USART niż standardowego UART - tego rodzaju przesyły osiągają prędkość do 4 Mbps.

    Drugą istotną różnicą pomiędzy interfejsami USART a UART jest liczba protokołów obsługiwanych przez urządzenie peryferyjne. UART jest prosty i oferuje tylko kilka opcji podstawowego formatu danych. Konfigurować można liczbę bitów stopu oraz występowanie i sposób obliczania bitu parzystości ramki. USART jest dużo bardziej złożony i może generować dane w formie odpowiadającej wielu różnym protokołom, takim jak IrDA, LIN, Smart Card oraz Driver Enable dla interfejsów takich jak RS-485 czy Modbus. Lista ta oczywiście nie wyczerpuje pełnych możliwości interfejsu USART. Dodatkowo, ma również takie same możliwości realizowania transmisji asynchronicznej jak UART, to znaczy USART może generować ten sam typ danych szeregowych, jak pokazano na rysunku 1.

    Urządzenia peryferyjne USART i UART mają zdecydowanie inne możliwości i mogą być wykorzystywane w odmiennych sytuacjach, więc w typowych mikrokontrolerach obecne są oba z tych interfejsów tak, aby deweloper tworząc swój system, mógł wybrać ten, który bardziej odpowiada danemu zadaniu. Weźmy na przykład system, którego celem jest praca przy małej mocy pobieranej z zasilania. Urządzenie oparte ma być o układ z rodziny STM32. Mikrokontrolery STM32 zawierają w sobie tak USART, jak i UART. USART jest przeznaczony do realizacji komunikacji szeregowej o dużych wymaganiach, szczególnie, że pobiera więcej energii. Aktywowany może być w momencie, gdy konieczne jest przesłanie dużej ilości danych lub uruchomienie złożonego protokołu. Z kolei, gdy mikrokontroler jest uśpiony - znajduje się w trybie niskiego poboru mocy - urządzenie peryferyjne UART może obsługiwać komunikację przy niskiej prędkości, jednocześnie oferując mniejszy pobór prądu przez układ.

    Zatem czy USART i UART są takie same? Technicznie odpowiedź brzmi: nie. USART ma na ogół więcej możliwości niż standardowy moduł UART, a także możliwość generowania taktowanych danych, dzięki czemu USART może działać z szybkością znacznie przekraczającą możliwości UART. USART obejmuje możliwości UART, jednak w wielu aplikacjach, pomimo wysokich parametrów modułu USART, programiści używają ich jako prostych UARTów, ignorując lub unikając synchronicznego generowania zegara w tych potężnych urządzeń peryferyjnych. Nic dziwnego, że tak wiele osób używa tych terminów jakby były synonimami...

    Źródło: https://www.edn.com/electronics-blogs/embedded-basics/4440395/USART-vs-UART--Know-the-difference

    Fajne? Ranking DIY
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    https://twitter.com/Moonstreet_Labs
    ghost666 napisał 11960 postów o ocenie 10197, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • #3 18281661
    gregrzesiek
    Poziom 14  
    TechEkspert napisał:
    Czy RS-485 to USART?

    RS485 to nie to samo co USART, ale mogą być ze sobą związane :)
    USART/UART - odbiornik/nadajnik szeregowej transmisji danych. Tu są zdefiniowane kolejność bitów, prędkość, format transmisji danych itd
    RS485 - definiuje transmisję od strony elektrycznej, poziomy napięć, transmisja różnicowa itd.

    Mając interfejs USART/UART możemy go przekształcić do RS485 za pomocą odpowiedniego transceivera. Wtedy format danych będziemy mieli taki jak w USART/UART, a poziomy elektryczne jak w RS485.
  • #4 18281667
    TechEkspert
    Redaktor
    Jednak jest to dość splątane, czyli zarówno UART jak i USART może sterować RS485?

    Jedyny mocny wyróżnik dla mnie między USART a UART to linia zegarowa poprowadzona między urządzeniami.
  • #5 18281703
    gregrzesiek
    Poziom 14  
    TechEkspert napisał:
    Jednak jest to dość splątane, czyli zarówno UART jak i USART może sterować RS485?

    Jedyny mocny wyróżnik dla mnie między USART a UART to linia zegarowa poprowadzona między urządzeniami.


    Tak, UART jak i USART można podłączyć pod transceiver RS485.
    RS485 operuje na jednej parze różnicowej więc w ogóle w tym przypadku nie używa się dodatkowej linii zegarowej. Bardziej istotne jest to, że w UART urządzenie odbierające musi wiedzieć z jaką prędkością powinno odbierać dane, np. w obu urządzeniach (nadajnik i odbiornik) ustawiamy prędkość na np. 9600 bodów. W wypadku USART, odbiornik jest w stanie ustalić prędkość transmisji na podstawie odbieranych danych.
  • #6 18281737
    TechEkspert
    Redaktor
    Czyli USART gdy:
    -zegar jest przekazywany odrębną linią
    lub
    -urządzenie odzyskuje częstotliwość zegara z przesyłanych danych

    UART gdy:
    -częstotliwość zegara jest odgórnie ustalona i zegar jest synchronizowany z przesyłanymi danymi
  • #7 18281799
    tmf
    VIP Zasłużony dla elektroda
    gregrzesiek napisał:
    Bardziej istotne jest to, że w UART urządzenie odbierające musi wiedzieć z jaką prędkością powinno odbierać dane, np. w obu urządzeniach (nadajnik i odbiornik) ustawiamy prędkość na np. 9600 bodów.

    I tak i nie. Stosując transmisję asynchroniczną, odbiornik (niektóre implementacje robią to nawet sprzętowo), ma możliwość dostosowania szybkości odbioru do nadajnika. Z kolei stosując np. kodowanie Manchaster w jednej transmisji mamy i zegar i dane.
    IMHO jest tylko jedna różnica pomiędzy UART i USART - UART obsługuje transmisję bez dodatkowej linii zegarowej, a USART umożliwia wykorzystanie dodatkowej linii zegarowej.
    ghost666 napisał:
    Użycie zewnętrznego zegara pozwala na znacznie większą szybkość transmisji danych z wykorzystaniem interfejsu USART niż standardowego UART - tego rodzaju przesyły osiągają prędkość do 4 Mbps.

    Technicznie tak, a w praktyce w wielu MCU maksymalna szybkość transmisji dla obu trybów jest taka sama.
    ghost666 napisał:
    USART jest dużo bardziej złożony i może generować dane w formie odpowiadającej wielu różnym protokołom, takim jak IrDA, LIN, Smart Card oraz Driver Enable dla interfejsów takich jak RS-485 czy Modbus.

    Niekoniecznie. Te dodatkowe funkcje zależą wyłącznie od implementacji producenta. Ja bym nawet zaryzykował twierdzenie, że te dodatkowe protokoły to dodatek niemający związku z UART/USART, a jedynie w wielu implementacjach wykorzystujący zestaw rejestrów UART/USART jako, że są to zbliżone protokoły szeregowe.
  • #8 18281847
    TechEkspert
    Redaktor
    Różnicowy kod manchaster to ciekawy przypadek, nie tylko dba o zbliżoną ilość "0" i "1" w transmisji ale też dodatkowo mamy synchronizację zegara odbiornika z nadajnikiem poprzez strumień wysyłanych przez nadajnik informacji.
  • #9 18282571
    Marek_Skalski
    VIP Zasłużony dla elektroda
    ghost666 napisał:
    Mikrokontrolery STM32 zawierają w sobie tak USART, jak i UART. USART ... Aktywowany może być w momencie, gdy konieczne jest przesłanie dużej ilości danych lub uruchomienie złożonego protokołu. Z kolei, gdy mikrokontroler jest uśpiony - znajduje się w trybie niskiego poboru mocy - urządzenie peryferyjne UART może obsługiwać komunikację przy niskiej prędkości, jednocześnie oferując mniejszy pobór prądu przez układ.

    Uśpienie, to tylko zatrzymanie rdzenia. Akurat do takich zastosowań jak wyżej dedykowany jest LPUART, który pobiera przynajmniej 2x mniej prądu i może działać w trybach prawdziwego oszczędzania energii. Kolejną cechą LPUART jest możliwość wybudzenia systemu w odpowiedzi na przesłane dane z dowolnego poziomu trybu STOP. To tak w ramach uzupełnienia informacji, skoro już odnosimy się do konkretnej grupy produktów.
  • #10 18282757
    krisRaba
    Poziom 31  
    LPUART jest tylko w serii L? Czy w innych również?
  • #12 18283178
    krisRaba
    Poziom 31  
    Ciekawe, dotąd na to nie trafiłem. Sprawdzę w wolnej chwili, czy po prostu przeoczyłem, czy akurat w używanych przeze mnie nie było.
  • #14 18284444
    krisRaba
    Poziom 31  
    No i masz, akurat tych nie używałem :-) Ale wkrótce w projekcie ma być H7, to trochę poczytam o nowinkach :-)
  • #15 18285273
    osctest1
    Poziom 21  
    krisRaba napisał:
    ma być H7, to trochę poczytam o nowinkach
    Bardzo duzo nowinek :). Ciekawostka jest, ze stlinkgdbserver nie potrafi sie z nini dogadac. OpenOCD i jlinkgdbserver jak najbardziej
  • #16 18285777
    krisRaba
    Poziom 31  
    Dobrze wiedzieć zawczasu, żeby potem nie rwać włosów z głowy ;-)
REKLAMA