Wie erkennt man, welche Art von HAT- oder GPIO-Karte angeschlossen ist - falls vorhanden?

8

Ich richte einige Raspberry Pis für die Verwendung in Demos für Kollegen ein, um die Funktionen des Pi selbst und einiger der verfügbaren Add-On-Boards zu demonstrieren.

Ich möchte wirklich in der Lage sein, ein Cron-Job / Start-up-Skript für alle möglichen Demos zu verwalten, die ich einrichte, und dieses Skript erkennen zu lassen, welche HAT- oder ältere GPIO-Karte angeschlossen ist, damit ich eine auslösen kann entsprechendes Demo-Skript / Programm.

Zum Beispiel,

  • Wenn ein SenseHAT angeschlossen ist, starten Sie automatisch ein Sense HAT Marble Maze
  • Wenn ein Display-O-Tron-HAT angeschlossen ist, führen Sie das Menübeispiel automatisch aus
  • Wenn ein PiTFT-Bildschirm angeschlossen ist, starten Sie automatisch eine Foto-Diashow

Gibt es eine Möglichkeit, Python, sh oder ähnliches auszuführen, um festzustellen, welche der gängigen GPIO-Karten mit einem Pi verbunden ist?

Dinge, über die ich nachgedacht habe:

  • Verwenden von Informationen aus Pinout.xyz , um die verwendeten Pins zu erkennen, aber das klingt nach viel Arbeit.

Beachten Sie, dass ich beabsichtige, die Konfiguration automatisch zu erkennen, ohne eine Tastatur, ssh in oder ähnliches anschließen zu müssen - daher der Wunsch nach automatischer Erkennung und warum so etwas wie das Festlegen einer Umgebungsvariablen nicht helfen würde.

Clare Macrae
quelle
1
Ich denke, dass dies mit Hüten möglich ist, da sie einen Eprom enthalten, der für das Setup verwendet wird. Sie können den Rest wahrscheinlich mit einigen Shell-Skripten bestimmen und sich ansehen, was von dmesg, lsusb usw. gemeldet wird. Möglicherweise möchten Sie auch eine Umgebungsvariable festlegen, die Sie beim Austausch von Hardware ändern.
Steve Robillard
@SteveRobillard, kommen alle Hüte mit einem Eprom? Sind sie nicht stapelbar? Wenn ja, wie werden die dann mehreren Eprom separat angesprochen?
Ghanima
@SteveRobillard Vielen Dank für den Vorschlag. Ich habe meine Frage geklärt, um zu sagen, warum das Festlegen von Umgebungsvariablen (und anderen Tastaturinteraktionen) nicht funktioniert. Ich hatte noch nie von dmesg und lsusb gehört. Das Googeln zeigte mir, dass ich Ihren Raspberry Pi kenne, der auch gut aussieht.
Clare Macrae
@ Ghana Ich würde mich sehr freuen, dies für den One-HAT-Fall zu lösen und mir keine Sorgen darüber zu machen, sie zu stapeln!
Clare Macrae
Gut gelesen: github.com/raspberrypi/hats
Ghanima

Antworten:

5

Nachdem Sie die sehr hilfreichen früheren Kommentare und Antworten von Steve Robillard und Ghanima gelesen haben :

/ proc / device-tree / hat / product

Wenn /proc/device-tree/hat/productvorhanden, haben Sie einen HAT angehängt und geladen - und diese Datei enthält den Namen HAT.

Hier sind einige Beispielausgaben:

Display-o-Tron HUT

cat /proc/device-tree/hat/product
Display-o-Tron HAT

Namen und Inhalt aller Dateien /proc/device-tree/hat/für dieses Gerät:

name: hat
product: Display-o-Tron HAT
product_id: 0x0007
product_ver: 0x0001
uuid: 666dfe9b-9d78-4825-bbfe-1697048fc6cd
vendor: Pimoroni Ltd.

Adafruit PiTFT Plus - 3,5 Zoll

cat /proc/device-tree/hat/product
Adafruit PiTFT Plus - 3.5 inch Resistive

Namen und Inhalt aller Dateien /proc/device-tree/hat/für dieses Gerät:

name: hat
product: Adafruit PiTFT Plus - 3.5 inch Resistive Touch
product_id: 0x0000
product_ver: 0x0000
uuid: 684cdc28-d27f-4065-9d11-bb3f3463786d
vendor: Adafruit Industries

Update: 2018-05-17

Einige Geräte werden als HATs vermarktet, haben jedoch kein EEPROM mit einem gültigen Daten-Blob. In diesem Fall kann der Typ "HAT" nicht erkannt werden, da er nicht der HAT-Spezifikation entspricht.

Update: 2020-01-07

Ich habe ein Github-Repo mit einem Skript erstellt, um die Daten für die HATs zu erhalten, auf die ich Zugriff hatte, und um diejenigen aufzuzeichnen, die nicht wirklich HATs sind:

https://github.com/claremacrae/raspi_hat_data

Pull-Anfragen sind willkommen - führen Sie einfach das copy_hat_data.shSkript in diesem Repo aus.

Clare Macrae
quelle
1
Ich bin froh, dass das gut für dich funktioniert! Vielen Dank für den realen Inhalt des Gerätebaums. Es hilft sicherlich, das Problem besser zu verstehen.
Ghanima
Es funktioniert noch! Das Problem, das Sie auf github verlinkt haben, war nur ein Benutzerfehler.
Paul Slocum
Danke @PaulSlocum - Ich habe dies aktualisiert und das Repo darüber offensichtlicher gemacht. Wenn Sie es mit HATs ausprobieren, für die ich keine Daten hatte, würde ich es wirklich begrüßen, wenn Sie es hinzufügen ... Lassen Sie es Ich weiß, wenn Sie weitere Informationen benötigen ....
Clare Macrae
Ich /sys/firmware/devicetree/base/haterhalte genau die gleichen Informationen, wenn ein Hut an das RPi angeschlossen ist. Welches wird empfohlen?
Testbenutzer
4

SteveRobillards ausgezeichneter Kommentar abzocken:

Verwenden Sie das I2C-EEPROM des HAT

Der Raspberry Pi Blog verweist auf die HAT-Spezifikation für GitHub, wo sowohl Dokumentation als auch Software-Tools ( eepromutils) zur Manipulation verfügbar sind.

README.md :

Das ID-EEPROM enthält Daten, die die Karte identifizieren, dem B + mitteilen, wie die GPIOs eingerichtet werden müssen und welche Hardware sich auf der Karte befindet. Auf diese Weise kann das Add-On-Board beim Booten automatisch von der Pi-Software identifiziert und eingerichtet werden, einschließlich des Ladens aller erforderlichen Treiber.

Informationen zum HAT spiegeln sich im Gerätebaum wider, der /proc/device-tree/hatauf eine der genannten Arten (Python, Sh, ...) aus dem Benutzerbereich gelesen werden kann.

Beachten Sie, dass es keine gestapelten HATs * gibt (laut Raspberry Pi Blog ):

Stapelbare HATs wurden in der Spezifikationsdiskussion vorgestellt - aber schließlich wurden sie aufgrund der stark zunehmenden Komplexität der Autokonfiguration und der Möglichkeit von Benutzerfehlern verworfen.

Es wird also zu jedem Zeitpunkt nur ein HAT verbunden, sein EEPROM wird ausgelesen und seine Informationen werden im Gerätebaum verfügbar gemacht.


* Es ist möglich, stapelbare Hüte herzustellen, wenn sie vom gleichen Typ sind und daher keine mehrfache und unterschiedliche Identifizierung erfordern, z. B. der Adafruit 16-Kanal-PWM / Servo-HAT für Raspberry Pi .

Ghanima
quelle
@ Steverobillard, sorry, konnte nicht widerstehen.
Ghanima
3
Kein Problem, solange der Benutzer eine Antwort erhält - das ist alles, was zählt.
Steve Robillard
Vielen Dank an @SteveRobillard und Ghanima - dies gab mir einige wirklich gute Hinweise.
Clare Macrae