Linux, USB-UART, Baudrate wechseln, Verhalten von Steuerleitungen?

Gast #1586945
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/usb-serial.txt

Und im Treiber:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.31.y.git;a=blob;f=drivers/usb/serial/pl2303.c;h=600097de714fb08f65447ed3e0b1182160e4b69c;hb=HEAD#l619

Leider ist das eine Nummer zu groß für mich. Wo ist B0 definiert?
Gast #1586953
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.
Gast #1589663
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren