Hallo,
ich habe mich vor Kurzem auch mal gewagt in die Welt der Mikrocontroller
einzutauchen und bin demnach noch ein ziemlicher Grünschnabel. Ich hatte
mir ein kleines Experimentierset gekauft, das mir bei diesem Weg helfen
sollte. Allerdings ist dieses Set vollkommen auf MS Windows ausgelegt
und die zugehörigen Source Codes wurden auch noch in VB geschrieben. Nun
möchte ich das ganze aber unter Linux in C programmieren. Also habe ich
versucht die ersten Beispielprogramme umzuschreiben, habe mir von FTDI
die Linux-Samples angesehen und mich an die Referenzen des FTDI D2XX
Programmer's Guide gehalten. Der D2XX Treiber für den FT232R ist
natürlich auch installiert. Das Gerät wird also unter Linux erkannt und
mein erster Programmierversuch funktioniert auch teilweise schon, leider
aber nicht vollständig und nun weiß ich nicht weiter. Vielleicht könnt
ihr mir da ja etwas unter die Arme greifen. Hier erstmal der Quelltext:
Ist nichts spektakuläres, aber ein Anfang. In dem Quelltext befinden
sich 3 Statusabfragen. Alleine die erste Abfrage, wie viele Geräte
angeschlossen sind, funktioniert. Die letzten beiden geben immer einen
Fehler aus, wo ftStatus den Wert 18 hat. Ich habe schon überall nach
error codes gesucht, aber ich bin einfach nicht fündig geworden. Wäre
schön, wenn ihr mir da in irgendeiner Weise helfen könntet.
Grüße, Marc
Hallo ihr beiden,
danke für eure Antworten. Den Fehlercode zu haben ist auf alle Fälle
schon mal sehr schön. Jetzt heißt es nur noch rausbekommen, was der
ominöse "OTHER_ERROR" sein könnte.
Das mit der libftdi habe ich allerdings nicht so recht verstanden.
Welche Quelltext-Datei oder Dokumentation müsste ich mir da ansehen?
Bisher habe ich immer die Linux-Samples mit den
Dokumentations-Beispielen verglichen und diese dann nochmal mit dem aus
dem Experimentierset mitgelieferten VB-Quellcode. Soweit ich den VB-Code
richtig verstehe und die FTDI-Doku keine Fehler beinhaltet, müsste ich
eigentlich alles richtig gemacht haben. Vielleicht nicht wirklich
sinnvoll programmiert, aber immer noch richtig. Darum verstehe ich auch
den Fehlercode nicht. Aber es scheint ja wieder irgend ein
Ausnahmefehler zu sein. Ich werde mal den FTDI-Support anschreiben und
schaun, ob der eine Idee bezüglich seines "OTHER_ERROR" Fehlercodes hat.
:)
Trotzdem danke Jungs! Das erleichtert auf alle Fälle schon mal, denn ich
dachte eigentlich, dass ich irgendwelche Typ-Fehler bzw. Pointer-Fehler
gemacht hätte.
Grüße, Marc
@Michael G.
Also ich habe jetzt nochmal gelesen und gesucht. Du meinst sicherlich
die libFTDI von Thomas Jarosch
(http://www.intra2net.com/en/developer/libftdi/index.php). Habe ich
momentan noch keine Kopf für, aber werde ich mir noch ansehen.
@Holger
Diese Doku ist der Grund, dass ich überhaupt schon so "weit" bin.
Ich habe nun den FTDI Support kontaktiert, aber bisher kam noch keine
Antwort. Unter Windows mit den VB-Beispielcodes läuft übrigens alles
wunderbar. Ich habe so langsam das Gefühl, dass es an dem d2xx Treiber
für Linux liegt. Ich habe zwar genau die Installationsanweisungen zur
Installation des Treibers befolgt, aber ob er auch 100%ig funktioniert,
das kann ich nicht wirklich beweisen. Dass er mir bei dem obigen
Quelltext ein USB Gerät erkennt, das kann ja schon funktionieren, nur
weil das Gerät angeschlossen ist, was aber nicht heißt, dass auch der
Treiber für das Gerät funktioniert und verwendet werden kann. Liege ich
damit halbwegs richtig? Kann mir denn jemand sagen wie ich unter Linux
eindeutig überprüfen kann, ob dieser d2xx Treiber auch wirklich
installiert wurde? Ich verwende die Linux Distribution Ubuntu 9.04
(Jaunty Jackalope).
Also einen kleinen Nachweis habe ich gefunden, den Linux mir bzgl.
meines FTDI USB Gerätes präsentiert.
Ich habe im Terminal einfach mal den Befehl "lsusb" verwendet und bekam
eine Auflistung aller USB-Anschlüsse und deren angeschlossene Geräte.
Darunter befand sich dann auch folgende Zeile:
Bus 002 Device 003: ID 0403:6001 Future Technology Devices
International, Ltd FT232 USB-Serial (UART) IC
Aber reicht das schon als Beweis, dass der Treiber richtig installiert
wurde? Da fällt mir eine, eigentlich ist das ja eine blöde Frage, weil
ohne den Treiber könnte ich ja nicht die FT_ Funktionen ausführen. Hm,
weiß wirklich nicht mehr weiter.
Habe auch mal versucht mit FT_Open das gerät zu öffnen, aber dann bekomm
ich den Fehlercode 3, was so viel heißen soll, dass das Gerät sich nicht
öffnen lässt. Wer hätte es gedacht...
Hat nicht noch jemand irgend eine Idee?
Soo, noch etwas...
In der Readme bezüglich der Installation des d2xx Treibers unter Linux
steht folgendes:
Other problems will be related to the ftdi_sio driver loading -
1.you must unload this driver (and usbserial) if it is attached to your
device ("rmmod ftdi_sio" and "rmmod usbserial"as root user).
2.Your PID/VID has not been included in the distribution.A PID of 0x6006
and VID of
0x0403 should work as a temporary workaround.
Zugegebenermaßen kann ich weder mit der ersten noch mit der zweiten
Fehlerursache etwas anfangen. Den zweiten Punkt verstehe ich gar nicht
und bei Punkt 1 habe ich das so verstanden, dass sich "ftdi_sio" (der
eigentliche Treiber oder?) mit "usbserial" (in Linux standardmäßig
integriert?) beißt. Darum soll man sie entfernen, aber warum beide? Ich
würde das gerne verstehen, denn mit dem Befehl "lsmod" im Terminal habe
ich beide Module angezeigt bekommen, wobei das usbserial Modul von
ftdi_sio verwendet wird. Möchte jetzt aber nicht sofort etwas einfach
entfernen, wenn ich dann gar nicht weiß, was ich da gemacht habe.
Kennt sich damit jemand aus?
Ich wäre euch echt sehr dankbar.
Hallo Marc,
ob der Treiber das Gerät übernommen hat, kannst du unter /proc/bus/usb
nachsehen. Nach meiner Erfahrung wird ftd_sio automatisch removed, wenn
ftd2xx lädt. Das sind aber völlig unterschiedliche Treiber.
Die Treiber erkennen Geräte an der VID/PID-Kombination, die im
EEPROM am FTDI-Chip angegeben ist. Was da steht findest du auch in
/proc.
Probleme gibt es eigentlich nur durch mangelnde Rechte. Wenn etwas nicht
klappt, immer erst mal mit sudo probieren.
Gruß, Guido
Möglicherweise hängt auch noch ein anderes Gerät mit FTDI-chip am
Rechner? Ich habe hier einen Fall, wo der Parallelbetrieb bicht
funktionert. Beide haben diesselbe PID/VID und können sich natürlich
nicht einigen, welcher Treiber zu wem gehört-
Hallo Guido, hallo Andy,
das klingt alles sehr interessant. Nun kann ich mir langsam das Puzzel
zusammensetzen, was es mit den ganzen Bezeichnungen auf sich hat. Habe
mich mal im Verzeichnis proc.. umgeschaut. Das sieht für mich als
Linux-Anfänger alles sehr hilfreich aus. Leider habe ich nach meinem
kurzen Rüberschauen noch keinen Treiber zu dem FTDI Gerät gefunden und
ebenso auch keine PID/VID's. Werde aber gleich noch etwas genauer
schauen. Habe nur festgestellt, dass die jeweiligen Dateien alle Inhalt
besitzen, was sich am Icon der Dateien erkennen lässt, aber wenn ich sie
öffne, dann sind sie meist leer. Egal welche Datei ich im Verzeichnis
proc.. öffne. Habe es auch schon mit Adminrechten probiert.
So, nun aber zum eigentlichen Thema und zur guten Nachricht. Es lag
wirklich an den Adminrechten. Nun funktioniert mein kleines Programm
fehlerfrei. Der Support von FTDI hat nun auch geantwortet und siehe da,
ich solle es mal mit "sudo" probieren. ;) Hätte ich ja eigentlich auch
selber drauf kommen können, so oft wie man Adminrechte unter Ubuntu
braucht. Dass Adminrechte für einen Zugriff auf ein USB Gerät benötigt
werden, kann ich zwar nicht nachvollziehen, aber soll mir recht sein.
@Guido
Danke dir auf alle Fälle für deine Hilfe! Sie hat mir nun endlich die
Türen geöffnet. Das ganze hätte ich wohl noch eine halbe Ewigkeit ohne
Adminrechte ausprobiert. ;)
@Andy
Von einem weiteren FTDI-Gerät ist mir nichts bekannt, aber trotzdem gut
zu wissen, dass es den Fall mit den gleichen PID/VID's auch geben kann.
Danke dir dafür.
Grüße, Marc