Come rilevare quale tipo di scheda HAT o GPIO è collegata, se presente?


8

Sto installando alcuni Raspberry Pis da utilizzare nelle demo per i colleghi, al fine di mostrare le capacità del Pi stesso e di alcune delle schede aggiuntive disponibili.

Mi piacerebbe davvero poter mantenere uno script cron-job / start-up per tutte le possibili demo che sto configurando e fare in modo che lo script rilevi quale HAT o scheda GPIO precedente è collegata, in modo da poter attivare un script / programma demo appropriato.

Per esempio,

  • Se è collegato un SenseHAT, avviare automaticamente un labirinto in marmo Sense HAT
  • Se è collegato un HAT Display-O-Tron, eseguire automaticamente l' esempio di menu
  • Se è collegata una schermata PiTFT, avvia automaticamente una presentazione di foto

Esiste un modo per eseguire Python, sh o simili, per rilevare quale di alcune comuni schede GPIO è collegata a un Pi?

Cose che ho considerato:

  • Utilizzare le informazioni di Pinout.xyz per rilevare i pin in uso, ma sembra un sacco di lavoro.

Nota che la mia intenzione è di rilevare automaticamente la configurazione, senza bisogno di collegare una tastiera, ssh in o simili - da qui il desiderio di un rilevamento automatico e perché qualcosa come l'impostazione di una variabile d'ambiente non sarebbe d'aiuto.


1
Penso che questo sia possibile con i cappelli, dal momento che contengono una eprom utilizzata per l'installazione. Probabilmente puoi determinare il resto con alcuni script di shell e guardare cosa viene segnalato da dmesg, lsusb ecc. Puoi anche considerare di impostare una variabile di ambiente che cambi quando cambi hardware.
Steve Robillard,

@SteveRobillard, tutti i cappelli arrivano con una eprom? Non sono impilabili? In tal caso, come vengono indirizzate separatamente le eprom multiple?
Ghanima

@SteveRobillard Grazie per il suggerimento. Ho chiarito la mia domanda per cercare di dire perché l'impostazione delle variabili di ambiente (e qualsiasi altra interazione con la tastiera) non funzionerà. Non avevo sentito parlare di dmesg e lsusb. Cercandoli su Google mi ha indicato di conoscere il tuo Raspberry Pi che sembra buono.
Clare Macrae,

@Ghanima Sarei davvero felice di risolverlo per il caso one-HAT e non preoccuparmi di impilarli!
Clare Macrae,

Risposte:


5

Dopo aver letto i commenti e le risposte molto utili di Steve Robillard e Ghanima :

/ Proc / device-tree / cappello / prodotto

Se /proc/device-tree/hat/productesiste, hai un HAT allegato e caricato - e quel file contiene il nome di HAT.

Ecco alcuni esempi di output:

Display-o-Tron HAT

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

Nomi e contenuti di tutti i file /proc/device-tree/hat/per questo dispositivo:

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 pollici

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

Nomi e contenuti di tutti i file /proc/device-tree/hat/per questo dispositivo:

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

Aggiornamento: 2018-05-17

Alcuni dispositivi sono commercializzati come HAT ma non hanno una EEPROM con un BLOB di dati valido, nel qual caso non è possibile rilevare il tipo "HAT", poiché non corrisponde alla specifica HAT.

Aggiornamento: 2020-01-07

Ho creato un repository github con uno script per ottenere i dati per gli HAT a cui avevo accesso e per registrare quelli che non sono realmente HAT:

https://github.com/claremacrae/raspi_hat_data

Le richieste pull sono benvenute: basta eseguire lo copy_hat_data.shscript in quel repository.


1
Sono contento che questo funzioni bene per te! Grazie per i contenuti della vita reale dell'albero dei dispositivi. Certamente aiuta a capire meglio il problema.
Ghanima

Funziona ancora! Il problema che hai collegato su github era solo un errore dell'utente.
Paul Slocum,

Grazie @PaulSlocum - L'ho aggiornato e reso più ovvio il repository su questo .... Se lo provi su qualsiasi HAT per cui non ho dati, apprezzerei molto che tu l'abbia aggiunto ... Let so se hai bisogno di maggiori informazioni ....
Clare Macrae,

Ricevo esattamente le stesse informazioni /sys/firmware/devicetree/base/hatse c'è un cappello inserito nel RPi. Quale è raccomandato?
testuser

4

Strappando il commento eccellente di SteveRobillards:

Utilizzare la EEPROM I2C dell'HAT

Il blog di Raspberry Pi indica le specifiche HAT per GitHub, dove eepromutilssono disponibili sia la documentazione che gli strumenti software ( ) per la manipolazione.

README.md :

L'EEPROM ID contiene dati che identificano la scheda, indica a B + come devono essere impostati i GPIO e quale hardware è sulla scheda. Ciò consente di identificare e configurare automaticamente la scheda aggiuntiva dal software Pi al momento dell'avvio, incluso il caricamento di tutti i driver necessari.

Le informazioni dell'HAT si riflettono nell'albero del dispositivo /proc/device-tree/hatche può essere letto dallo spazio utente in uno dei modi menzionati (python, sh, ...).

Nota che non ci sono HAT in pila * (per Raspberry Pi Blog ):

HAT impilabili presenti nella discussione sulle specifiche, ma alla fine sono stati eliminati a causa del grande aumento della complessità della configurazione automatica e del potenziale errore dell'utente.

Quindi, in qualsiasi momento, solo un HAT sarà collegato, leggerà la sua EEPROM e renderà le sue informazioni disponibili nella struttura dei dispositivi.


* È possibile realizzare cappelli impilabili se sono dello stesso tipo e quindi non richiedono un'identificazione multipla e diversa, ad esempio l' Adafruit PWM / Servo HAT a 16 canali per Raspberry Pi .


@steverobillard, scusa, non ho potuto resistere.
Ghanima

3
Nessun problema se l'utente riceve una risposta, questo è tutto ciò che conta.
Steve Robillard,

Grazie mille sia a @SteveRobillard che a Ghanima - questo mi ha dato degli ottimi suggerimenti.
Clare Macrae,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.