Mit FTDI D2XX-Treiber mit Python von Raspberry Pi auf raspbian soft-float
Wir haben ein USB-Gerät gesteuert FTDI - D2XX-Treiber. Es ist derzeit gesteuert von einem Windows-Rechner über eine Python-Schnittstelle und als fun-Projekt habe ich versucht, bewegen Sie den regler auf einem Raspberry Pi (etwa 1/10tel der Kosten für einen PC, nicht einschließlich die OS-Kosten).
Gab es viele Hürden zu überwinden, aber nach ein paar Wochen habe ich endlich alle Antworten gefunden und habe es funktioniert. Die Antworten verteilten sich auf mehrere Foren, so als Dankeschön an die Stack Overflow community ich dachte, ich würde konsolidieren Sie hier.
Erste, das Projekt erforderlich:
- Betriebssystem: ich hob den neuesten "Wheezy" Raspbian (hard-float 2012-12-16) aus der Raspberry Pi Webseite. Diese enthalten die Python.
- Die FTDI D2XX-Treiber zu sprechen, um unsere FTDI-Gerät.
- Eine Python-Schnittstelle zu den D2XX-Treiber. Ich verwendet PyUSB
- Unsere Python-Skript
Ich habe die Wheezy-distribution und verwendet Win32DiskImager zum schreiben 4 GB SD-Karte. Der Raspberry Pi gebootet ohne Probleme. Ich habe dann entpackt die D2XX-Bibliothek (libftd2xx.so) und installiert es in /usr/local/lib
.
PyUSB (1.6), die derzeit getestet wird, nur gegen Windows, aber Sie liefern den source-code. Es ist ziemlich einfach, zu kompilieren eine Kopie für den Raspberry Pi. Grundsätzlich ändern setup.py link zu den libftd2xx.also-Bibliothek (ohne ihn kopieren zu müssen). Auch Bearbeiten d2xx/_d2xx.c kommentieren Sie die Routinen mit keine Linux-Implementierung (aktuell ftobj_Rescan, ftobj_Reload ftobj_GetComPortNumber). Kopieren WinTypes.h und ftd2xx.h von der FTDI-D2XX-Treiber download - (der Freisetzung) Verzeichnis ftdi-win32 und führen python setup.py install
kompilieren und installieren Sie das Python-Modul.
Nachdem all das erledigt war, schrieb ich ein einfaches Python-Skript zu sprechen, um die FTDI chip. Hinweis: Sie müssen über sudo.
import d2xx
jd = d2xx.open(0)
pd = jd.eeRead()
print pd
Den d2xx-Modul konnte nicht scheinen zu finden, die libftd2xx.so Datei. So, ich Zwickte die setup.py Skript link, um die statische Kopie der Bibliothek, libftd2xx.ein. Voila, hatte ich meine erste Ahnung von dem problem: Der D2XX-Bibliothek wurde erstellt mit soft-float, und meine Wheezy-distribution konfiguriert wurde, verwenden floating-point-Register. Das heißt, dem gcc auf meinem system generierten code, der wurde binären unvereinbar mit dem D2XX-Bibliotheken und Ihnen nicht gestatten würden, verlinkt zu werden.
Um dies zu beheben ich habe die soft-float debian "wheezy" distribution (2012-08-08) und habe die 4 GB SD-Karte. In dieser Zeit wird das Bild würde nicht mehr starten. Nach etwas recherche fand ich diese hilfreiche Antwort. In kurz, es gibt ein problem mit dem boot-image für die soft-float, so dass für einige Raspberry Pi boards Booten nicht. Die Lösung ist zu ersetzen den start.elf-Datei auf die soft-float-Verteilung mit ein, das funktioniert z.B. eine Kopie aus dem hard-float-Raspbian image. Glücklicherweise hat die SD-Karte hat zwei Partitionen: eine FAT und einer ext3(?) ein. Das boot-image auf die FAT-partition, so war es trivial, um pop-die hard-float-SD-Karte in einen Windows-Rechner, kopieren den start.elf-Datei, pop in die soft-float-SD-Karte, und aktualisieren Sie Ihre beginnen.elf, die mit der hard-float. Nach, dass der Raspberry Pi gebootet keine problem.
Nach der Installation der FTDI - D2XX-Treiber und den Aufbau einer d2xx Python-Modul aus PyUSB, ich habe versucht, das test-Skript erneut aus. Wieder ist es gescheitert. Die d2xx-Modul Lesen konnte libftd2xx.also-Bibliothek kein problem, aber aus irgendeinem Grund konnte nur nicht sprechen, um das Gerät.
InformationsquelleAutor TheDuke | 2013-01-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich war nicht sicher, wo das problem lag: War es PyUSB, ein Problem mit FTDI ist libftd2xx.so oder so ein Problem mit der Debian-distribution?
Mit dem FTDI-Paket gibt es einen test, unter
release/examples/EEPROM/read
. Man muss es bauen, aber es ist einfach eine Frage der Eingabe machen. Es läuft (über sudo), es versäumt, öffnen Sie das USB-Gerät, so deutlich war es nicht PyUSB. Nach stochern, fand ich einen Hinweis auf einen Treiber, ftdi_sio, und es könnte zu Konflikten mit anderen D2XX-Treiber. Also, mit lsmod, ich sah ftdi_sio war bereits standardmäßig installiert, so lief ichrmmod ftdi_sio
. Danach funktionierte alles. Der read-Befehl sollte zeigen, so etwas wie dieses:Ich auch umgestellt von PyUSB zu ftd2xx, denn es ist reines python, aber es war nicht unbedingt notwendig.
InformationsquelleAutor TheDuke
Gibt es eine spezielle version des libftd2xx 1.1.12 behebt die Probleme auf dem Raspberry pi. Das würde wahrscheinlich dein problem lösen.
Habe ich vergessen wo ich es gefunden habe, aber ich habe eine Kopie auf der download-Seite meiner Homepage, Lightput Download-Seite.
Ich habe versucht, die Verknüpfung und es erscheint diese gebaut werden, die mit der hard-float-API (die ist groß), so dass Sie mit der neuesten hard-float Raspbian Wheezy.
Ehrlich gesagt, Nein, ich war gerade auf der Suche nach einer Antwort auf das problem, und jemand teilte einen link zu einer bestimmten version, ich habe keine Ahnung, was fest über es, aber es funktioniert ganz gut 🙂
InformationsquelleAutor Mike