Frage:
Sind CTS und RTS am UART-Port erforderlich?
user92481
2016-05-25 19:12:07 UTC
view on stackexchange narkive permalink

Ich arbeite derzeit an einem Projekt, in dem wir TIVA C TM4C123G verwenden, und ich werde derzeit vom Launchpad als Referenzdesign inspiriert. Ich habe mehrere UART-Peripheriegeräte, die über UART mit dem Hauptchip verbunden werden können. Auf den Pins des Chips sind RTS und CTS jedoch nur auf dem UART1 markiert. Wie soll ich damit umgehen?

Haben Sie online nach dem Zweck der RTS- und CTS-Pins gesucht?Schauen Sie sich das an und Sie sollten einen Einblick in die Anforderungen für eine bestimmte Anwendung erhalten.
Wenn Sie RS485 verwenden, benötigen Sie ein RTS-Signal, um zwischen Empfangen / Senden umzuschalten.
Sie benötigen * etwas *, um einen RS485-Transceiver zu aktivieren, aber das muss nicht die RTS-Leitung sein.Die Verwendung der RTS-Leitung ist nur eine Art häufiger Hack - "Es ist da, wir können es in Software steuern, lasst es uns verwenden!"Auf einem eingebetteten System gibt es jedoch normalerweise auch viele GPIOs, die diese Definition erfüllen.
Fünf antworten:
Warren Hill
2016-05-25 19:41:15 UTC
view on stackexchange narkive permalink

Möglicherweise können Sie diese Signale einfach ignorieren. CTS (Clear To Send) und RT (Request To Send) bieten einen Handshake-Mechanismus, mit dem jedes Gerät dem anderen mitteilen kann, wann es zum Empfang von Daten bereit ist.

Viele Uarts implementieren dies jedoch nicht Angenommen, das andere Ende kann jederzeit Daten erfassen oder eine andere Methode wie XON / XOFF verwenden.

Hardware-Handshaking mit RTS / CTS wird bei modernen Geräten nicht sehr häufig verwendet. Sie müssen jedoch das Handbuch überprüfen. a Nur wenige Geräte benötigen es noch.

Vielen Dank für Ihre Antwort, dies tröstet mich ein wenig in der Möglichkeit, ohne RTS und CTS zu implementieren.Ich dachte, ich könnte diese Leitung möglicherweise mit einem normalen GPIO verknüpfen, nur für den Fall, dass ich ein Update-Latr erstellen müsste, indem ich nur RTS und CTS in Software implementiere, indem ich GPIO mit RTS und CTS bitbange, aber ich bin mir nicht sicher, ob dies der Fall istArbeit oder nicht ..?
Richard Crowley
2016-05-25 19:33:32 UTC
view on stackexchange narkive permalink

Es hängt davon ab, welche Art von "Flusskontrolle" Ihre (nicht identifizierten) "mehrere UART-Peripheriegeräte" verwenden. Dies hängt auch davon ab, ob Sie eine gleichzeitige Kommunikation mit Ihren Peripheriegeräten benötigen und ob diese in der Lage sein müssen, den Controller asynchron zu "unterbrechen", oder ob sie abgefragt werden und nur "sprechen, wenn sie angesprochen werden". Dies alles ist Teil des Gesamtsystemdesigns, das ein größeres Problem darstellt als das enge Problem, nach dem Sie gefragt haben.

Vielen Dank für Ihre Antwort.Die Geräte sind typischerweise: GSM-Modul, RS485-Transceiver oder CAN-Transceiver.Ich bin ein bisschen neu in diesen, daher bin ich mir nicht sicher, ob ich friedlich Schaltplan und Leiterplattenlayout zeichnen kann, ohne diese RTS- und CTS-Linie zwischen den Peripheriegeräten und der MCU zu haben
Sie können die Frage zur Verwendung von RTS und CTS nicht beantworten, ohne ZUERST das umfassendere Konzept zu entwerfen, wie das gesamte System funktioniert und wie die Teile miteinander kommunizieren.RTS und CTS sind nur Teile der Lösung.Sie haben das Kommunikationssteuerungsprotokoll noch nicht eingerichtet, wissen also nicht, wie (oder WENN) Sie RTS und CTS benötigen.
Was sollte ich dann tun ?
Um das Protokoll des Zielgeräts anzuzeigen, mit dem Sie eine Verbindung herstellen möchten.
Beginnen Sie am Anfang und legen Sie fest, wie Sie mit diesen Peripheriegeräten kommunizieren müssen.Es hört sich so an, als hätten Sie noch kein richtiges Systemdesign erstellt.
Ich verfolge derzeit den Schaltplan und das Referenzdesign der Hersteller.Ich weiß, dass wir UART verwenden werden, um zwischen der MCU und dem Peripheriegerät zu kommunizieren
Sie müssen GRÖSSERE PLANE erstellen, wie die Software funktioniert.Wie oft muss es mit den Peripheriegeräten kommunizieren?Gibt an, ob die Kommunikation initiiert wird oder ob Eingaben bei Bedarf akzeptiert werden müssen.Es gibt Dutzende von Fragen zur Systemarchitektur, die gelöst werden müssen, bevor Sie zu RTS / CTS gelangen.
Arun Kumar Naidu
2017-10-19 03:15:28 UTC
view on stackexchange narkive permalink

Mit RTS und CTS können Sie nur die Flusskontrolle durchführen. Vielleicht verwende ich einen FTDI-Chip, der USB- in UART-Flows übersetzt ... Hier sind 4 Methoden zur Flusskontrolle, die für das FT232BM-Gerät programmiert werden können.

  1. Keine - Dies kann bei hohen Geschwindigkeiten zu Datenverlust führen.

  2. RTS / CTS - 2-Draht-Handshake. Das Gerät sendet, wenn CTS aktiv ist, und löscht RTS, wenn es nicht mehr empfangen kann.

  3. DTR / DSR - 2-Draht-Handshake. Das Gerät sendet, wenn DSR aktiv ist, und löscht DTR, wenn es nicht mehr empfangen kann.

  4. XON / XOFF - Die Flusskontrolle erfolgt durch Senden oder Empfangen von Sonderzeichen. Einer ist XOn (Senden an), der andere ist XOff (Senden aus).

  5. ol>

    Abhängig von der Anforderung, die Sie auswählen können, befindet sich auf der Terminalleitung ein Befehl, mit dem Sie die Flusssteuerung einstellen oder zurücksetzen können. Verwenden Sie diesen Link für weitere Details.

    stty --file / dev / ttyUSB0 -crtscts zum Deaktivieren der Hardware-Flusskontrolle

    stty --file / dev / ttyUSB0 crtscts, um die Steuerung des Hardwareflusses zu aktivieren.

    stty -F / dev / ttyUSB0 -crtscts ixon ixoff, um die Software xon und xoff für die Aktivierung des Hardwareflusses zu deaktivieren

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

Hardware-Unterstützung für RTS / CTS kann vorteilhaft und manchmal notwendig sein, abhängig davon, wie viel "Vorankündigung" ein Gerät geben kann, wenn es ein sendendes Gerät zum Abhalten benötigt. Wenn ein empfangendes Gerät keine Hardwareunterstützung für die automatische Freigabe von RTS bietet, muss es sicherstellen können, dass eingehende Zeichen immer bedient werden können, bevor der Hardwarepuffer überlaufen kann. Wenn ein Gerät keine Hardware-Unterstützung für das Halten von CTS hat, muss vermieden werden, dass dem UART mehr Zeichen zugeführt werden, als der Empfänger nach dem Loslassen von RTS verarbeiten kann.

Wenn sowohl Sender als auch Empfänger Hardware-Unterstützung für RTS / CTS bieten, können sie auch dann zuverlässig kommunizieren, wenn der Empfänger nur über einen Einzelzeichenpuffer verfügt und die Empfängersoftware manchmal eine Weile braucht, um auf eingehende Daten zu reagieren (falls die Der Empfänger würde Daten beim Empfang des zweiten vollständigen Bytes löschen. Er müsste RTS wie beim Empfang des ersten Bytes freigeben, was die Leistung beeinträchtigen würde. Wenn er keine Daten löschen würde, es sei denn / bis das Startbit eines dritten Bytes eintrifft könnte RTS aktiviert lassen, bis es das zweite empfängt). Wenn dem Empfänger die Hardware-RTS-Unterstützung fehlt, ist eine zuverlässige Kommunikation nur möglich, wenn der Empfängerpuffer alles aufnehmen kann, was möglicherweise ankommt, während er nicht auf eingehende Daten reagieren kann (z. B. weil er mit Interrupts mit höherer Priorität zu beschäftigt ist). Wenn der Empfänger Hardware-Unterstützung hat, der Absender jedoch nicht, ist eine zuverlässige Kommunikation möglich, jedoch nur, wenn die Absender-Software auf und ab geht, sodass der UART niemals mehr Daten erhält, als sicher übertragen werden können.

In Chips mit PLD-ähnlicher Funktionalität an einigen Pins kann es möglich sein, die rohe RTS-Unterstützung in Chips, die keine echte Hardwareunterstützung haben, zu verfälschen, indem ein Ausgang so programmiert wird, dass er automatisch hoch bleibt, wenn sich der serielle Empfangspin befindet niedrig. Dies hätte zur Folge, dass der Empfänger sich zu jedem Zeitpunkt, zu dem eine Übertragung beginnt, bereits meldet. Sobald die Software ein Byte empfängt, kann sie CTS erneut aktivieren, um den Absender darüber zu informieren, dass sie ein weiteres Byte übertragen kann. Die Leistung unter Verwendung eines solchen Ansatzes wäre wahrscheinlich schlecht, aber wenn ein Gerät, das weder Hardware-RTS-Unterstützung noch die Fähigkeit hat, gute Interrupt-Antwortzeiten zu gewährleisten, Daten von einem Gerät empfangen muss, das Daten sofort stoppt, wenn sein CTS (das RTS des Empfängers) freigegeben wird Ein solcher Ansatz könnte einen zuverlässigen Betrieb ermöglichen.

Ein anderer Ansatz, der manchmal in Fällen nützlich sein kann, in denen ein Gerät in vorhersehbaren Intervallen reagiert und nicht reagiert (z. B. weil es regelmäßig eine Aufgabe ausführt, für die jeweils 100% CPU ohne Unterbrechung für Millisekunden erforderlich ist), ist Damit ein Gerät RTS jederzeit freigibt, wenn es in einen nicht reagierenden Zustand versetzt wird, unabhängig davon, ob sein Empfangspuffer bereit ist, einige Daten zu akzeptieren. Das größte Problem bei diesem Ansatz besteht darin, dass, wenn ein Gerät nur zu bestimmten Zeiten zum Empfangen von Daten bereit ist und ein anderes Gerät nur zu bestimmten Zeiten zum Empfangen von Daten bereit ist, keine Daten gesendet werden, es sei denn, diese Zeiten stimmen überein.

Persönlich halte ich Hardware-RTS / CTS-Unterstützung für eine wertvolle Funktion, aber viele Chiphersteller scheinen dies nicht zu tun.Glücklicherweise reagieren FTDI-USB-zu-Seriell-Chips sehr gut auf diese Signale (andere können es auch, aber ich habe sie nicht getestet), sodass ein Gerät ohne Hardware-RTS / CTS-Unterstützung jeweils ein Byte anfordern kannRTS kurz aktivieren (ich bin mir nicht sicher, wie hoch die Mindestbreite sein würde), wenn die Empfängersoftware nach einem eingehenden Byte sucht und es kurz danach freigibt.Dies funktioniert zuverlässig, vorausgesetzt, RTS wird niemals versehentlich für mehr als ein Zeichenintervall gleichzeitig aktiviert.

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

RTS und CTS sind nicht erforderlich. RX und TX reichen aus, wenn Sie die gesamte Flusskontrolle in der Software ausführen.

Beispiel: RTS kann verwendet werden, wenn Sie einen RS-485-Transceiver (der jeweils nur senden oder empfangen kann) zum automatischen Deaktivieren haben den Empfänger und aktivieren Sie den Sender, wenn Sie etwas senden möchten.

Wenn Ihre MCU nicht über Hardware-RTS verfügt, können Sie dies auch mit einem GPIO und einem Code tun.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...