🛠 Configuración de E/S GPIO e IIO en BPI-5202 Loongson
Objectifs
Este tutorial tiene como objetivo dominar la interfaz de periféricos externos a través del puerto GPIO de 20 pines y el subsistema IIO (Industrial I/O) en la BPI-5202. A diferencia de las placas de desarrollo de consumo, esta tarjeta industrial utiliza una arquitectura LoongArch con características específicas de bus interno para módulos de extensión (DI, DO, AI, AO). El objetivo es leer un estado lógico (botón) y controlar una salida (LED) o leer datos analógicos si se conecta un módulo AI, utilizando herramientas estándar de Linux adaptadas para Loongnix o KylinOS.
Matériel nécessaire
- Tarjeta BPI-5202 con fuente de alimentación DC 24V estable.
- Sistema operativo instalado (Loongnix o KylinOS V10 recomendado para controladores GPIO nativos).
- Módulo de extensión GPIO compatible (DI/DO o AI/AO) conectado al bus interno.
- Un botón pulsador, un LED con resistencia (330Ω) y cables de conexión (paso de 2,54 mm).
- Un multímetro para la verificación de voltajes.
- Cable serie RS232 aislado para acceso a consola.
Étapes
El puerto de 20 pines expone las líneas del controlador GPIO interno. En Linux, estas líneas se asignan dinámicamente. Abra una terminal e identifique los controladores GPIO disponibles: ``bash ls /sys/class/gpio/ `` Anote el número del controlador principal (ej: gpiochip0). Para conocer los pines físicos expuestos en el conector de 20 pines, consulte la documentación técnica específica del módulo de extensión utilizado, ya que el mapeo depende del bus interno (I2C/SPI/GPIO nativo).
- Identificación de pines GPIO:
Para controlar un LED conectado a un pin de salida (supongamos GPIO 10 para el ejemplo), expórtelo al espacio de usuario: ``bash echo 10 > /sys/class/gpio/export ` Defina la dirección como salida: `bash echo out > /sys/class/gpio/gpio10/direction ``
- Exportar un pin GPIO:
Encienda el LED escribiendo 1 en el valor: ``bash echo 1 > /sys/class/gpio/gpio10/value ` Apáguelo con 0: `bash echo 0 > /sys/class/gpio/gpio10/value ``
- Controlar la salida (LED):
Para un botón conectado a un pin de entrada (supongamos GPIO 11), expórtelo y configure la dirección como entrada: ``bash echo 11 > /sys/class/gpio/export echo in > /sys/class/gpio/gpio11/direction ` Lea el estado lógico (0 o 1): `bash cat /sys/class/gpio/gpio11/value ``
- Leer una entrada (Botón):
Si se conecta un módulo de extensión analógico, el GPIO nativo no es suficiente. Use herramientas IIO. Instale libiio-tools si es necesario. Liste los canales disponibles: ``bash iio_info ` Lea un valor bruto de un canal analógico (ej: in_voltage0_raw): `bash cat /sys/bus/iio/devices/iio\:device0/in_voltage0_raw ``
- Usar el subsistema IIO (para módulos AI/AO):
Vérification
- GPIO: Observe físicamente que el LED se enciende/apaga según el comando
echo. Use un multímetro para confirmar 3.3V o 5V (según el voltaje lógico del módulo) en el pin de salida. - Entrada: Presione el botón y verifique que el comando
catdevuelva1(o0según el cableado pull-up/pull-down). - IIO: Los valores brutos deben variar de manera coherente si modifica el voltaje de entrada del módulo AI (ej: potenciómetro).
Pour aller plus loin
Explore el uso de libgpiod para una gestión más robusta de GPIO, evitando problemas de concurrencia de archivos sysfs. Para aplicaciones críticas en tiempo real, considere usar la API IIO en C a través de libiio para una latencia reducida. Recuerde asegurar el acceso GPIO si su aplicación se ejecuta en un entorno multiusuario.