Elektroda.pl
Elektroda.pl
X
Sklep HeluKabel
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

ghost666 16 Lis 2019 15:43 2568 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
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    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.
    ghost666 napisał 9436 postów o ocenie 7364, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • Sklep HeluKabel
  • #3
    gregrzesiek
    Poziom 13  
    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.
  • Sklep HeluKabel
  • #4
    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
    gregrzesiek
    Poziom 13  
    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
    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
    tmf
    Moderator Mikrokontrolery Projektowanie
    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
    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
    Marek_Skalski
    Moderator DIY
    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
    krisRaba
    Poziom 28  
    LPUART jest tylko w serii L? Czy w innych również?
  • #11
    Sareph
    Poziom 21  
    krisRaba napisał:
    LPUART jest tylko w serii L? Czy w innych również?
    W innych również.
  • #12
    krisRaba
    Poziom 28  
    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
    krisRaba
    Poziom 28  
    No i masz, akurat tych nie używałem :-) Ale wkrótce w projekcie ma być H7, to trochę poczytam o nowinkach :-)
  • #15
    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
    krisRaba
    Poziom 28  
    Dobrze wiedzieć zawczasu, żeby potem nie rwać włosów z głowy ;-)