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

Schreibe einen Kommentar