Forum: Mikrocontroller und Digitale Elektronik USB-GPIO HID Device


von Marco H. (damarco)


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.

: Bearbeitet durch User
von Hmmm (hmmm)


Lesenswert?

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

von Harald K. (kirnbichler)


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.

von Frank K. (fchk)


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

von Marco H. (damarco)


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.

: Bearbeitet durch User
von Hmmm (hmmm)


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.

von Frank K. (fchk)


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

von Guido K. (Firma: Code Mercenaries GmbH) (thebug)


Lesenswert?

Der Klassiker der I/O-Controller der über Generic HID läuft, ist der 
IO-Warrior:
https://www.codemercs.com/de/io

Aber wie On-Board-GPIO können die Pins nicht zur Verfügung stehen, da 
sie sich nun mal nicht im Adressraum der CPU befinden. Also etwas 
USB-Kommunikation ist notwendig.

von Εrnst B. (ernst)


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...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.