www.mikrocontroller.net

Forum: PC Hard- und Software LIBFTDI "device disconnected" - Kein brltty-Problem - Serial-Converter ft232bm


Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich tippe mal: ftdi_sio (Kernelmodul) kriegt den
FT232 abgenommen, da sich jetzt libftdi darum
kümmert. Wäre also voll o.k.

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wäre auch kein Problem, wenn ich wenigstens Daten senden oder 
empfangen könnte.
Jedoch kommen weder Daten am PC an, noch am µC sobald der ftdi_sio 
disconnected ist.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das wäre auch kein Problem, wenn ich wenigstens Daten senden oder
> empfangen könnte.

Das musst du dann mit den Funktionen der libftdi tun, das Device
als Gerät existiert dann halt nicht mehr.

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bevor wir hier weiter im Nebel stochern - ein wenig code...
struct ftdi_context ftdic;
  unsigned char buff[10] = "reset mcu\n";
  int ret;
  
  if(ftdi_init(&ftdic) != 0)
    printf("couldn't allocate read buffer: %s\n",ftdi_get_error_string(&ftdic));
  if(ftdi_usb_open(&ftdic,0x0403,0x6001) != 0)
    printf("Couldn't open USB: %s\n",ftdi_get_error_string(&ftdic));
  if(ftdi_set_baudrate(&ftdic,57600) != 0)
    printf("Couldn't set Baudrate: %s\n",ftdi_get_error_string(&ftdic));
  if(ftdi_set_line_property(&ftdic,BITS_8,STOP_BIT_1,NONE) != 0)
    printf("Setting line property failed : %s\n",ftdi_get_error_string(&ftdic));
  
  ret = ftdi_write_data_async(&ftdic,buff,10);
  if(ret > 0)
    printf("Number of written bytes: %d\n",ret);
  
  if(ftdi_usb_close(&ftdic) != 0)
    printf("Couldn't close USB: %s\n",ftdi_get_error_string(&ftdic));
  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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du simple.c von intra2net probiert?

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich, selbes Problem...
interessanter Weise ist dieses Problem erst im Laufe eines Abends 
entstanden.
Irgendwo ist etwas "verstellt" wie es scheint.

die simple.c lief nämlich zu Anfang noch.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann sind es wohl die Zugriffsrechte. Schau mal in
die udev-Konfig oder probiere die Programme mit sudo.

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich den FTDI anstecke kommt in der syslog folgendes:
Nov 24 19:59:39 notebook kernel: [11514.800365] usb 5-2: new full speed USB device using uhci_hcd and address 14
Nov 24 19:59:39 notebook kernel: [11514.981283] usb 5-2: configuration #1 chosen from 1 choice
Nov 24 19:59:39 notebook kernel: [11514.982770] ftdi_sio 5-2:1.0: FTDI USB Serial Device converter detected
Nov 24 19:59:39 notebook kernel: [11514.983077] ftdi_sio: Detected FT232BM
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:
Nov 24 20:00:11 notebook kernel: [11546.365254] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
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...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...
Nov 24 20:45:04 tjohn-notebook kernel: [14239.576158] usb 5-2: new full speed USB device using uhci_hcd and address 20
Nov 24 20:45:04 tjohn-notebook kernel: [14239.753605] usb 5-2: configuration #1 chosen from 1 choice
Nov 24 20:45:04 tjohn-notebook kernel: [14239.846146] usbserial: USB Serial support registered for FTDI USB Serial Device
Nov 24 20:45:04 tjohn-notebook kernel: [14239.846847] ftdi_sio 5-2:1.0: FTDI USB Serial Device converter detected
Nov 24 20:45:04 tjohn-notebook kernel: [14239.847587] ftdi_sio: Detected FT232BM
Nov 24 20:45:04 tjohn-notebook kernel: [14239.847923] usb 5-2: FTDI USB Serial Device converter now attached to ttyUSB0
Nov 24 20:45:04 tjohn-notebook kernel: [14239.848230] usbcore: registered new interface driver ftdi_sio
Nov 24 20:45:04 tjohn-notebook kernel: [14239.848235] ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver
Nov 24 20:45:20 tjohn-notebook kernel: [14255.594094] usbcore: deregistering interface driver ftdi_sio
Nov 24 20:45:20 tjohn-notebook kernel: [14255.594546] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
Nov 24 20:45:20 tjohn-notebook kernel: [14255.594576] ftdi_sio 5-2:1.0: device disconnected
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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

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

Hier wurde ftdi_sio geladen. simple.c wurde nicht gestartet
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
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.
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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, nochmal wie oben aber: Mode=0666

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das habe ich vor 2 min auch gemacht. Mal testen...
MODE="0666", GROUP="dialout"

in der Gruppe dialout bin ich. Zusätzlich auch in plugdev, in der man 
eigentlich immer ist.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, auch usbfs muss mit devmode=0666 gemountet sein.
Sollte aber alles für root keine Rolle spielen.

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommt nichts, und wird nichts gesendet. Auch nicht als root.
Jetzt bin ich am Ende meines Lateins...

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat noch jemand eine Idee?

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte das Problem wohl daran liegen, dass ich RTS/CTS und DTR/DSR 
völlig unbeschaltet gelassen habe?
Irgendwo habe ich gelesen, dass der FT232 nichts macht wenn RTS/CTS 
nicht korrekt beschaltet ist.

Kann ich RTS/CTS einfach "kurzschließen" um einen Hardware-Handshake zu 
"vorzugaukeln" ?

Besten Gruß,
 Tobias

Autor: Tobias John (tobiasjohn) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

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.