mikrocontroller.net

Forum: PC-Programmierung Baudrate eines FTDI USB-> Seriellkonverters unter Linux


Autor: mode (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe einen FTDI USB-> Seriell Adapter an einer Fritzbox 7170 
haengen. Der Treiber dafuer ist eingebunden und das Geraet unter 
/dev/ttyUSB0 ansprechbar.

Nur - wie kann ich die Baudrate fuer diese virtuelle Schnittstelle 
einstellen? setserial geht schonmal nicht :-(


Freue mich über jeden Tip!!



Mode

Autor: Ede (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo ich weiß nicht wie das unter linux geht!

kann mir aber vorstellen, dass der virtuell com-port treiber für windows
ähnlich ist.

windows : systemsteuerung -> gerätemanager (com-port wählen) -> 
eigenschaften
          ->baudrate (einstellen)

ACHTUNG : jedes prog stellt die baudrate des adapters auf seine eigene 
geschwindigkeit ein (auch anzahl stop-bit, parität...)

viel wichtiger ist die einstellung von -usb transferbuffer size
                                   und -latency time

beide parameter lassen sich unter windows -> gerätemanager einstellen

kleiner exkurs

rs232 - überträgt daten BYTE weise (nicht meckern -> veranschaulichung)
usb   - überträgt daten BLOCK weise

wenn ein prog ein byte versendet und dann zeit x auf antwort wartet
(usb transferbuffer size = 4048)

wartet der usb treiber (latency time) lang
bis er dieses eine Byte versendet, da der puffer (transferbuffer size)
nicht voll ist!!!!!!

hat das länger als zeit x gedauert erkennt das host-programm ein 
timeout!!

[usb sendet die daten nur sofot ab, wenn die puffer voll sind (RX,TX)]

und jetzt das schlimme : ich kenne (fast) kein kommerzielles prog,
                         das timeouts dem user meldet!!, oder nur durch

                         -das geht nicht
                         -bluescreen (eher ausnahme)

(ist auch kein wunder, da die app's ihre kindheit und puppertät in einer
zeit hatten, als es noch kein usb gab)

wenn ihr mich jetzt verstanden habt, gilt :

- kleine datenmengen : transferbuffer size -> klein, latency time -> 
klein
- große datenmengen  : umgekehrt

bei kleiner latency time und transferbuffer size steigt der
verwaltungsaufwand des host-rechners beide, in der summe sollte es also
nicht bis gegen null gehen!

evtl hat's geholfen

ede

Autor: Ede (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder der controller erkennt ein timeout

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich benutze ein USB-RS232 Konverter für die Kommunikation mit eine 8051.
Allerdings mache ich die mit einem eigenen Programm, das die serielle 
Schnittstell einstellt (das Programm macht / kennt keinen Unterschied 
zwischen einer echte RS232 und einem USB Konverter).
Das funktioniert astrein, es gibt auch keine Timeout-Probleme bzw. 
Verzögerungen von wegen einzelner Zeichen die gesendet / empfangen 
werden.
Was für ein Konverte in dem Adapter ist, weiß ich nicht...

Allerdings geht auch da setserial nicht!
Aber stty geht, z.B.
 stty -F /dev/ttyUSB0 9600

Gruß,
Bernhard

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hinweis (edit geht nicht??):
Die Latenz bei einzelnen Zeichen spielt bei meiner Anwendung keine 
Rolle, da ich meist größere Pakete übertrage...

Autor: Wolfgang Mües (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum geht setserial nicht?

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

folgendes passiert:
bernhard@cork:/local/Video$ setserial -g /dev/ttyUSB0
Cannot get serial info: Invalid argument

mach ich einen strace sehe ich:
open("/dev/ttyUSB0", O_RDWR|O_NONBLOCK) = 5
ioctl(5, TIOCGSERIAL, 0xbfcc2618)       = -1 EINVAL (Invalid argument)

Es geht also ein ioctl nicht, ist wohl im USB Treiber nicht 
implementiert...
Wenn man allerdings ein bischen googelt wird von setserial ja eigentlich 
auch abgeraten, da es sehr hardwarenah arbeitet (bzw. arbeiten will).
Das ist dann wohl auch das Problem, der USB Konverter ist halt doch ein 
bischen anders anzusprechen als der 16550A direkt...

Gruß,
Bernhard

Autor: Bernhard Walle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit welchem Programm möchtest du jetzt eigentlich konkret mit der 
seriellen Schnittstelle kommunizieren? Normalerweise macht man die 
Einstellung der Baudrate über das Programm, also z.B. minicom oder 
screen.

Autor: mode (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich moechte ein
echo "Blabla" > /dev/ttyUSB0
machen....

Autor: Bernhard Walle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wuerde dir stattdessen die Verwendung des Programms "socat" 
empfehlen:

    echo df | socat - /dev/ttyS0,raw,echo=0,crnl,b57600

Damit kannst du naemlich wie in dem Beispiel gezeigt die Parameter fuer 
die serielle Schnittstelle direkt angeben.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mir socat aus Neugier heruntergeladen und bin begeistert: Das
kann ja nicht nur seriell, sondern scheint auch ein vollwertiger
Ersatz für netcat zu sein. Das bleibt auf jeden Fall auf der Platte.

Dank an Bernhard Walle für den Tip :)

Autor: Bobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und ich danke ebenfalls dem Bernhard für den Tipp.

Autor: Jeams (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich bin gerade dabei eine platine zu entwickeln  M32 (16 Mhz extern
getaktet) und FT232RL.Ich schaffe es eine kommunikation mit einer
baudrate von 115200 problemlos aber das ist zu wenig. Ich muss auf
250000 mindestens kommen. Ich habe FTDIPORT.INF geändert ´mit den neuer
Baudrate und die FTDI Treiber noch einmal instaliert das problem ist die
erwünschte Baudrate  steht nicht auf die liste.
was habe ich falsch gemacht?

MFG

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> das problem ist die erwünschte Baudrate  steht nicht auf die liste.

Wer ist "die liste"?

Und warum muss die Baudrate darin stehen?

Könnte es sein, daß Du ein Programm mit graphischer Benutzeroberfläche 
verwendest, das Dir zur Auswahl eine Liste mit vordefinierten Baudraten 
anbietet? Dann musst Du dieses Programm ändern, aber nicht den 
FTDI-Treiber, denn der kann sowieso alle Baudraten, die man ihm vorwirft 
(und die die Hardware dann umsetzen kann).

Autor: jeams (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rufus t. Firefly, danke für die Antwort

Hier anbei ist die gesprochene liste von verschiedener Baudrate.
wenn mann die neue treiber mit der geänderte Baudraten (ftdiport.inf ).
sollte im geräte Manager eine  neue liste mit die geänderte Baudraten 
dargestellt.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Screenshot mit 2560x1024 Pixeln ist eine Zumutung. Den hättest Du 
vor dem Posten ruhig beschneiden können.

Diese Liste ist ziemlich uninteressant, weil praktisch überhaupt kein 
Programm sich dafür interessiert, was ausgerechnet im Gerätemanager für 
eine Baudrate für die Schnittstelle eingetragen ist. Programme, die 
serielle Schnittstellen ansprechen, konfigurieren diese Schnittstellen 
selber - d.h., Parameter wie Baudrate, Wortlänge, Stopbits etc. werden 
vom Programm vorgegeben.

Bist Du Dir im Klaren darüber, daß Du hier einen Thread geentert hast, 
der mit Deinem Problem nichts, aber auch gar nichts zu tun hat?
Steht im Threadtitel etwas von Windows oder steht da Linux?

Hast Du meine dezente Kritik an Deinen diversen Crosspostings 
mitbekommen?

Autor: Sebastian Pischel (spischel) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Falls es noch jemanden interessiert:
stty -F /dev/ttyUSB0
liefert die aktuellen Schnittstelleneinstelungen, mit
stty -F /dev/ttyUSB0 115200

setzt man die Baudrate z.B. auf 115200.

man stty liefert die restlichen Infos, aber da 8N1 ja quasistandard ist, 
sollte das in den meisten Fällen so reichen.

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.