USB-GPIO HID Device

OP #7555963
Lesenswert?

Hallo,

hat jemand eine Ahnung ob es ein freies Projekt gibt welches ein GPIO HID Device zur Verfügung stellt?

Ich spezifiziere die Sache noch etwas weiter, ja es gibt hierzu kommerzielle Lösungen die funktionieren alle über Treiber.

Es gibt auch freie Lösungen z.Bsp über Serielle USB-Wandler mit GPIO Ports, aber der Support über Standard Treiber wird nicht unterstützt.

Es wird doch ein Projekt geben welches dann die GPIOs standardmäßig einfach zur Verfügung stellt? Gefundene Lösungen war die Kommunikation per HID sehr speziell.

Mein Problem ist eigentlich das ich für ein Entwicklungssystem zum Testen GPIOs benötige, da aber so ein PC die nicht zur Verfügung stellt wäre eine Lösung die man per USB ansteckt sehr schön.

Nur leider stellen gefundene Lösungen diese GPIOs dem System nicht so zur Verfügung das sie von Systemlösungen z.Bsp gpiolib verwendet werden können.

Was ich bereits ahne ist das es so ein GPIO Profil als HID in der USB-Spezifikation nicht gibt und deshalb die Sache nicht so einfach ist.

#7555981
Lesenswert?

Marco H. schrieb:

Es gibt auch freie Lösungen z.Bsp über Serielle USB-Wandler mit GPIO Ports, aber der Support über Standard Treiber wird nicht unterstützt.

Ja, das liegt daran, daß "Standard Treiber" kein GPIO kennen. USB-Seriell-Bridges sind halt USB-Seriell-Bridges und keine GPIO-Geräte, die können serielle Daten senden und empfangen und gegebenenfalls auch mit ihren Handshakeleitungen wackeln.

Bei HID sieht es nicht sehr viel anders aus; für die üblichen Standard-HID-Geräte wie Maus & Tastatur gibt es natürlich Standardtreiber, aber für das, was darüber hinausgeht, auch nicht.

GPIO via USB erfordert also immer irgendeine Speziallösung, auch wenn da mit einem USB-Gerät mit einer Standardgeräteklasse wie HID abgewickelt wird.

#7556110
Lesenswert?

Marco H. schrieb:

hat jemand eine Ahnung ob es ein freies Projekt gibt welches ein GPIO HID Device zur Verfügung stellt?

Sowas kann man kaufen. MCP2200 und MCP2221A sind vorprogrammierte USB-PICs, die neben einen UART gemäß CDC-ACM GPIOs und im Falle vom MCP2221A auch I2C via HID bereitstellen. In den Datenblättern stehen die erforderlichen Reports drin. Funktioniert auch, hab ich ausprobiert - ich brauchte das für eine Art Programmierschnittstelle bei einem NVidia-Board.

https://www.microchip.com/en-us/product/mcp2200 https://www.microchip.com/en-us/product/mcp2221a

fchk

OP #7556152
Lesenswert?

Hmmm schrieb:

Marco H. schrieb:

hat jemand eine Ahnung ob es ein freies Projekt gibt welches ein GPIO HID Device zur Verfügung stellt?

Das hier ist HID-basiert und mit Open-Source-Demosoftware:

https://www.pollin.de/p/odroid-usb-io-board-pic18f45k50-qfn-810267

https://github.com/hardkernel/Odroid-USBIO/tree/master/usbio/linux

Das Teil habe ich schon seit 2011 im Schrank und ich habe mir auch die Beispiele in C angeschaut. Man operiert mit den HID Device ziemlich umständlich. Es gibt keinen Treiber der die GPIOs dem System zur Verfügung stellt.

Der MCP stellt auch keine GPIOs zur Verfügung und es gibt ja auch Boards dafür. Überall steht das der Microchip Treiber keine GPIOs unterstützt.

#7556173
Lesenswert?

Marco H. schrieb:

Man operiert mit den HID Device ziemlich umständlich. Es gibt keinen Treiber der die GPIOs dem System zur Verfügung stellt.

Also willst Du eigentlich keine GPIOs als USB-HID-Device, sondern ein beliebiges USB-GPIO-Interface, für das es einen Kerneltreiber gibt, der es Dir als Linux-GPIO-Device serviert.

Einen generischen Treiber dafür kann es nicht geben, weil es - wie Du schon korrekt vermutet hast - keine "GPIO Device Class" gibt.

#7556197
Lesenswert?

Marco H. schrieb:

Das Teil habe ich schon seit 2011 im Schrank und ich habe mir auch die Beispiele in C angeschaut. Man operiert mit den HID Device ziemlich umständlich. Es gibt keinen Treiber der die GPIOs dem System zur Verfügung stellt.

Und das ist jetzt Dein Problem? Du bist unbedingt und unter allen Umständen darauf angewiesen, die GPIOs unter /sys/gpio/... zur Verfügung gestellt zu bekommen, und es ist Dir Dir unmöglich, alternative Routinen zu schreiben?

Der MCP stellt auch keine GPIOs zur Verfügung und es gibt ja auch Boards dafür. Überall steht das der Microchip Treiber keine GPIOs unterstützt.

Ja. Es steht Dir aber frei, das zu ändern. Du hast ja den gesamten Quellcode.

Wie Du schon geahnt hast: es kann keine generischen Lösungen geben.

Das eheste, was ich mir vorstellen könnte: ein FT260 USB-I2C (der wird out-of the box) als /dev/i2c-... erkannt, und daran einen von Linux unterstützten I2C-GPIO-Expander anklemmen. Den musst DU dann "nur noch" in einer udev-Rule irgendwie angemeldet bekommen.

fchk

#7557792
Lesenswert?

Du kannst einen (vom Kernel unterstützten) USB->I²C Adapter nehmen, notfalls den I2C-Tiny-USB, und am I²C-Bus einen GPIO-Chip (PCF8574 usw) anschließen. das ganze entsprechend verheiraten (echo "pcf8574 0x55" > /sys/bus/i2c/devices/i2c-99/new_device) und schon hast du schöne, vom Kernel verwaltete GPIOs...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren