¿Cómo detectar qué tipo de placa HAT o GPIO está conectada, si la hay?

8

Estoy configurando algo de Raspberry Pis para usarlo en demostraciones a colegas, para mostrar las capacidades del Pi en sí y de algunas de las placas adicionales que están disponibles.

Realmente me gustaría poder mantener una secuencia de comandos cron-job / start-up para todas las demostraciones posibles que estoy configurando, y hacer que esa secuencia de comandos detecte qué placa HIO o GPIO anterior está conectada, para que pueda activar un guión / programa de demostración apropiado.

Por ejemplo,

  • Si se adjunta un SenseHAT, inicie automáticamente un laberinto de mármol Sense HAT
  • Si se adjunta un HAT Display-O-Tron, ejecute automáticamente el ejemplo de menú
  • Si se adjunta una pantalla PiTFT, inicie automáticamente una presentación de diapositivas de fotos

¿Hay alguna forma de ejecutar Python, sh o similar, para detectar cuál de algunas placas GPIO comunes está conectada a una Pi?

Cosas que consideré:

  • Usar información de Pinout.xyz para detectar los pines en uso, pero eso parece mucho trabajo.

Tenga en cuenta que mi intención es detectar automáticamente la configuración, sin necesidad de conectar un teclado, ssh in o similar, de ahí el deseo de detección automática y por qué algo como establecer una variable de entorno no ayudaría.

Clara Macrae
fuente
1
Creo que esto es posible con sombreros, ya que contienen un eprom utilizado para la configuración. Probablemente pueda determinar el resto con algunas secuencias de comandos de shell y ver lo que informa dmesg, lsusb, etc. También puede considerar establecer una variable de entorno que cambie cuando intercambie hardware.
Steve Robillard
@SteveRobillard, ¿todos los sombreros vienen con un eprom? ¿No son apilables? Si es así, ¿cómo se tratan por separado los eprom múltiples?
Ghanima
@SteveRobillard Gracias por la sugerencia. He aclarado mi pregunta para tratar de decir por qué no funciona la configuración de variables de entorno (y cualquier otra interacción con el teclado). No había oído hablar de dmesg y lsusb. Buscarlos en Google me indicó que conociera su Raspberry Pi, que también se ve bien.
Clare Macrae
@Ghanima Me encantaría resolver esto para el caso de One-HAT, ¡y no preocuparme por apilarlos!
Clare Macrae
Buena lectura: github.com/raspberrypi/hats
Ghanima

Respuestas:

5

Después de leer los útiles comentarios y respuestas anteriores de Steve Robillard y Ghanima :

/ proc / device-tree / hat / product

Si /proc/device-tree/hat/productexiste, tiene un HAT conectado y cargado, y ese archivo contiene el nombre de HAT.

Aquí hay algunos resultados de muestra:

Display-o-Tron HAT

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

Nombres y contenido de todos los archivos /proc/device-tree/hat/para este 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 pulgadas

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

Nombres y contenido de todos los archivos /proc/device-tree/hat/para este 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

Actualizar: 2018-05-17

Algunos dispositivos se comercializan como HAT pero no tienen una EEPROM con un blob de datos válido, en cuyo caso, no hay forma de detectar el tipo "HAT", ya que no coincide con la especificación HAT.

Actualización: 2020-01-07

Creé un repositorio de github con un script para obtener los datos de los HAT a los que tenía acceso y para registrar aquellos que no son realmente HAT:

https://github.com/claremacrae/raspi_hat_data

Las solicitudes de extracción son bienvenidas, solo ejecute el copy_hat_data.shscript en ese repositorio.

Clara Macrae
fuente
1
¡Me alegro de que esto funcione bien para ti! Gracias por el contenido de la vida real del árbol de dispositivos. Ciertamente ayuda a comprender mejor el problema.
Ghanima
¡Aún funciona! El problema que vinculó en github fue solo un error del usuario.
Paul Slocum
Gracias @PaulSlocum: he actualizado esto y he hecho que el repositorio sobre esto sea más obvio ... Si lo prueba en cualquier HAT para el que no tenía datos, le agradecería que lo agregue ... sé si necesitas más información ...
Clare Macrae
Estoy obteniendo exactamente la misma información de /sys/firmware/devicetree/base/hatsi hay un sombrero conectado al RPi. ¿Cuál es el recomendado?
Testuser
4

Estafando a SteveRobillards excelente comentario:

Utilice la EEPROM I2C de HAT

El blog Raspberry Pi señala la especificación HAT a GitHub, donde eepromutilsestán disponibles tanto la documentación como las herramientas de software ( ) para la manipulación.

README.md :

La ID EEPROM contiene datos que identifican la placa, le dice a B + cómo deben configurarse los GPIO y qué hardware hay en la placa. Esto permite que el software Pi identifique y configure automáticamente la placa adicional en el momento del arranque, incluida la carga de todos los controladores necesarios.

La información del HAT se refleja en el árbol de dispositivos /proc/device-tree/hatque podría leerse desde el espacio del usuario en cualquiera de las formas mencionadas (python, sh, ...).

Tenga en cuenta que no hay HAT apilados * (según el blog de Raspberry Pi ):

Los HAT apilables aparecieron en la discusión de la especificación, pero finalmente se descartó debido al gran aumento en la complejidad de la configuración automática y el potencial de error del usuario.

Entonces, en un momento dado, solo se conectará un HAT, se leerá su EEPROM y se pondrá a disposición su información en el árbol de dispositivos.


* Es posible hacer sombreros apilables si son del mismo tipo y, por lo tanto, no requieren identificación múltiple y diferente, por ejemplo, el Adafruit 16-Channel PWM / Servo HAT para Raspberry Pi .

Ghanima
fuente
@steverobillard, lo siento, no pude resistirme.
Ghanima
3
No hay problema siempre que el usuario obtenga una respuesta, eso es todo lo que importa.
Steve Robillard
Muchas gracias a @SteveRobillard y Ghanima, esto me dio algunos consejos muy buenos.
Clare Macrae