Pytanie:
Czy CTS i RTS są potrzebne na porcie UART?
user92481
2016-05-25 19:12:07 UTC
view on stackexchange narkive permalink

Obecnie pracuję nad projektem, w którym używamy TIVA C TM4C123G i obecnie inspiruje mnie starter jako projekt referencyjny. Mam kilka urządzeń peryferyjnych UART do połączenia z głównym układem za pomocą UART, jednak na pinach chipa RTS i CTS są zaznaczone tylko na UART1. Jak mam sobie z tym poradzić?

Czy szukałeś w Internecie, aby określić przeznaczenie pinów RTS i CTS?Spójrz na to i powinieneś uzyskać wgląd w ich wymagania dla każdej aplikacji.
Jeśli będziesz używać RS485, będziesz potrzebować sygnału RTS do przełączania między odbieraniem / nadawaniem.
Potrzebujesz * czegoś *, aby włączyć transceiver RS485, ale to nie musi być linia RTS.Używanie linii RTS to zwykły hack - „jest tam, możemy to kontrolować w oprogramowaniu, używajmy tego!”Jednak w systemie wbudowanym zazwyczaj wiele GPIO spełnia również tę definicję.
Pięć odpowiedzi:
Warren Hill
2016-05-25 19:41:15 UTC
view on stackexchange narkive permalink

Możesz po prostu zignorować te sygnały. CTS (Clear To Send) i RT (Request To Send) zapewniają mechanizm uzgadniania, dzięki czemu każde urządzenie może powiedzieć drugiemu, kiedy jest gotowe do odbioru danych.

Jednak wiele Uartów nie implementuje tego i albo załóżmy, że drugi koniec może pobierać dane w dowolnym momencie lub użyć innej metody, takiej jak XON / XOFF

Sprzętowe uzgadnianie z RTS / CTS nie jest często używane na nowoczesnym sprzęcie, ale będziesz musiał sprawdzić instrukcję, a kilka urządzeń nadal tego wymaga.

Dziękuję za odpowiedź, to trochę pocieszyło mnie w możliwości realizacji bez użycia RTS i CTS.Myślałem, że mógłbym potencjalnie połączyć tę linię z jakimś normalnym GPIO, na wypadek, gdybyś musiał dokonać aktualizacji, po prostu zaimplementując RTS i CTS w oprogramowaniu przez bitbanging GPIO z RTS i CTS, ale nie jestem pewien, czy takdziała czy nie ..?
Richard Crowley
2016-05-25 19:33:32 UTC
view on stackexchange narkive permalink

Zależy to od rodzaju „kontroli przepływu” używanych przez (niezidentyfikowane) „kilka urządzeń peryferyjnych UART”. Zależy to również od tego, czy potrzebujesz jednoczesnej komunikacji z urządzeniami peryferyjnymi i czy muszą one mieć możliwość asynchronicznego „przerywania” kontrolera, czy też będą odpytywane i tylko „mówić, gdy się do nich mówi”. To wszystko jest częścią ogólnego projektu systemu, który jest większym problemem niż wąski problem, o który pytałeś.

Dziękuję za Twoją odpowiedź.Urządzeniami są zazwyczaj: moduł GSM, transceiver RS485 lub transceiver CAN.Jestem trochę nowy w tych, więc nie jestem pewien, czy mogę spokojnie narysować schemat i układ PCB bez tych linii RTS i CTS między urządzeniami peryferyjnymi a MCU
Nie możesz odpowiedzieć na pytanie o używanie RTS i CTS bez PIERWSZEGO zaprojektowania szerszej koncepcji działania całego systemu i tego, jak poszczególne elementy będą ze sobą rozmawiać.RTS i CTS to tylko części rozwiązania.Nie ustaliłeś jeszcze protokołu kontroli komunikacji, więc nie wiesz, jak (lub czy) będziesz potrzebować RTS i CTS.
Więc co powinienem zrobić ?
Aby przyjrzeć się protokołowi urządzenia docelowego, z którym zamierzasz się połączyć.
Zacznij od początku i ustal JAK musisz komunikować się z tymi urządzeniami peryferyjnymi.Wygląda na to, że nie wykonałeś jeszcze odpowiedniego projektu systemu.
Obecnie postępuję według schematu i projektu referencyjnego dostarczonego przez producentów.Wiem, że użyjemy UART do komunikacji między MCU a urządzeniem peryferyjnym
Musisz stworzyć WIĘKSZE PLANY JAK będzie działać oprogramowanie.Jak często musi komunikować się z urządzeniami peryferyjnymi.Czy zainicjuje komunikację, czy też musi przyjmować dane wejściowe na żądanie.Istnieją dziesiątki pytań dotyczących architektury systemu, które należy rozwiązać, zanim przejdziesz do RTS / CTS.
Arun Kumar Naidu
2017-10-19 03:15:28 UTC
view on stackexchange narkive permalink

RTS i CTS pozwalają tylko na kontrolę przepływu ... być może używam układu FTDI, który tłumaczy przepływy USB na UART ... tutaj są 4 metody kontroli przepływu, które można zaprogramować dla urządzenia FT232BM.

  1. Brak - może to spowodować utratę danych przy dużych prędkościach

  2. RTS / CTS - 2-przewodowe uzgadnianie. Urządzenie będzie transmitować, jeśli CTS jest aktywne i zrzuci RTS, jeśli nie może już odbierać.

  3. DTR / DSR - 2-przewodowe uzgadnianie. Urządzenie będzie transmitować, jeśli DSR jest aktywne i zrzuci DTR, jeśli nie może już odbierać.

  4. XON / XOFF - sterowanie przepływem odbywa się poprzez wysyłanie lub odbieranie znaków specjalnych. Jedna to XOn (transmisja włączona), druga to XOff (transmisja wyłączona).

W zależności od wymagań, które możesz wybrać ... w linii terminala znajduje się polecenie, którego możemy użyć do ustawienia lub zresetowania kontroli przepływu. Aby uzyskać więcej informacji, użyj tego linku.

stty --file / dev / ttyUSB0 -crtscts, aby wyłączyć sprzętową kontrolę przepływu

stty --file / dev / ttyUSB0 crtscts, aby włączyć sprzętową kontrolę przepływu.

stty -F / dev / ttyUSB0 -crtscts ixon ixoff, aby wyłączyć oprogramowanie HW Flow, włącz xon i xoff.

supercat
2017-10-19 19:51:30 UTC
view on stackexchange narkive permalink

Wsparcie sprzętowe dla RTS / CTS może być korzystne, a czasami konieczne, w zależności od tego, ile „wyprzedzenia” może wysłać urządzenie, gdy potrzebuje urządzenia nadawczego, aby się wstrzymać. Jeśli urządzenie odbierające nie ma wsparcia sprzętowego do automatycznego zwalniania RTS, będzie musiało być w stanie zapewnić, że zawsze będzie w stanie obsłużyć wszelkie przychodzące znaki, zanim nastąpi przepełnienie bufora sprzętowego. Jeśli urządzenie nie ma wsparcia sprzętowego do wstrzymywania CTS, to będzie musiało unikać podawania do UART większej liczby znaków niż odbiornik byłby w stanie obsłużyć po zwolnieniu RTS.

Jeśli zarówno nadajnik, jak i odbiornik obsługują sprzętowo RTS / CTS, będą w stanie niezawodnie komunikować się, nawet jeśli odbiornik ma tylko jednoznakowy bufor, a oprogramowanie odbiornika może czasami zająć trochę czasu, aby odpowiedzieć na przychodzące dane (jeśli odbiornik porzuciłby dane po odebraniu drugiego pełnego bajtu, musiałby zwolnić RTS, tak jak podczas odbierania pierwszego, co obniżyłoby wydajność; jeśli nie porzuciłby danych, dopóki nie nadejdzie bit początkowy trzeciego bajtu, to może pozostawić RTS potwierdzone, dopóki nie otrzyma drugiego). Jeśli odbiornik nie ma sprzętowej obsługi RTS, niezawodna komunikacja nie będzie możliwa, chyba że bufor odbiornika może pomieścić wszystko, co może nadejść, podczas gdy nie jest w stanie odpowiedzieć na przychodzące dane (np. Ponieważ jest zbyt zajęty przerwaniami o wyższym priorytecie). Jeśli odbiornik ma wsparcie sprzętowe, ale nadawca nie, niezawodna komunikacja będzie możliwa, ale tylko wtedy, gdy oprogramowanie nadawcy dostosuje się, aby nigdy nie przekazało UART więcej danych, niż można bezpiecznie przesłać.

W układach z funkcjami podobnymi do PLD na niektórych pinach może być możliwe sfałszowanie surowej obsługi RTS w układach, które nie mają rzeczywistego wsparcia sprzętowego, poprzez zaprogramowanie wyjścia tak, aby automatycznie zatrzasnęło się na wysokim poziomie za każdym razem, gdy pin odbioru szeregowego Niska. To spowodowałoby, że odbiorca zacząłby raportować o sobie, gdy tylko zaczyna się transmisja. Gdy oprogramowanie otrzyma bajt, będzie mogło ponownie potwierdzić CTS, aby powiadomić nadawcę, że może przesłać kolejny bajt. Wydajność przy takim podejściu prawdopodobnie byłaby zła, ale jeśli urządzenie, które nie ma sprzętowej obsługi RTS ani możliwości zagwarantowania dobrych czasów reakcji na przerwanie, musi otrzymywać dane z urządzenia, które zatrzymuje dane natychmiast po zwolnieniu jego CTS (RTS odbiornika) , takie podejście mogłoby zapewnić niezawodne działanie.

Innym podejściem, które może być przydatne w przypadkach, gdy urządzenie będzie reagować i nie odpowiadać w przewidywalnych odstępach czasu (np. ponieważ okresowo wykonuje pewne zadania wymagające 100% procesora bez żadnych zakłóceń, przez milisekundy na raz) mieć urządzenie RTS zwalniane za każdym razem, gdy ma wejść w stan braku odpowiedzi, niezależnie od tego, czy jego bufor odbioru byłby gotowy do przyjęcia niektórych danych. Największym problemem związanym z tym podejściem jest to, że jeśli jedno urządzenie jest gotowe do odbioru danych tylko w określonych porach, a inne sprawdza tylko, czy jest gotowe do odbioru danych w określonych momentach, żadne dane nie zostaną wysłane, chyba że te czasy się pokrywają.

Osobiście uważam, że sprzętowa obsługa RTS / CTS jest cenną funkcją, ale wielu producentów chipów tego nie robi.Na szczęście układy USB-to-szeregowe FTDI bardzo dobrze reagują na te sygnały (inne też mogą, ale nie testowałem ich), dzięki czemu urządzenie bez sprzętowej obsługi RTS / CTS może żądać jednego bajtu na raz przezkrótkie potwierdzenie RTS (nie jestem pewien, jaka byłaby minimalna szerokość) za każdym razem, gdy oprogramowanie odbiornika sprawdza nadchodzący bajt i zwalnia go wkrótce potem.Będzie to działać niezawodnie, pod warunkiem, że RTS nigdy nie zostanie przypadkowo potwierdzony dla więcej niż jednego odstępu między znakami na raz.

filo
2016-05-26 13:05:23 UTC
view on stackexchange narkive permalink

RTS i CTS nie są konieczne. RX i TX wystarczą, jeśli wykonujesz całą kontrolę przepływu w oprogramowaniu.

Na przykład: RTS może być używany, jeśli masz nadajnik-odbiornik RS-485 (który może nadawać lub odbierać tylko na raz), aby automatycznie wyłączyć odbiornik i włącz nadajnik, gdy chcesz coś wysłać.

Jeśli Twój MCU nie ma sprzętowego RTS, możesz zrobić to samo z GPIO i fragmentem kodu.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...