LIBFTDI "device disconnected" - Kein brltty-Problem - Serial-Converter ft232bm

OP Persönliche Seite #1057054
Lesenswert?

Hallo zusammen,

auf den ersten Blick mag das Problem ein "alt-bekanntes" sein.
Jedoch ist es das wohl nicht.

Ich versuche mit der libftdi in C einen FT232BM anzusprechen.
Die Lib gibt mir einige Grundlegende Funktionen hierfür.
U.A. ftdi_usb_open(&ftdic, 0x0403, 0x6001).

Das Problem: Sobald ich diesen Befehl ausführe bekomme ich in der syslog 
folgendes:

[ 4029.583531] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now 
disconnected from ttyUSB0
[ 4029.584526] ftdi_sio 5-2:1.0: device disconnected

Und dann ist logischerweise das Device nicht mehr ansprechbar.

brltty habe ich schon deinstalliert - das ist nicht das Problem.

Hat jemand einen Tipp?

Gruß,
 Tobias
OP Persönliche Seite #1057754
Lesenswert?

Bevor wir hier weiter im Nebel stochern - ein wenig code...
1
struct ftdi_context ftdic;
2
  unsigned char buff[10] = "reset mcu\n";
3
  int ret;
4
  
5
  if(ftdi_init(&ftdic) != 0)
6
    printf("couldn't allocate read buffer: %s\n",ftdi_get_error_string(&ftdic));
7
  if(ftdi_usb_open(&ftdic,0x0403,0x6001) != 0)
8
    printf("Couldn't open USB: %s\n",ftdi_get_error_string(&ftdic));
9
  if(ftdi_set_baudrate(&ftdic,57600) != 0)
10
    printf("Couldn't set Baudrate: %s\n",ftdi_get_error_string(&ftdic));
11
  if(ftdi_set_line_property(&ftdic,BITS_8,STOP_BIT_1,NONE) != 0)
12
    printf("Setting line property failed : %s\n",ftdi_get_error_string(&ftdic));
13
  
14
  ret = ftdi_write_data_async(&ftdic,buff,10);
15
  if(ret > 0)
16
    printf("Number of written bytes: %d\n",ret);
17
  
18
  if(ftdi_usb_close(&ftdic) != 0)
19
    printf("Couldn't close USB: %s\n",ftdi_get_error_string(&ftdic));
20
  ftdi_deinit(&ftdic);

Ich sende "reset mcu\n". Der µC sollte diesen String erkennen und eine 
Funktion aufrufen. Alle Zeichen die am UART eingehen werden zusätzlich 
auf einem LCD ausgegeben. Mit dem "serial port terminal" geht das auch. 
Ich möchte aber meine eigene Applikation dafür haben.

Am ftdi sind auch RX/TX-Leds die den Datenverkehr anzeigen.
Die Empfangs-Led leuchtet kurz einmal auf, wenn ich das Programm das 
erste mal starte, beim zweiten Start sagt die auch nichts mehr.

Gruß,
 Tobias
OP Persönliche Seite #1057791
Lesenswert?

Wenn ich den FTDI anstecke kommt in der syslog folgendes:
1
Nov 24 19:59:39 notebook kernel: [11514.800365] usb 5-2: new full speed USB device using uhci_hcd and address 14
2
Nov 24 19:59:39 notebook kernel: [11514.981283] usb 5-2: configuration #1 chosen from 1 choice
3
Nov 24 19:59:39 notebook kernel: [11514.982770] ftdi_sio 5-2:1.0: FTDI USB Serial Device converter detected
4
Nov 24 19:59:39 notebook kernel: [11514.983077] ftdi_sio: Detected FT232BM
5
Nov 24 19:59:39 notebook kernel: [11514.983466] usb 5-2: FTDI USB Serial Device converter now attached to ttyUSB0


Wenn ich das simple.c - Programm starte (auch als Sudo), dann kommte 
das:
1
Nov 24 20:00:11 notebook kernel: [11546.365254] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
2
Nov 24 20:00:11 notebook kernel: [11546.365545] ftdi_sio 5-2:1.0: device disconnected

Und ich kann mir nicht erklären wieso...
Gast #1057819
Lesenswert?

> Und ich kann mir nicht erklären wieso...

Die libftdi ist so freundlich, den Kerneltreiber für dich
zu entladen, da sie das Device selbst übernimmt. Sonst
gäbe es Probleme, weil beide Treiber sich für zuständig
halten. Mit anderen Treibern (z.B. von FTDI) bleibt
es dem Nutzer selbst überlassen ftdi_sio zu entfernen.

Brauchst du eigentlich libftdi? Einen UART kann man einfacher
über eben ftdi_sio und termios ansteuern.
OP Persönliche Seite #1057837
Lesenswert?

Naja, was heißt "brauchen". Wenn es möglich ist, dann wäre es schon 
schön, wenn ich mit der libftdi arbeiten könnte, da diese Lib einige 
Vorteile bietet. z.B. die volle Geschwindigkeit...

Ok, wenn die libftdi den ftdi_sio aus dem Kernel schmeißt, dann ist das 
wohl so Absicht.
Aber wieso kann ich dann als root und mit geänderten Zugriffsrechten mit 
udev-Regel keine Daten senden oder Empfangen?

Das ist mir nicht klar. Zumal die simple.c schon einmal lief (gestern 
nachmittag). Und dann plötzlich nicht mehr...
Gast #1057851
Lesenswert?

Da gibt es mehrere Möglichkeiten:

Die Installation der libftdi wurde durch einen hilfreichen
Prozess beim Booten entfernt. Prüfen mit
"sudo ldconfig -v |grep libftd*"

Der ftdi_sio stört doch noch. Mit rmmod nach Anstecken des
FT232 erledigen.

Sagt /var/log/messages nichts zusätzliches?
OP Persönliche Seite #1057871
Lesenswert?

"sudo ldconfig -v |grep libftd*"
--------------------------------
libftdi.so.1 -> libftdi.so.1.14.0


ftdi_sio habe ich schon mehrfach zum testen mit rmmod entfernt.


/var/log/messages liefert im Grunde selbiges wie syslog...
1
Nov 24 20:45:04 tjohn-notebook kernel: [14239.576158] usb 5-2: new full speed USB device using uhci_hcd and address 20
2
Nov 24 20:45:04 tjohn-notebook kernel: [14239.753605] usb 5-2: configuration #1 chosen from 1 choice
3
Nov 24 20:45:04 tjohn-notebook kernel: [14239.846146] usbserial: USB Serial support registered for FTDI USB Serial Device
4
Nov 24 20:45:04 tjohn-notebook kernel: [14239.846847] ftdi_sio 5-2:1.0: FTDI USB Serial Device converter detected
5
Nov 24 20:45:04 tjohn-notebook kernel: [14239.847587] ftdi_sio: Detected FT232BM
6
Nov 24 20:45:04 tjohn-notebook kernel: [14239.847923] usb 5-2: FTDI USB Serial Device converter now attached to ttyUSB0
7
Nov 24 20:45:04 tjohn-notebook kernel: [14239.848230] usbcore: registered new interface driver ftdi_sio
8
Nov 24 20:45:04 tjohn-notebook kernel: [14239.848235] ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver
1
Nov 24 20:45:20 tjohn-notebook kernel: [14255.594094] usbcore: deregistering interface driver ftdi_sio
2
Nov 24 20:45:20 tjohn-notebook kernel: [14255.594546] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
3
Nov 24 20:45:20 tjohn-notebook kernel: [14255.594576] ftdi_sio 5-2:1.0: device disconnected
4
Nov 24 20:45:20 tjohn-notebook kernel: [14255.595768] usbserial: USB Serial deregistering driver FTDI USB Serial Device

Irgendwie werde ich nicht schlau aus der Sache, dass ich bereits gestern 
Nachmittag ein testprogramm am Laufen hatte... verzweifel
Gast #1057932
Lesenswert?

Langsam werde ich auch ratlos.

Schau mal in /proc/bus/usb/devices. Dort findest du
den FT232 und eine Angabe zum verwendeten Treiber.
Nach dem Entfernen von ftdi_sio sollte das [none]
sein. Wenn du simple.c mit einer Endlosschleife
am Ende laufen lässt, solltest du da den zuständigen
Treiber finden.
OP Persönliche Seite #1057957
Lesenswert?

Der folgende Block ist bei allen 3 Tests gleich.
1
T:  Bus=05 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  4 Spd=12  MxCh= 0
2
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
3
P:  Vendor=0403 ProdID=6001 Rev= 4.00
4
S:  Manufacturer=FTDI
5
S:  Product=USB <-> Serial
6
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 90mA
7
I: Individuell - je nach Treiber
8
E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
9
E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms

Hier wurde ftdi_sio geladen. simple.c wurde nicht gestartet
1
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio
wie man sieht, ist der Treiber ftdi_sio geladen.

Beim nächsten Test wurde ftdi_sio nicht geladen. simple.c nicht 
gestartet
1
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
Hier sieht man: Driver "none". Wie es sein soll.

Beim letzten Test habe ich ftdi_sio nicht geladen und simple.c ist in 
der endlosschleife.
1
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=usbfs
Hier wurde der Treiber usbfs geladen. Auch wie es sein soll.



Vielleicht ist es ja doch ein Rechte-Problem.
Wie kann ich das überprüfen und eventuell anpassen?

Gruß,
 Tobias
Gast #1057993
Lesenswert?

Das sieht wirklich korrekt aus. Wenn es ein
Rechteproblem wäre, sollten die Programme mit sudo
funktionieren. Ich habe ganz plump die permissions
in /etc/udev/rules.d/40-permission.rules unter
Subsystem=usb_device auf 06660 gestellt.
OP Persönliche Seite #1060180
Lesenswert?

Tatsächlich funktioniert es wenn ich RTS und CTS zusammenschließe.
Die Daten werden gesendet und vom µC korrekt verarbeitet.

Jetzt soll der µC etwas zurücksenden. Das senden geht auch (das zeigt 
mir eine LED am ft232bm).
Leider kann ich mit ftdi_read_data die Daten nicht einlesen. Es werden 
immer 0 Byte empfangen....

hat dazu jemand eine Idee?

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