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
Gast
#1057322
Ich tippe mal: ftdi_sio (Kernelmodul) kriegt den FT232 abgenommen, da sich jetzt libftdi darum kümmert. Wäre also voll o.k.
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.
Gast
#1057742
> 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.
Bevor wir hier weiter im Nebel stochern - ein wenig code...
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
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
Gast
#1057768
Hast du simple.c von intra2net probiert?
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.
Gast
#1057782
Dann sind es wohl die Zugriffsrechte. Schau mal in die udev-Konfig oder probiere die Programme mit sudo.
Wenn ich den FTDI anstecke kommt in der syslog folgendes:
1 | |
2 | |
3 | |
4 | |
5 | |
Wenn ich das simple.c - Programm starte (auch als Sudo), dann kommte das:
1 | |
2 | |
Und ich kann mir nicht erklären wieso...
Gast
#1057819
> 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.
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
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?
"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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
1 | |
2 | |
3 | |
4 | |
Irgendwie werde ich nicht schlau aus der Sache, dass ich bereits gestern Nachmittag ein testprogramm am Laufen hatte... verzweifel
Gast
#1057932
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.
Der folgende Block ist bei allen 3 Tests gleich.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Hier wurde ftdi_sio geladen. simple.c wurde nicht gestartet
1 | |
wie man sieht, ist der Treiber ftdi_sio geladen. Beim nächsten Test wurde ftdi_sio nicht geladen. simple.c nicht gestartet
1 | |
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 | |
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
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.
Gast
#1057995
Sorry, nochmal wie oben aber: Mode=0666
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.
Gast
#1058003
Achso, auch usbfs muss mit devmode=0666 gemountet sein. Sollte aber alles für root keine Rolle spielen.
Kommt nichts, und wird nichts gesendet. Auch nicht als root. Jetzt bin ich am Ende meines Lateins...
Hat noch jemand eine Idee?
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
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.