Conectamos la pantalla SPI LCD ILI9341 a la computadora de placa única Banana Pi BPI-M64 o cualquier otra en el sistema operativo Armbian

LCD SPI ILI9341 Banana Pi BPI-M64



La publicación contiene instrucciones sobre cómo conectar una pantalla TFT-LCD en el popular controlador ILI9341 a una computadora de placa única basada en el sistema operativo Armbian usando superposiciones de árbol de dispositivos sin bailar con una pandereta. Hay mucho material en Internet sobre cómo conectar varias pantallas LCD a la Raspberry Pi. Pero, ¿qué sucede si no tiene una Raspberry Pi y desea conectar una pantalla LCD económica a la interfaz SPI? Todo lo que necesita es una placa habilitada para Armbian. El catálogo de placas compatibles con Armbian OS incluye placas: Asus, Pine64, Hardkernel, Orange Pi, Banana Pi, etc. Por el momento, el catálogo contiene más de 114 modelos de placas, se anuncia soporte para varios equipos listos para usar. Disponible para conexión: módems 4G / LTE, USB Wi-Fi, USB Bluetooth, USB Ethernet, escáneres, sintonizadores DVB, etc. Todas estas placas se pueden conectar fácilmente a la pantalla LCD SPI ILI9341,Pregunto cómo implementar esto en cat.





Muchas computadoras de placa única tienen una salida HDMI, pero conectar una pantalla completa con una entrada HDMI es lo suficientemente costoso para un proyecto pequeño. En particular, si es necesario implementar la funcionalidad mínima de interacción con el usuario, un terminal para imprimir documentos, que muestra el estado actual de una aplicación en ejecución. Para tales tareas, puede usar pantallas de caracteres LCD HD44780 en la interfaz I2C, son bastante económicas y convenientes. Pero al mismo tiempo, tienen una funcionalidad muy limitada, es imposible mostrar la consola Linux y la UI nativa de la aplicación en estas pantallas, además, el área de la pantalla LCD no se puede utilizar como panel de entrada de información. Las pantallas LCD en la interfaz SPI son perfectas para resolver estos problemas; se puede comprar una pantalla de 3,5 pulgadas con una capa resistiva por $ 9,57 (incluido el envío).La pantalla LCD puede mostrar la consola Linux y el subsistema X11. Por lo tanto, el uso de SPI LCD es la mejor opción en términos de funcionalidad a costo.



Pantalla ILI9341 2.2 pulgadas 2.2 "SPI TFT



El controlador ILI9341 está diseñado para controlar el panel TFT. Para el controlador ILI9341, se suministran paneles con una diagonal de 2.2 a 3.2 pulgadas, una resolución de 240x320, se agrega una capa resistiva a algunos LCD.

Conectaremos un módulo SPI LCD ILI9341 de 2,4 pulgadas sin capa resistiva a una computadora de placa única Banana Pi BPI-M64.



Considere las características y el pinout del SPI LCD ILI9341 2.4 pulgadas



  • Pantalla a color de 2,4 pulgadas, compatible con 65.000 colores
  • Resolución 320X240
  • Interfaz de conexión SPI
  • Ranura para tarjeta SD disponible
  • fuente de alimentación del módulo 3.3V ~ 5V
  • Voltaje de control lógico 3.3V (TTL)


Pines de conexión de LCD

Número Etiqueta de pin Descripción
uno VCC Entrada de alimentación de 5 V / 3,3 V
2 GND Suelo
3 CS Señal de selección de chip LCD, habilitación de nivel bajo
cuatro REINICIAR Señal de reinicio de LCD, reinicio de nivel bajo
cinco DC / RS LCD register / data selection signal,high level: register, low level: data
6 SDI(MOSI) SPI bus write data signal
7 SCK SPI bus clock signal
8 LED Backlight control, high level lighting,if not controlled, connect 3.3V always bright
9 SDO(MISO) SPI bus read data signal, if you do not need to the read function, you can not connect it


Para controlar la retroiluminación, se utiliza el número de contacto 8 - LED . El voltaje máximo de 3.3V corresponde al brillo máximo del suministro total de VCC. Si es necesario configurar el brillo de la pantalla al 50%, entonces se debe aplicar el voltaje de 1.65V al LED. Para controlar mediante programación el brillo de la luz de fondo, el pin LED debe estar conectado a la salida analógica GPIO en la computadora de placa única. Si solo hay salidas digitales disponibles, solo estará disponible la opción de encender o apagar completamente la luz de fondo.



Según las características de la pantalla LCD, se imponen los siguientes requisitos en una computadora de placa única:



  • disponibilidad de la interfaz SPI
  • voltaje lógico en los pines 3.3V (la mayoría de las placas)
  • necesitará dos pines GPIO libres más (RESET, DC / RS)


¿Qué tipo de bestia armbiana eres y qué tipo de computadora de placa única necesitas?



La página armbian.com/download contiene una amplia variedad de computadoras de placa única. Desde el punto de vista de la facilidad de conexión, es mejor elegir una placa con un conector GPIO de 40 pines compatible con Raspberry Pi 3. Por ejemplo, si conecta el SPI LCD ILI9341 de 2,4 pulgadas a la placa Banana Pi BPI-M64 y Orange Pi PC, entonces los números de los pines GPIO conectados físicamente coincidirán (no debe confundirse con los nombres de los contactos del procesador, serán diferentes, más necesarios para la configuración). Si la computadora de placa única no está integrada en el procesador Allwinner, es posible que deba cambiar más parámetros en el archivo: sun50i-a64-spi-ili9341-led-always-on.dts (estará más adelante en el texto).



ArmbianoEs la distribución de Linux más popular para computadoras de placa única basada en el procesador ARM, la lista de placas compatibles es enorme: Orange Pi, Banana Pi, Odroid, Olimex, Cubieboard, Roseapple Pi, Pine64, NanoPi, etc. La distribución de Armbain se basa en Debian y Ubuntu.



Después de la aparición de la Raspberry Pi en el mundo, los fabricantes chinos decidieron unirse también al movimiento Open Hardware Source e hicieron muchas placas diferentes. Pero el soporte del software era extremadamente débil, el proyecto Armbian nació para resolver este problema. Por el momento, Armbian ya tiene 7 años, se admiten 114 modelos de placas, se ha anunciado soporte para varios equipos listos para usar. Disponible para conexión: módems 4G / LTE, USB Wi-Fi, USB Bluetooth, USB Ethernet, escáneres, sintonizadores DVB, etc.



Para ejecutar Armbian en una computadora de placa única, debe descargar una imagen del sitio y luego copiarla en una tarjeta microSD, desde la cual luego deberá iniciar. Si la placa tiene suficiente memoria eMMC, a través de la utilidad armbian-config, el sistema operativo se puede transferir fácilmente desde la tarjeta microSD a la memoria eMMC junto con el gestor de arranque.



La creación de un proyecto de IoT con Armbian, a diferencia de la Raspberry Pi, le permite elegir placas que difieren en rendimiento y un conjunto de periféricos. Por ejemplo, todas las versiones de Raspberry Pi solo tienen un puerto Ethernet. Pero si necesita hacer un enrutador con varios puertos Ethernet, de la lista de placas Armbian compatibles, los modelos son adecuados: Helios64, Espressobin, Bananapi R2, etc.



SoC compatible



  • Allwinner A10, A20, A31, H2 +, H3, H5, H6, A64
  • Amlogic S805 y S905 (placas Odroid), S802 / S812, S805, S905, S905X y S912 (horquilla de @ balbes150)
  • Actionsemi S500
  • Freescale / NXP iMx6
  • Marvell Armada A380
  • Rockchip RK3288 / RK3328 / RK3399
  • Samsung Exynos 5422


Diagrama de cableado SPI LCD ILI9341 2.4 pulgadas a Banana Pi BPI-M64 (puerto Raspberry Pi 3 GPIO)



La interfaz SPI de la pantalla LCD está conectada a SPI1 en el Banana Pi BPI-M64. Los contactos CS, RESET, DC / RS se pueden conectar a cualquier pin digital.



Tabla de pines de conexión:

Número de LCD Etiqueta LCD Número de pin en Banana Pi BPI-M64 (puerto GPIO de Raspberry Pi 3)
uno VCC 1 o 2 (si necesita el máximo brillo, póngase en contacto con el n. ° 2 a 5 V)
2 GND 39, o cualquier otro terreno
3 CS 24
cuatro REINICIAR Dieciocho
cinco DC / RS 22
6 SDI (MOSI) 19
7 SCK 23
8 LED 1 o cualquier GPIO gratuito a 3.3V
9 SDO (MISO) 21


Si el pin LED está conectado a la salida digital GPIO, entonces para encender manualmente la luz de fondo, necesitará proporcionar un "1" lógico - para encender o "0" - para apagar la pantalla.



Diagrama de conexión SPI LCD ILI9341:

LCD SPI ILI9341 Banana Pi BPI-M64



Computadora de placa única Banana Pi BPI-M64



Banana Pi BPI-M64 es una mini computadora de placa única de cuatro núcleos de 64 bits que se suministra como una solución de código abierto. El núcleo del sistema es un procesador Allwinner A64 con 4 núcleos Cortex-A53 con una frecuencia de 1,2 GHz. La placa alberga 2GB DDR3 SDRAM 733MHz RAM y 8GB eMMC.



Lo más importante para una conexión SPI LCD exitosa es saber el nombre de los contactos para la interfaz SPI, su número y nombre depende del modelo del procesador. Se requiere la hoja de datos de Allwinner A64 para esta tarea. La página Wiki de Banana Pi BPI-M64 muestra el pinout del conector GPIO de 40 pines, del cual aprendemos el nombre de los pines: PD2, PD3, etc.

40 PIN GPIO de Banana pi BPI-M64
Nombre de pin GPIO Función predeterminada Función2: GPIO Función3
CON2-P18 PD4 PD4
CON2-P19 SPI1-MOSI PD2 UART4-TX
CON2-P21 SPI1-MISO PD3 UART4-RX
CON2-P22 PC0 PC0
CON2-P23 SPI1-CLK PD1 UART3-RX
CON2-P24 SPI1-CS PD0 UART3-TX


Además del nombre del contacto, es necesario averiguar el número de serie de este contacto en la pata del procesador, se calcula fácilmente mediante la fórmula: (posición de la letra en el alfabeto - 1) * 32 + posición de salida . Calculemos el número de pata del pin PD2. La primera letra no se cuenta porque P - PUERTO, la posición de la letra D en el alfabeto = 4, obtenemos (4-1) * 32 + 2 = 98. El  contacto con la etiqueta PD2 corresponde al pie 98 en el procesador, entonces será requerido para configurar el árbol de dispositivos.



Árbol de dispositivos (DT) en Linux



Un árbol de dispositivos (DT) es una estructura de datos de Linux que consta de nodos con nombre y propiedades que describen el hardware que no se puede descubrir al sondear el hardware. El árbol debe incluir el nombre del procesador central, su configuración de memoria y cualquier periférico (interno y externo). DT no se utiliza para describir el software, aunque la lista de módulos de hardware hace que se carguen los módulos de controlador.



El corazón de cualquier placa de desarrollo o computadora de placa única es el SoC. El SoC tiene muchos pines (patas) para conectar líneas eléctricas y varios dispositivos.



Allwinner V3s



Los pines se pueden unir para formar una interfaz como MIPI DSI (Interfaz serie de pantalla MIPI). La interfaz MIPI DSI está diseñada para conectar paneles LCD, se usa activamente en teléfonos inteligentes y tabletas. Pero si no planea conectar una pantalla al dispositivo a través de MIPI DSI, estas líneas se pueden usar para otros fines cambiando el DT. A diferencia de la arquitectura x86, los sistemas basados ​​en SoC no tienen la capacidad de identificar completamente todos los dispositivos en el modo Plug and Play. Por lo tanto, es necesario declarar explícitamente qué pines se utilizan para las interfaces y qué dispositivos están conectados a estas interfaces.



Antes de la llegada de DT, la información del dispositivo en Linux era una parte integral del kernel y, en el caso de un cambio en la composición de los dispositivos periféricos, era necesario reconstruir la imagen del sistema. Esto fue extremadamente inconveniente y, por lo tanto, la descripción de los dispositivos periféricos se trasladó a los archivos de configuración que se recopilan en el nivel lógico en un árbol. Donde rama es un dispositivo con una indicación del controlador necesario para el funcionamiento de este dispositivo.



Después de usar DT, no fue necesario crear una imagen individual para cada conjunto de dispositivos periféricos. Ahora basta con crear una imagen, incluir un conjunto de controladores para varios dispositivos y crear su propio DT para cada dispositivo.



Superposiciones de árbol de dispositivos



Superposiciones de árbol de dispositivos : agregue el principio de superposición de capas de dispositivos al DT. Si la configuración describe la interfaz UART a la que se conectó Bluetooth y necesita reemplazar Bluetooth con un módulo GPS, entonces no puede eliminar la configuración de Bluetooth existente, sino agregar una capa adicional para el módulo GPS que anulará la configuración anterior.



Los siguientes términos se utilizan para trabajar con DT:

DT Árbol de dispositivos
DTB (* .dtb) Archivo binario del árbol de dispositivos
DTBO (* .dtbo) Binario del árbol de dispositivos para superposición
DTC Compilador de árbol de dispositivos
DTO Superposiciones de árbol de dispositivos
DTS (* .dts) Archivo de origen para el árbol de dispositivos
FDT Árbol de dispositivos plano , formato binario contenido en un archivo .dtb


La configuración del hardware se describe en los archivos fuente de DT (.dts) y luego se compilan en archivos binarios de DT (.dtb) para su uso final en el sistema. También puede realizar el procedimiento inverso para descompilar *. dtb a *. dts, hay un compilador / descompilador presente en el sistema. La implementación de DTO incluye la división, construcción, partición y ejecución del árbol de dispositivos.



Cargador de arranque del árbol de dispositivos de Linux







Compartir DT



DT se divide en dos partes:



  • DT principal (árbol principal del dispositivo) . Proporcionado por el desarrollador de SoC y es la configuración predeterminada. En este caso, Allwinner es proporcionado por el desarrollador del procesador Allwinner A64.
  • Overlay DT (árbol de dispositivos de superposición) . La configuración específica del fabricante de la placa incluye los periféricos que se encuentran en la placa. La placa Banana Pi BPI-M64 es proporcionada por SinoVoip Co.,


El tema de las superposiciones del árbol de dispositivos en Linux es lo suficientemente grande como para no convertir la publicación en una obra de varios volúmenes de Lenin; puede leer con más detalle en la publicación Trabajando con GPIO usando el ejemplo de Banana Pi BPI-M64. Parte 2. Superposiciones del árbol de dispositivos.



Conformación DTS para SPI LCD ILI9341 de 2,4 pulgadas



Las pruebas se realizaron en la imagen Armbian_20.08.2_Bananapim64_bionic_current_5.8.6_minimal.img.xz , basada en Ubuntu 18.04.5 LTS (Bionic Beaver), kernel de Linux 5.8.6. uname: Linux bananapim64 5.8.6-sunxi64 # 20.08.2 SMP Vie 4 de septiembre 08:52:31 CEST 2020 aarch64 aarch64 aarch64 GNU / Linux.



Armbian ya tiene un controlador para ILI9341, por lo que todo lo que se requiere es crear un archivo de descripción de dispositivo DTS, compilarlo en formato DTBO y reiniciar el SBC. Como dice el refrán ¡Fácil!



Para generar un archivo DTS, necesita encontrar el enlace al gpiochip en el que se encuentra la interfaz SPI, para hacer esto, abra la terminal Armbian y ejecute el comando cat / sys / kernel / debug / gpio:



root@bananapim64:~# cat /sys/kernel/debug/gpio
gpiochip1: GPIOs 0-255, parent: platform/1c20800.pinctrl, 1c20800.pinctrl:
 gpio-120 (                    |bananapi-m64:red:pwr) out hi
 gpio-142 (                    |bananapi-m64:green:u) out lo
 gpio-143 (                    |bananapi-m64:blue:us) out lo
 gpio-166 (                    |cd                  ) in  lo ACTIVE LOW
 gpio-233 (                    |usb0_id_det         ) in  hi IRQ

gpiochip0: GPIOs 352-383, parent: platform/1f02c00.pinctrl, 1f02c00.pinctrl:
 gpio-354 (                    |reset               ) out hi ACTIVE LOW
 gpio-356 (                    |shutdown            ) out hi
 gpio-357 (                    |host-wakeup         ) in  lo
 gpio-358 (                    |device-wakeup       ) out hi

gpiochip2: GPIOs 510-511, parent: platform/axp20x-gpio, axp20x-gpio, can sleep:

      
      





Este comando enumerará todos los dispositivos gpiochip disponibles y los números de pin afectados en el sistema operativo. En la sección anterior, para el pin SPI1-MOSI , se determinó el nombre del pin PD2, el número de pata del procesador - 98. Con base en el resultado obtenido, el número 98 cae en el rango de GPIOs 0-255, que corresponde al Chip gpiochip1: GPIOs 0-255, padre: plataforma / 1c20800. pinctrl, 1c20800.pinctrl . Además, para generar un archivo DTS, deberá encontrar el enlace a 1c20800.pinctrl . Creemos



un archivo DTS con el nombre: sun50i-a64-spi-ili9341-led-always-on.dts (basado en el archivo dts para la placa de PC Orange Pi):



/dts-v1/;
/plugin/;

/ {
	compatible = "allwinner,sun8i-h3";	

  fragment@0 {
    target = <&pio>;
    __overlay__ {
      ili9341_pins: ili9341_pins {
        pins = "PD4", "PC0"; /*RESET, DC_RS*/
        function = "gpio_out", "gpio_out" ;
      };
    };
  };
  
  fragment@1 {
    target = <&spi1>;
    __overlay__ {
      status = "okay";      
      cs-gpios = <&pio 3 0 0>; /* PD0 */

      ili9341: ili9341@0 {
        compatible = "ilitek,ili9341";
        reg = <0>;
        pinctrl-names = "default";
        pinctrl-0 = <&ili9341_pins>;
        spi-max-frequency = <16000000>;
        rotate = <90>;
        bgr;
        fps = <25>;
        buswidth = <8>;
        reset-gpios = <&pio 3 4 1>; /*RESET=PD4*/
        dc-gpios = <&pio 2 0 0>; /*DC_RS=PC0*/
        /*led-gpios = <&pio 2 4 0>; LED=PC4*/
        debug = <0>;
      };
    };
  };
};

      
      





Considere el contenido:



  • fragment@0/soc/pinctrl@1c20800, &pio. GPIO PD4", «PC0 gpio_out .
  • &pio — GPIO /soc/pinctrl@1c20800, . Armbian : /boot/dtb-5.8.6-sunxi64/allwinner/sun50i-a64-bananapi-m64.dtb.  DTS, : $ dtc -I dtb -O dts sun50i-a64-bananapi-m64.dtb -o sun50i-a64-bananapi-m64.dts
  • fragment@1 — /soc/spi@1c69000, &spi1.
  • status = „okay“ —   SPI1
  • cs-gpios = <&pio 3 0 0>; /* PD0 */ — CS SPI1.
  • <&pio 3 0 0>  — , &pio gpioiochip1 , P , PORT, D — 3 (: — 1), 0 3 , 0 PD0, 0 — , 0 (  0 — , 0; 1 — , 1).
  • compatible = „ilitek,ili9341“
  • pinctrl-0 = <&ili9341_pins>fragment@0
  • spi-max-frequency = <16000000> - Frecuencia de interfaz SPI
  • rotate = <90> - orientación de la imagen, rotación de 90 grados, dependiendo de cómo desee colocar la pantalla.
  • fps = <25> - fotogramas por segundo
  • reset-gpios = <& pio 3 4 1> - RESET pin = PD4
  • dc-gpios = <& pio 2 0 0> - Pin DC_RS = PC0


Coloquemos el archivo en la ruta / boot / dtb / allwinner / overlay. Luego compila el archivo .dts en .dtbo:



$ dtc -O dtb -o sun50i-a64-spi-ili9341-led-always-on.dtbo sun50i-a64-spi-ili9341-led-always-on.dts

      
      





Iniciemos la utilidad de configuración de la placa: $ armbian-config. Vaya al menú: Sistema> Hardware y active la capa (superposición): spi-ili9341-led-always-on . Después de reiniciar la placa, la consola de Linux estará en la pantalla LCD de SPI:



LCD SPI ILI9341 Banana Pi BPI-M64





Midnight Commander y Htop en SPI LCD
Midnight Commander

LCD SPI ILI9341 Banana Pi BPI-M64



Htop

LCD SPI ILI9341 Banana Pi BPI-M64





Nombre de contacto

Para todos los procesadores Allwinner, el formato de grabación de contactos corresponde al formulario cs-gpios = <& pio 3 0 0> , para otros procesadores el formato de grabación de contactos será diferente.



Solución de problemas



Si la imagen no aparece en la pantalla LCD, ejecute el comando para verificar: $ dmesg | grep -E 'ili9341'.



La consola debe contener la siguiente información:



root@bananapim64:/boot/dtb-5.8.6-sunxi64/allwinner# dmesg | grep -E 'ili9341'
[    5.733989] fb_ili9341: module is from the staging directory, the quality is unknown, you have been warned.
[    5.734718] fb_ili9341 spi0.0: fbtft_property_value: buswidth = 8
[    5.734731] fb_ili9341 spi0.0: fbtft_property_value: debug = 0
[    5.734737] fb_ili9341 spi0.0: fbtft_property_value: rotate = 90
[    5.734744] fb_ili9341 spi0.0: fbtft_property_value: fps = 25
[    6.119287] graphics fb0: fb_ili9341 frame buffer, 320x240, 150 KiB video memory, 16 KiB buffer memory, fps=25, spi0.0 at 16 MHz

      
      







Configuración de SPI LCD para Xfce GUI y subsistema X11



Para la salida de la consola de Linux es suficiente agregar un archivo DTS y eso es todo, pero para la salida de gráficos no es suficiente.



1) Instale XORG y XFCE:



$ sudo apt-get update
$ sudo apt-get install xorg
$ sudo apt-get install xfce4

      
      





2) Para el procesador Allwinner, debe instalar adicionalmente el controlador de GPU - fbdev:



$ sudo apt-get install xserver-xorg-video-fbdev

      
      





3) Elimine todos los archivos de configuración a lo largo de la ruta /etc/X11/xorg.conf.d (si no hay archivos, entonces genial)



4) Cree un archivo de configuración a lo largo de la ruta /usr/share/X11/xorg.conf.d / 99-fbdev. Conf y coloque el siguiente fragmento en él:



Section "Device"  
  Identifier "myfb"
  Driver "fbdev"
  Option "fbdev" "/dev/fb0"
EndSection

      
      





Donde / dev / fb0 es el dispositivo LCD SPI. Si un panel HDMI está conectado a la placa, entonces puede haber dos dispositivos / dev / fb0 y / dev / fb1.



Iniciamos la interfaz gráfica con el comando: startx o startxfe4:



LCD SPI ILI9341 Banana Pi BPI-M64





Si necesita ir directamente a la interfaz gráfica, debe instalar adicionalmente los paquetes:



$ sudo apt-get remove tasksel
$ sudo apt-get remove xubuntu-desktop

      
      





Para devolver el inicio solo de la consola, el inicio automático de display-manager.service debe estar deshabilitado



$ sudo systemctl disable display-manager.service

      
      





Solución de problemas



Si la interfaz gráfica no se inicia, entonces para resolver los problemas, debe mirar el registro de eventos de X11 usando el comando:



$ cat /var/log/Xorg.0.log

      
      





Salir



La instalación y configuración de SPI LCD no requiere ninguna compilación de módulos desde la fuente, lo que simplifica enormemente la instalación. Lo principal es exponer cuidadosamente los contactos y todo funcionará de inmediato. Los objetivos establecidos se han logrado con éxito.



Mapa vial



  1. Conexión de una pantalla más grande de 3,5 '' en el controlador ILI9488.
  2. Configuración de la interfaz táctil para Xfe.
  3. Visualización de una sola aplicación gráfica en SPI LCD utilizando el subsistema X11 del contenedor Docker (solución para terminales públicos, quioscos, terminales POS).


El archivo sun50i-a64-spi-ili9341- led-always-on.dts y otros archivos de superposición de madera están disponibles en el catálogo GitHub Banana-Pi-BPI-M64 / dt-superposiciones /



All Articles