Hallo allerseits,
ich möchte von einem Windows-XP-PC aus mittels einer Skriptsprache (am
liebsten Python – habe Python 2.7 eh installiert) zu Testzwecken mit
anzuschließenden I²C-Slaves quatschen. Der PC soll also I²C-Master sein.
Dazu habe ich mir Folgendes überlegt:
Hardware-Interface: i2c_tiny_usb (siehe Anm. 1)
Software-Interface: pyUSB (siehe Anm. 2)
Bis hierher eine kurze Zwischenfrage: Bin ich schon auf dem Holzweg?
Damit die beiden Ebenen sich verstehen, braucht es noch eine
Zwischenschicht (wie etwa libusb0, libusbx, libusb-win32, WinUSB). Und
dort hapert es bei meinem Verständnis. Soweit ich das verstehe, gibt es
einmal Quellen, die ein C-Programmierer nutzen kann, um in seiner
Anwendung die bereitgestellte Funktion dynamisch oder statisch
einzulinken. Andererseits gibt es einen, ich nenne es mal so, Treiber,
der in meinem Fall von pyUSB benutzt wird, um mit der unterliegenden
Hardware zu quatschen. (Von pyUSB "Backend" genannt.)
Da ich ja von Python und pyUSB ausgehen will und nicht von C, dachte ich
an letzteren Fall.
Nach ein bisschen Gesurfe fand ich das hier:
http://sourceforge.net/projects/libwdi/ . Von dort habe ich
zadig_v2.0.1.154.7z runtergeladen und damit "libusb-win32" installiert.
Windows fragt beim Einstecken nun nicht mehr nach Treibern. Das
Beispielprogramm zu pyUSB (siehe Anmerkung 2 ganz unten) erkennt auch
das Backend (libusb-win32) und die Hardware (i2c_tiny_usb, idVendor &
idProduct entsprechend angepasst, natürlich), aber in der dritten Zeile
nach "# get an endpoint instance", also bei "alternate_setting = …",
erhalte ich die Fehlermeldung
1 | USBError: [Errno None] libusb0-dll:err [control_msg] sending control message failed, win error: Die Anforderung wird nicht unterstützt.
|
aus den Tiefen vom pyUSB-Code.
Vom Wortlaut her würde ich das naiverweise so interpretieren, dass pyUSB
nicht im Backend implementierte Funktionalität nutzen will, dass also
libusb-win32 nicht neu genug ist.
Hat jemand von Euch hat Erfahrung damit und kann mich in die richtige
Richtung stupsen, um weiterzukommen?
Ich habe schon verschiedene Backends ausprobiert: Die von zadig
angebotenen (libusb 1.2.5.0, WinUSB v6.1.7600.16385, libusbK v3.0.4.0),
libusb_0.1.12.2, libusb-win32-bin-1.2.6.0.
Entweder kommen die genauso weit, oder sie erkennen die Hardware nicht,
oder pyUSB erkennt sofort das Backend nicht.
Gruß – Peter
1)
Siehe http://www.harbaum.org/till/i2c_tiny_usb/index.shtml . Ich habe
einfach die dort mitgelieferte Firmware (also die Datei
i2c_tiny_usb-2009-02-10.zip\i2c_tiny_usb\firmware\firmware.hex ) ohne
Kompilieren auf den ATTiny45 draufgespielt. Ergebnis: Windows erkennt
das Teil nach dem Einstecken und will Treiber installieren.
Soweit also erstmal gut.
2)
Siehe http://sourceforge.net/apps/trac/pyusb/ . pyusb-1.0.0a2.zip habe
ich von dort heruntergeladen und installiert (per "python setup.py
-install").
Für den Beginn las ich
https://github.com/walac/pyusb/blob/master/docs/tutorial.rst und dachte,
erstmal mit dem Beispiel unter "Let's get it started" anzufangen –
erstmal ignorierend, dass das physische Interface nur per Control
Endpoint reden möchte.