Richtiges FTDI Gerät finden unter Linux.

OP #4707272
Lesenswert?

Hallo,

also ich habe hier einen FT232H auf dem Modul "UM232H" und einen FT232R. 
Beide hängen am gleichen Rechner und sollen nun in einem C Programm 
geöffnet werden.

Unter Windows verwende ich die D2XX Funktion auf alle gefundenen Geräte 
an

FT_GetDeviceInfoDetail

und die meldet mir dann z .B. die Description als String zurück oder 
auch die Seriennummer. Und dann weiß ich dass z. B. Gerät 1 auf 
Description "UM232H" und kann das passend öffen

ftStatus = FT_Open(1, &FT232H_ftHandle);

und alles ist gut.

Unter Linux (Ubuntu) meldet

FT_GetDeviceInfoDetail

nichts sinnvolles zurück. Also weder Description noch Seriennummer.
Aber gut, ich kenne ja die Seriennummer, die habe ich mit FT_Prog 
gesetzt "12345678" und wird unter Linux auch mit lsusb -v korrekt 
angezeigt.

Jetzt könnte man doch

ftStatus = 
FT_OpenEx("12345678",FT_OPEN_BY_SERIAL_NUMBER,&FT232H_ftHandle);

verwenden und alles ist gut. Aber nein, geht nicht wieso auch immer. 
Auch

ftStatus = FT_OpenEx("UM232H",FT_OPEN_BY_DESCRIPTION,&FT232H_ftHandle);

geht nicht.

Wieso ist das so? Und wie finde ich mit C heraus welches Gerät welches 
ist?

Vielen Dank!
OP #4707292
Lesenswert?

Also als root lasse ich das sowieso laufen, klar. Wenn nur ein Gerät 
angeschlossen ist, also z. B. der UM232H als Gerät 0 dann kann ich den 
auch prima unter Linux mit

ftStatus = FT_Open(0, &FT232H_ftHandle);

öffnen und davon lesen. Ich möchte ein Programm schreiben dass ohne dass 
ich am Linux was basteln muss von selber die Geräte findet und richtig 
zuordnet. Unter Windows funktioniert das auch.
Gast #4707301
Lesenswert?

Gustl B. schrieb:
> Das kenne ich noch nicht, kann man das aus C heraus ansprechen?
ja, ist ein Framework was auch eine libudev anbietet

> Muss man da irgendwas im Linux einstellen?
kann ich nicht pauschal sagen, auf einen linuxsystemen war es immer 
vorhanden.

Leider muss man sich die Doku in Internet zusammensuchen.

http://www.signal11.us/oss/udev/
ftp://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/api-index-fu 
ll.html
Gast #4707303
Lesenswert?

Gustl B. schrieb:
> Was würde mir udev denn liefern? Also wie kann ich dann das FTDI Gerät
> öffnen? Das geht doch dann wieder mit dem D2XX von FTDI.

die Frage UDEV welche Geräte vorhanden sind die ein tty  anbieten, dann 
bekommst du eine Liste der Geräte. Diese kann man durchgehen und kann 
die Eigenschaften abfragen. Dann bekommst du auch den Gerätenamen wie du 
es Ansprechen kannst.
OP #4707304
Lesenswert?

Wenn ich das richtig sehe dann liefert mir udev doch auch nur die Werte 
die mir auch lsusb -v liefert. Aber wie öffne ich das FTDI Gerät wenn 
ich z. B. die Seriennummer schon kenne? Das ist es ja was nicht 
funktioniert. Ich kenne die Details des Gerätes aber kann es nicht 
öffnen.
Gast #4707306
Lesenswert?

Gustl B. schrieb:
> Wenn ich das richtig sehe dann liefert mir udev doch auch nur die Werte
> die mir auch lsusb -v liefert. Aber wie öffne ich das FTDI Gerät wenn
> ich z. B. die Seriennummer schon kenne?

du listest dir alle Geräte auf uns geht die Liste durch, fragst die 
Seriennumer ab und vergleichst sie. Wenn die passenden gefunden öffnest 
du sie.
OP #4707308
Lesenswert?

AHHHHHHHH verdammt, ich hab das Problem behoben:

Ich muss zuerst mit

rmmod ftdi_sio

den standardmäßig geladenen Treiber entfernen. Oh weia ...

Das funktioniert jetzt:

ftStatus = 
FT_OpenEx("12345678",FT_OPEN_BY_SERIAL_NUMBER,&FT232H_ftHandle);

Trotzdem vielen Dank!
OP #4707345
Lesenswert?

Das stimmt, aber ich will möglichst nichts an dem Linux konfigurieren 
müssen.

Jetzt läuft auch alles, nur es ist eine Ecke langsamer als unter 
Windows. Mit den gleichen Einstellungen für

T_SetUSBParameters
FT_SetLatencyTimer

und auch gleicher Blockgröße die gelesen werden soll.
#4707548
Lesenswert?

Gustl B. schrieb:
> AHHHHHHHH verdammt, ich hab das Problem behoben:

Jein

> Ich muss zuerst mit
> rmmod ftdi_sio
> den standardmäßig geladenen Treiber entfernen. Oh weia ...

Ich glaube, dein Problem sitzt tiefer. Du verwendest da irgendeine 
ranzige Library von FTDI, stimmts? Das macht man unter Linux nicht. 
Schon gar nicht, wenn es sich um einen simplen CDC handelt. Da freut man 
sich, daß das Kernelmodul die Details kapselt und daß man den seriellen 
Port genauso wie jeden anderen als character device ansprechen kann.

Details vom USB-Layer wie Vendor oder Seriennummer greift man entweder 
direkt aus dem sysfs ab (/sys/bus/usb/devices/*/serial) oder (besser) 
man nimmt libusb dafür. Das geht dann auch plattformübergreifend.
Gast #4707552
Lesenswert?

Axel S. schrieb:
> Details vom USB-Layer wie Vendor oder Seriennummer greift man entweder
> direkt aus dem sysfs ab (/sys/bus/usb/devices/*/serial) oder (besser)
> man nimmt libusb dafür. Das geht dann auch plattformübergreifend.

Windows und BSD kennen kein LibUSB - damit ist plattformübergreifend 
etwas übertrieben.
OP #4707744
Lesenswert?

Axel S. schrieb:
> Ich glaube, dein Problem sitzt tiefer. Du verwendest da irgendeine
> ranzige Library von FTDI, stimmts?

Ja natürlich weil ich der Auffassung bin, dass der Hersteller seine 
Hardware am besten kennt und die besten Treiber bietet.

Axel S. schrieb:
> Das macht man unter Linux nicht.
> Schon gar nicht, wenn es sich um einen simplen CDC handelt.

Das ist denn ein CDC und wieso macht man das nicht?

Axel S. schrieb:
> Details vom USB-Layer wie Vendor oder Seriennummer greift man entweder
> direkt aus dem sysfs ab (/sys/bus/usb/devices/*/serial) oder (besser)
> man nimmt libusb dafür. Das geht dann auch plattformübergreifend.

Das ist kein USB Serial. Ich nutze den Synchronen FIFO Modus.

Gurkenscheiße schrieb:
> Jede Anwendung soll also seine eigene Gurkenscheiße mixen?

Was willst Du damit genau fragen?
Wenn der Hersteller eine Lib mitliefert und die für mehrere 
Betriebsysteme anbietet, dann wäre es wünschenswert wenn die trotzdem 
immer gleich anzusprechen ist. Und ja, das ist sie auch einigermaßen, 
aber eben nicht ganz.
(Firma: RUB) #4707857
Lesenswert?

Gustl B. schrieb:
> weil ich der Auffassung bin, dass der Hersteller seine
> Hardware am besten kennt und die besten Treiber bietet.
Verabschiede dich von dem Gedanken :)

Richtig würde es heißen:
"...dass der Hersteller seine Hardware am besten kennen sollte..." <- 
dass ist aber nur sehr selten der Fall. Selbiges gilt auch und gerade 
für Software.

Peter II schrieb:
> Windows und BSD kennen kein LibUSB
Keine Ahnung in welchem Jahr du stehen geblieben bist...
http://libusb.info/
1
What platforms are supported?
2

3
Linux, OS X, Windows, Windows CE, Android, OpenBSD/NetBSD, Haiku.

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