Comment détecter quel type de carte HAT ou GPIO est branchée - le cas échéant?

8

Je mets en place des Raspberry Pis à utiliser dans des démos à des collègues, afin de montrer les capacités du Pi lui-même et de certaines des cartes d'extension disponibles.

J'aimerais vraiment pouvoir conserver un script cron-job / start-up pour toutes les démos possibles que je configure, et faire en sorte que ce script détecte quel HAT ou une carte GPIO plus ancienne est branchée, afin que je puisse déclencher un script / programme de démonstration approprié.

Par exemple,

  • Si un SenseHAT est attaché, démarrez automatiquement un labyrinthe de marbre Sense HAT
  • Si un HAT Display-O-Tron est connecté, exécutez automatiquement l' exemple de menu
  • Si un écran PiTFT est connecté, lancez automatiquement un diaporama photo

Existe-t-il un moyen d'exécuter Python, sh ou similaire, pour détecter laquelle de certaines cartes GPIO communes est connectée à un Pi?

Choses que j'ai considérées:

  • Utiliser les informations de Pinout.xyz pour détecter les broches utilisées, mais cela ressemble à beaucoup de travail.

Notez que mon intention est de détecter automatiquement la configuration, sans avoir besoin d'attacher un clavier, ssh in ou similaire - d'où le souhait d'une détection automatique, et pourquoi quelque chose comme la définition d'une variable d'environnement n'aiderait pas.

Clare Macrae
la source
1
Je pense que cela est possible avec les chapeaux, car ils contiennent une eprom utilisée pour la configuration. Vous pouvez probablement déterminer le reste avec des scripts shell et en regardant ce qui est rapporté par dmesg, lsusb etc. Vous pouvez également envisager de définir une variable d'environnement que vous modifiez lorsque vous échangez du matériel.
Steve Robillard
@SteveRobillard, tous les chapeaux sont-ils livrés avec une eprom? Ne sont-ils pas empilables? Si oui, comment les eprom multiples sont-ils traités séparément?
Ghanima
@SteveRobillard Merci pour la suggestion. J'ai clarifié ma question pour essayer de dire pourquoi la définition des variables d'environnement (et toute autre interaction avec le clavier) ne fonctionnera pas. Je n'avais pas entendu parler de dmesg et lsusb. Les rechercher sur Google m'a montré que vous connaissiez votre Raspberry Pi, qui a aussi l'air bien.
Clare Macrae
@Ghanima Je serais vraiment heureux de résoudre ce problème pour le cas d'une seule casquette et de ne pas m'inquiéter de les empiler!
Clare Macrae
Bonne lecture: github.com/raspberrypi/hats
Ghanima

Réponses:

5

Après avoir lu les commentaires et réponses précédents très utiles de Steve Robillard et Ghanima :

/ proc / arbre-appareil / chapeau / produit

S'il /proc/device-tree/hat/productexiste, vous avez un HAT attaché et chargé - et ce fichier contient le nom du HAT.

Voici quelques exemples de sorties:

Casquette Display-o-Tron

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

Noms et contenu de tous les fichiers /proc/device-tree/hat/de cet appareil:

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 pouces

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

Noms et contenu de tous les fichiers /proc/device-tree/hat/de cet appareil:

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

Mise à jour: 2018-05-17

Certains appareils sont commercialisés en tant que HAT mais n'ont pas d'EEPROM avec un blob de données valide, auquel cas, il n'y a aucun moyen de détecter le type "HAT", car il ne correspond pas à la spécification HAT.

Mise à jour: 2020-01-07

J'ai créé un dépôt github avec un script pour obtenir les données des HAT auxquels j'ai eu accès et pour enregistrer celles qui ne sont pas vraiment des HAT:

https://github.com/claremacrae/raspi_hat_data

Les demandes de tirage sont les bienvenues - il suffit d'exécuter le copy_hat_data.shscript dans ce dépôt.

Clare Macrae
la source
1
Heureux que cela fonctionne bien pour vous! Merci pour le contenu réel de l'arborescence des appareils. Cela aide certainement à mieux comprendre le problème.
Ghanima
Ça fonctionne encore! Le problème que vous avez lié sur github était simplement une erreur utilisateur.
Paul Slocum
Merci @PaulSlocum - J'ai mis à jour cela et rendu le repo plus évident .... Si vous l'essayez sur des chapeaux pour lesquels je n'avais pas de données, j'apprécierais vraiment que vous les ajoutiez ... je sais si vous avez besoin de plus d'informations ....
Clare Macrae
/sys/firmware/devicetree/base/hatJ'obtiens exactement les mêmes informations s'il y a un chapeau sur branché sur le RPi. Lequel est recommandé?
testuser le
4

Arrachant SteveRobillards excellent commentaire:

Utiliser l'EEPROM I2C du HAT

Le blog Raspberry Pi pointe pour la spécification HAT vers GitHub où la documentation et les outils logiciels ( eepromutils) pour la manipulation sont disponibles.

README.md :

L'ID EEPROM contient des données qui identifient la carte, indique au B + comment les GPIO doivent être configurés et quel matériel se trouve sur la carte. Cela permet à la carte d'extension d'être automatiquement identifiée et configurée par le logiciel Pi au démarrage, y compris le chargement de tous les pilotes nécessaires.

Les informations du HAT sont reflétées dans l'arborescence des périphériques /proc/device-tree/hatqui peuvent être lues à partir de l'espace utilisateur de l'une des manières mentionnées (python, sh, ...).

Notez qu'il n'y a pas de HAT empilés * (par Raspberry Pi Blog ):

Les HAT empilables figuraient dans la discussion sur les spécifications - mais ils ont finalement été rejetés en raison de la grande augmentation de la complexité de la configuration automatique et du potentiel d'erreur de l'utilisateur.

Ainsi, à tout moment, un seul HAT sera connecté, sa lecture EEPROM sera lue et ses informations seront disponibles dans l'arborescence des périphériques.


* Il est possible de fabriquer des chapeaux empilables s'ils sont du même type et ne nécessitent donc pas d'identification multiple et différente, par exemple le Adafruit 16 canaux PWM / Servo HAT pour Raspberry Pi .

Ghanima
la source
@steverobillard, désolé, n'a pas pu résister.
Ghanima
3
Pas de problème tant que l'utilisateur obtient une réponse - c'est tout ce qui compte.
Steve Robillard
Merci beaucoup @SteveRobillard et Ghanima - cela m'a donné de très bons conseils.
Clare Macrae