Inicio Noticias Pi IoT en C usando controladores de Linux: el controlador SPI

Pi IoT en C usando controladores de Linux: el controlador SPI

Página 1 de 3

SPI es una forma muy popular de conectar dispositivos a la Raspberry Pi y la buena noticia es que los controladores de Linux lo admiten bien una vez que sepa cómo hacerlo.

Este contenido proviene de mi libro recién publicado:

Raspberry Pi IoT en C usando controladores de Linux

Por Harry Fairhead

Compra en Amazon.

Contenido

Elegir una Pi para IoT

C y código de Visual Studio

Driver: un primer programa

El controlador de fuente GPIO
Extracto: controlador de fuente GPIO

GPIO usando el control de E / S

Eventos GPIO

El árbol de dispositivos
Extracto: DHT22

Un poco de electrónica

Modulación de ancho de pulso
Extracto: el controlador PWM

Dispositivos SPI
Extracto: El controlador SPI *** ¡¡¡NUEVO !!!

Conceptos básicos de I2C

El controlador de Linux I2C

Avanzado I2C Avanzado

Controlador de sensor: Linux IIO y Hwmon

Bus de 1 cable

Vaya más lejos con los conductores

Apéndice I.

En el capítulo pero no en el libro:

Dispositivos SPI Conceptos básicos del bus SPI Pi Interfaces SPI Protocolo SPI

Controlador SPI

Antes de poder utilizar el bus SPI es necesario cargar su controlador. Puede hacer esto agregando:

dtparam = spi = encendido

en el archivo /boot/config.txt. Esto carga un controlador para SPI0 usando dos líneas de selección de chip. Para saber cómo activar otros canales SPI, consulte a continuación. Para el resto de esta sección usaremos SPI0.

Alternativamente, puede activar el controlador dinámicamente:

ARCHIVO * doCommand (char * cmd) {ARCHIVO * fp = popen (cmd, “r”); if (fp == NULL) {printf (“No se pudo ejecutar el comando% s n r”, cmd); salida (1); } devuelve fp; } void checkSPI0 () {ARCHIVO * fd = doCommand (“sudo dtparam -l”); salida de caracteres[1024]; int txt encontrado = 0; indicador de carácter[] = “spi = encendido”; comando char[] = “sudo dtparam spi = on”; while (fgets (salida, tamaño de (salida), fd)! = NULL) {printf (“% s n r”, salida); fflush (salida estándar); if (strstr (salida, bandera)! = NULL) {txfound = 1; }} if (txfound == 0) {fd = doCommand (comando); dormir (2); } pclose (fd); }

Funciona usando primero el comando dtparam -l para listar las superposiciones cargadas. Si la superposición de spi ya está cargada, no se hace nada. Si no es así, ejecute el comando:

dtparam spi = encendido

SPIDev

La interfaz para el controlador SPI generalmente se llama SPIdev y hay un archivo de encabezado spidev.h que proporciona todas las definiciones necesarias para usarlo. Al cargar el controlador SPI para instalar el canal SPI, se crea un número de dispositivo de carácter en / dev en la forma general spidevn.m donde n es el número de canal y m es la línea de selección de chip utilizada para controlar el dispositivo.

Por ejemplo, el controlador SPI básico usa el canal 0, es decir, SPI0 con dos líneas de selección de chip, por lo que encontrará spidev0.0 y spidev0.1 controlando el dispositivo SPI conectado a SPI0 en la selección de chip 0 y 1 respectivamente. Por defecto, spidev0. 0 usa el pin 26 GPIO8 y spidev0.1 usa el pin 28 GPIO7 para la selección del chip.

Para trabajar con un dispositivo SPI, simplemente use ioctl para enviar solicitudes al archivo relevante. Si desea saber más sobre ioctl, consulte el Capítulo 4.

Hay una serie de mensajes de configuración:

SPI_IOC_WR_MODE
establece el modo SPI_IOC_WR_LSB_FIRST
establecer LSB primero o último SPI_IOC_WR_BITS_PER_WORD
establece el número de bits por palabra SPI_IOC_WR_MAX_SPEED_HZ
configurar el reloj SPI si es posible

Nota: SPI_IOC_WR_LSB_FIRST no es compatible con Pi OS.

También hay solicitudes con WR reemplazado por RD que leen, en lugar de escribir, la configuración.

Marc Gomez
Vine a por tabaco y ya me quedé aquí. Cuando no estoy en el sótano de Tecnopasion suelo pasear por las calles de Barcelona.
RELATED ARTICLES

Dejar respuesta

Please enter your comment!
Please enter your name here