www.mikrocontroller.net

Forum: PC-Programmierung Linux, USB-UART, Baudrate wechseln, Verhalten von Steuerleitungen?


Autor: (Gast) (Gast) (Gast) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sollte sich eine serielle Schnittstelle beim Wechsel der Baudrate 
verhalten?

Unter Linux tritt bei einem Baudratenwechsel via termios eines 
usbserial Adapters immer ein unerwünschter Wechsel des DTR-Signals 
auf. Ich benutze einen PL2303, das Problem tritt nach Hörensagen aber 
auch bei anderen Adapter auf. Evtl. ist es ein Problem mit USB?

http://www.mjmwired.net/kernel/Documentation/usb/u...

Und im Treiber:
http://git.kernel.org/?p=linux/kernel/git/stable/l...

Leider ist das eine Nummer zu groß für mich. Wo ist B0 definiert?

Autor: (Gast) (Gast) (Gast) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die manpage sagt:

The zero baud rate, B0, is used to terminate the connection.  If B0 is 
specified, the modem control lines shall no longer be  asserted. 
Normally, this will disconnect the line.

Autor: Olaf Dreyer (Firma: O.D.I.S.) (dreyero)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

leider kann ich das nicht genau beantworten.
Mir hat jedenfalls folgender Link geholfen:

http://www.easysw.com/~mike/serial/serial.html


Gruß

Olaf

Autor: (Gast) (Gast) (Gast) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kenn ich, danke trotzdem!

Autor: DS66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der "Fehler" liegt im Treiber und zwar hier
pl2303.c:

622         if ((cflag & CBAUD) == B0)
623                 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
624         else
625                 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
626         if (control != priv->line_control) {
627                 control = priv->line_control;
628                 spin_unlock_irqrestore(&priv->lock, flags);
629                 set_control_lines(serial->dev, control);
630         } else {
631                 spin_unlock_irqrestore(&priv->lock, flags);
632         }

Beim wechsel der Baudrate ungleich "B0" wird DTR und RTS immer auf HIGH 
gesetzt, egal, ob vorher nicht gesetzt oder gesetzt.
Du müsstest dir den Treiber ohne diese Zeilen übersetzen, dann sollte es 
funktionieren.
(hab gerade dasselbe Problem)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.