Używanie sterowników FTDI D2XX z Pythonem z Raspberry Pi na softspocie Raspbian

Mamy urządzenie USB sterowane przez sterowniki F2DI D2XX. Obecnie jest kontrolowany z komputera z systemem Windows za pośrednictwem interfejsu Pythona i jako zabawny projekt próbowałem przenieść kontrolkę na Raspberry Pi (około 1/10 kosztu komputera, nie uwzględniając kosztu systemu operacyjnego).

Było wiele przeszkód do wyjaśnienia, ale po kilku tygodniach w końcu znalazłem wszystkie odpowiedzi i zadziałałem. Odpowiedzi zostały rozłożone na kilka forów, więc w podziękowaniu dla społeczności Stack Overflow pomyślałem, że skonsoliduję je tutaj.

Po pierwsze, projekt wymagał:

System operacyjny: wybrałem najnowszy"Astmatyczny" Raspbian (hard-float 2012-12-16) zStrona internetowa Raspberry Pi. Obejmuje to Pythona.TheSterowniki FTDI D2XX porozmawiać z naszym urządzeniem FTDI.Interfejs Pythona do sterownika D2XX. użyłemPyUSBNasz skrypt Pythona

Pobrałem dystrybucję Wheezy i użyłem Win32DiskImager do zapisu na karcie SD 4 GB. Raspberry Pi uruchomił się bez żadnych problemów. Następnie rozpakowałem bibliotekę D2XX (libftd2xx.so) i zainstalowałem ją/usr/local/lib.

PyUSB (1.6) jest obecnie testowany tylko na Windows, ale dostarczają kod źródłowy. Bardzo łatwo jest skompilować kopię dla Raspberry Pi. Zasadniczo zmodyfikuj plik setup.py, aby połączyć się z biblioteką libftd2xx.so (nie ma potrzeby jej kopiowania). Wyedytuj także d2xx / _d2xx.c, aby skomentować procedury bez implementacji Linuksa (obecnie ftobj_Rescan, ftobj_Reload ftobj_GetComPortNumber). Skopiuj WinTypes.h i ftd2xx.h z katalogu pobierania sterownika FTDI D2XX (w wersji) do ftdi-win32 i uruchompython setup.py install który skompiluje i zainstaluje moduł Pythona.

Kiedy już to wszystko zostało zrobione, napisałem prosty skrypt Pythona, aby porozmawiać z układem FTDI. Pamiętaj, że musisz uruchomić przez sudo.

import d2xx
jd = d2xx.open(0)
pd = jd.eeRead()
print pd

Moduł d2xx nie mógł znaleźć pliku libftd2xx.so. Tak więc zmodyfikowałem skrypt setup.py, aby połączyć się ze statyczną kopią biblioteki libftd2xx.a. Voila, miałem pierwszą wskazówkę dotyczącą problemu: biblioteka D2XX została zbudowana przy użyciu soft-float, a moja dystrybucja Wheezy została skonfigurowana do używania rejestrów zmiennoprzecinkowych. Oznacza to, że gcc w moim systemie wygenerowało kod, który był binarnie niezgodny z bibliotekami D2XX i nie pozwolił na ich połączenie.

Aby to naprawić, pobrałem pliksoft-float dystrybucja debian "wheezy" (2012-08-08) i napisał na kartę SD 4 GB. Tym razem obraz nie zostanie uruchomiony. Po rozejrzeniu się znalazłem topomocna odpowiedź. W skrócie, istnieje problem z obrazem rozruchowym soft-float, więc dla niektórych płyt Raspberry Pi nie chce się uruchomić. Rozwiązaniem jest zastąpienie pliku start.elf w dystrybucji soft-float takim, który działa np. kopia z twardego obrazu Raspbian. Na szczęście karta SD ma dwie partycje: jedną FAT i jedną ext3 (?). Obraz rozruchowy znajduje się na partycji FAT, więc trywialne użycie karty SD w oknie Windows było banalne, skopiuj plik start.elf, włóż miękką kartę SD i zaktualizuj plik start.elf -Pławik jeden. Po tym Raspberry Pi nie uruchomił żadnego problemu.

Po zainstalowaniu sterowników D2XX FTDI i zbudowaniu modułu Python d2xx z PyUSB, ponownie spróbowałem skryptu testowego. Znowu się nie udało. Moduł d2xx nie może odczytać biblioteki libftd2xx.so bez problemu, ale z jakiegoś powodu nie mógł po prostu rozmawiać z urządzeniem.

questionAnswers(2)

yourAnswerToTheQuestion