Le message contient des instructions sur la façon de connecter un écran TFT-LCD du célèbre contrôleur ILI9341 à un ordinateur monocarte basé sur Armbian OS en utilisant une arborescence de périphériques sans danser avec un tambourin. Il y a beaucoup de matériel sur Internet sur la façon de connecter divers écrans LCD au Raspberry Pi. Mais que faire si vous n'avez pas de Raspberry Pi et que vous souhaitez connecter un écran LCD bon marché à l'interface SPI? Tout ce dont vous avez besoin est une carte compatible Armbian. Le catalogue de cartes prises en charge par Armbian OS comprend des cartes: Asus, Pine64, Hardkernel, Orange Pi, Banana Pi, etc. Pour le moment, le catalogue contient plus de 114 modèles de cartes, la prise en charge de divers équipements prêts à l'emploi est annoncée. Disponible pour la connexion: modems 4G / LTE, USB Wi-Fi, USB Bluetooth, USB Ethernet, scanners tuners DVB, etc. Toutes ces cartes peuvent être facilement connectées à l'écran LCD SPI ILI9341,Je demande comment mettre en œuvre cela sous cat.
De nombreux ordinateurs monocarte ont une sortie HDMI, mais la connexion d'un écran complet avec une entrée HDMI est suffisamment coûteuse pour un petit projet. En particulier, s'il est nécessaire de mettre en œuvre la fonctionnalité minimale d'interaction avec l'utilisateur, un terminal d'impression de documents, affichant l'état actuel d'une application en cours d'exécution. Pour de telles tâches, vous pouvez utiliser des affichages de caractères LCD HD44780 sur l'interface I2C, ils sont assez bon marché et pratiques. Mais en même temps, leurs fonctionnalités sont très limitées, il est impossible d'afficher la console Linux et l'interface utilisateur native de l'application sur ces écrans, de plus, la zone de l'écran LCD ne peut pas être utilisée comme panneau de saisie d'informations. Les écrans LCD sur l'interface SPI sont parfaits pour résoudre ces problèmes, un écran de 3,5 pouces avec une couche résistive peut être acheté pour 9,57 $ (frais de port compris).L'écran LCD peut afficher la console Linux et le sous-système X11. Ainsi, l'utilisation du SPI LCD est la meilleure option en termes de fonctionnalité au coût.
Écran ILI9341 2,2 pouces 2,2 "SPI TFT
Le contrôleur ILI9341 est conçu pour contrôler le panneau TFT. Pour le contrôleur ILI9341, des panneaux avec une diagonale de 2,2 à 3,2 pouces, une résolution de 240x320 sont fournis, une couche résistive est ajoutée à certains LCD.
Nous allons connecter un module SPI LCD ILI9341 de 2,4 pouces sans couche résistive à un ordinateur monocarte Banana Pi BPI-M64.
Tenez compte des caractéristiques et du brochage du SPI LCD ILI9341 2,4 pouces
- Écran couleur de 2,4 pouces, prend en charge 65K couleurs
- Résolution 320X240
- Interface de connexion SPI
- Emplacement pour carte SD disponible
- alimentation du module 3.3V ~ 5V
- Tension de contrôle logique 3,3 V (TTL)
Broches de connexion LCD
Nombre | Étiquette de broche | Description |
une | VCC | Entrée d'alimentation 5 V / 3,3 V |
2 | GND | Sol |
3 | CS | Signal de sélection de puce LCD, activation de bas niveau |
quatre | RÉINITIALISER | Signal de réinitialisation LCD, réinitialisation de bas niveau |
cinq | 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 |
Pour contrôler le rétroéclairage, le contact numéro 8 - LED est utilisé . La tension maximale de 3,3 V correspond à la luminosité maximale de l'alimentation VCC totale. S'il est nécessaire de régler la luminosité de l'écran à 50%, la tension de 1,65 V doit être appliquée à la LED. Pour contrôler par programme la luminosité du rétroéclairage, la broche LED doit être connectée à la sortie analogique GPIO sur l'ordinateur monocarte. Si seules les sorties numériques sont disponibles, seule l'option d'activation ou de désactivation complète du rétroéclairage de l'écran est disponible.
En fonction des caractéristiques de l'écran LCD, les exigences suivantes sont imposées à un ordinateur monocarte:
- disponibilité de l'interface SPI
- tension logique sur les broches 3,3 V (la plupart des cartes)
- vous aurez besoin de deux autres broches GPIO libres (RESET, DC / RS)
Quel genre de bête Armbian êtes-vous et de quel type d'ordinateur monocarte vous avez besoin
La page armbian.com/download contient une grande variété d'ordinateurs monocarte. Du point de vue de la facilité de connexion, il est préférable de choisir une carte avec un connecteur GPIO 40 broches compatible avec Raspberry Pi 3. Par exemple, si vous connectez le SPI LCD ILI9341 2,4 pouces à la carte Banana Pi BPI-M64 et Orange Pi PC, alors les numéros des broches GPIO physiquement connectées seront les mêmes (à ne pas confondre avec les noms des contacts du processeur, ils seront différents, nécessaires en outre pour la configuration). Si l'ordinateur monocarte n'est pas construit sur le processeur Allwinner, vous devrez peut-être modifier plus de paramètres dans le fichier: sun50i-a64-spi-ili9341-led-always-on.dts (sera plus loin dans le texte).
ArmbianEst la distribution Linux la plus populaire pour les ordinateurs monocarte basée sur un processeur ARM, la liste des cartes prises en charge est énorme: Orange Pi, Banana Pi, Odroid, Olimex, Cubieboard, Roseapple Pi, Pine64, NanoPi, etc. La distribution Armbain est basée sur Debian et Ubuntu.
Après l'apparition du Raspberry Pi dans le monde, les fabricants chinois ont décidé de rejoindre également le mouvement Open Hardware Source et ont fabriqué de nombreuses cartes différentes. Mais le support logiciel était extrêmement faible, le projet Armbian est né pour résoudre ce problème. Pour le moment, Armbian a déjà 7 ans, 114 modèles de cartes sont pris en charge, un support pour divers équipements prêts à l'emploi a été annoncé. Disponible pour la connexion: modems 4G / LTE, USB Wi-Fi, USB Bluetooth, USB Ethernet, scanners tuners DVB, etc.
Pour exécuter Armbian sur un ordinateur monocarte, vous devez télécharger une image du site, puis la copier sur une carte microSD, à partir de laquelle vous devrez ultérieurement démarrer. Si la carte a suffisamment de mémoire eMMC, le système d'exploitation peut être facilement transféré de la carte microSD vers la mémoire eMMC avec le chargeur de démarrage via l'utilitaire armbian-config.
La création d'un projet IoT à l'aide d'Armbian, contrairement au Raspberry Pi, vous permet de choisir des cartes qui diffèrent par leurs performances et un ensemble de périphériques. Par exemple, toutes les versions du Raspberry Pi n'ont qu'un seul port Ethernet. Mais si vous devez créer un routeur avec plusieurs ports Ethernet, dans la liste des cartes Armbian prises en charge, les modèles conviennent: Helios64, Espressobin, Bananapi R2, etc.
SoC pris en charge
- Allwinner A10, A20, A31, H2 +, H3, H5, H6, A64
- Amlogic S805 et S905 (cartes Odroid), S802 / S812, S805, S905, S905X et S912 (fourche par @ balbes150)
- Actionsemi S500
- Freescale / NXP iMx6
- Marvell Armada A380
- Rockchip RK3288 / RK3328 / RK3399
- Samsung Exynos 5422
Schéma de câblage SPI LCD ILI9341 2,4 pouces vers Banana Pi BPI-M64 (port Raspberry Pi 3 GPIO)
L'interface SPI de l'écran LCD est connectée à SPI1 sur le Banana Pi BPI-M64. Les contacts CS, RESET, DC / RS peuvent être connectés à toutes les broches numériques.
Tableau des broches de connexion:
Numéro LCD | Étiquette LCD | Numéro de broche sur Banana Pi BPI-M64 (port GPIO Raspberry Pi 3) |
une | VCC | 1 ou 2 (si vous avez besoin d'une luminosité maximale, contactez le n ° 2 à 5V) |
2 | GND | 39, ou tout autre motif |
3 | CS | 24 |
quatre | RÉINITIALISER | dix-huit |
cinq | DC / RS | 22 |
6 | SDI (MOSI) | 19 |
7 | SCK | 23 |
8 | LED | 1 ou n'importe quel GPIO gratuit à 3,3 V |
9 | SDO (MISO) | 21 |
Si la broche LED est connectée à la sortie numérique GPIO, alors pour allumer manuellement le rétroéclairage, vous devrez fournir un "1" logique - pour allumer ou "0" - pour éteindre l'écran.
Schéma de connexion SPI LCD ILI9341:
Ordinateur monocarte Banana Pi BPI-M64
Banana Pi BPI-M64 est un mini ordinateur monocarte quadricœur 64 bits fourni en tant que solution open source. Le cœur du système est un processeur Allwinner A64 avec 4 cœurs Cortex-A53 avec une fréquence de 1,2 GHz. La carte contient 2 Go de mémoire RAM DDR3 SDRAM 733 MHz et 8 Go eMMC.
La chose la plus importante pour une connexion LCD SPI réussie est de connaître le nom des contacts de l'interface SPI, leur nombre et leur nom dépendent du modèle de processeur. La fiche technique Allwinner A64 est requise pour cette tâche. La page Wiki Banana Pi BPI-M64 montre le brochage du connecteur GPIO à 40 broches, à partir duquel nous apprenons le nom des broches: PD2, PD3, etc.
GPIO 40 broches de Banana pi BPI-M64 | |||
Nom de la broche GPIO | Fonction par défaut | Fonction2 : GPIO | Fonction3 |
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 |
En plus du nom du contact, il est nécessaire de connaître le numéro de série de ce contact sur la jambe du processeur, il se calcule facilement par la formule: (position de la lettre dans l'alphabet - 1) * 32 + position de sortie . Calculons le numéro de jambe pour la broche PD2. La première lettre n'est pas comptée car P - PORT, la position de la lettre D dans l'alphabet = 4, on obtient (4-1) * 32 + 2 = 98. Le contact avec l'étiquette PD2 correspond au 98ème pied sur le processeur, alors il sera nécessaire pour configurer l'arborescence des périphériques.
Arborescence des périphériques (DT) sous Linux
Une arborescence de périphériques (DT) est une structure de données Linux composée de nœuds nommés et de propriétés qui décrivent le matériel qui ne peut pas être découvert en interrogeant le matériel. L'arborescence doit inclure le nom du processeur principal, sa configuration de mémoire et tous les périphériques (internes et externes). DT n'est pas utilisé pour décrire les logiciels, bien que la liste des modules matériels entraîne le chargement des modules pilotes.
Le cœur de toute carte de développement ou ordinateur monocarte est le SoC. Le SoC possède de nombreuses broches (pattes) pour connecter des lignes électriques et divers appareils.
Les broches peuvent être reliées entre elles pour former une interface telle que MIPI DSI (MIPI Display Serial Interface). L'interface MIPI DSI est conçue pour connecter des panneaux LCD, elle est activement utilisée dans les smartphones et les tablettes. Mais si vous ne prévoyez pas de connecter un écran à l'appareil via MIPI DSI, ces lignes peuvent être utilisées à d'autres fins en changeant le DT. Contrairement à l'architecture x86, les systèmes basés sur SoC n'ont pas la capacité d'identifier complètement tous les périphériques en mode Plug and Play. Par conséquent, il est nécessaire de déclarer explicitement quelles broches sont utilisées pour les interfaces et quels périphériques sont connectés à ces interfaces.
Avant l'avènement de DT, les informations sur les périphériques sous Linux faisaient partie intégrante du noyau, et en cas de changement dans la composition des périphériques, il était nécessaire de reconstruire l'image système. Cela était extrêmement gênant et, par conséquent, la description des périphériques a été déplacée vers des fichiers de configuration qui sont collectés au niveau logique dans une arborescence. Où branch est un périphérique avec une indication du pilote requis pour le fonctionnement de ce périphérique.
Après avoir utilisé DT, il n'était pas nécessaire de créer une image individuelle pour chaque ensemble de périphériques. Il suffit maintenant de créer une image, d'inclure un ensemble de pilotes pour différents périphériques et de créer son propre DT pour chaque périphérique.
Superpositions de l'arborescence des périphériques
Superpositions de l' arborescence des périphériques - Ajoutez le principe du chevauchement des couches de périphériques au DT. Si la configuration décrit l'interface UART à laquelle Bluetooth était connecté et que vous devez remplacer Bluetooth par un module GPS, vous ne pouvez pas supprimer les paramètres Bluetooth existants, mais ajouter une couche supplémentaire pour le module GPS qui remplacera les paramètres précédents.
Les termes suivants sont utilisés pour travailler avec DT:
DT | Arborescence des appareils |
DTB (* .dtb) | Fichier binaire de l'arborescence des périphériques |
DTBO (* .dtbo) | Binaire de l'arborescence des périphériques pour la superposition |
DTC | Compilateur d'arborescence de périphériques |
DTO | Superpositions de l'arborescence des périphériques |
DTS (* .dts) | Fichier source de l'arborescence des périphériques |
FDT | Arborescence des périphériques aplatie, format binaire contenu dans un fichier .dtb |
La configuration matérielle est décrite dans les fichiers source DT (.dts) puis ils sont compilés en binaires DT (.dtb) pour une utilisation finale sur le système. Vous pouvez également effectuer la procédure inverse pour la décompilation *. dtb à *. dts, un compilateur / décompilateur est présent sur le système. La mise en œuvre de DTO comprend le fractionnement, la création, le partitionnement et l'exécution de l'arborescence des périphériques.
Partage DT
DT est divisé en deux parties:
- DT principal (arborescence principale des appareils) . Fourni par le développeur SoC et est le paramètre par défaut. Dans ce cas, Allwinner est fourni par le développeur du processeur Allwinner A64.
- Overlay DT (arborescence des périphériques de superposition) . La configuration spécifique du fabricant de la carte inclut les périphériques qui se trouvent sur la carte. La carte Banana Pi BPI-M64 est fournie par SinoVoip Co.,
Le sujet des superpositions de Device Tree sous Linux est suffisamment vaste pour ne pas transformer l'article en un travail multivolume de Lénine, vous pouvez le lire plus en détail dans la publication Working with GPIO en utilisant l'exemple de Banana Pi BPI-M64. Partie 2. Superpositions de l'arborescence des périphériques.
Mise en forme DTS pour SPI LCD ILI9341 2,4 pouces
Les tests ont été effectués sur l'image Armbian_20.08.2_Bananapim64_bionic_current_5.8.6_minimal.img.xz , basée sur Ubuntu 18.04.5 LTS (Bionic Beaver), noyau Linux 5.8.6. uname: Linux bananapim64 5.8.6-sunxi64 # 20.08.2 SMP ven 4 septembre 08:52:31 CEST 2020 aarch64 aarch64 aarch64 GNU / Linux.
Armbian a déjà un pilote pour ILI9341, il suffit donc de créer un fichier de description de périphérique DTS, de le compiler au format DTBO et de redémarrer le SBC. Comme le dit le dicton Facile!
Pour générer un fichier DTS, vous devez trouver le lien vers la gpiochip dans laquelle se trouve l'interface SPI, pour ce faire, ouvrez le terminal Armbian et exécutez la commande 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:
Cette commande répertorie tous les périphériques gpiochip disponibles et les numéros de broches concernés dans le système d'exploitation. Dans la section précédente, pour la broche SPI1-MOSI , le nom de la broche PD2, le numéro de jambe du processeur a été déterminé - 98. Sur la base du résultat obtenu, le nombre 98 tombe sur la plage GPIO 0-255, ce qui correspond au Puce gpiochip1: GPIO 0-255, parent: plate-forme / 1c20800. pinctrl, 1c20800.pinctrl . De plus, pour générer un fichier DTS, vous devez trouver le lien vers 1c20800.pinctrl .
Créons un fichier DTS avec le nom: sun50i-a64-spi-ili9341-led-always-on.dts (basé sur le fichier dts de la carte 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>;
};
};
};
};
Considérez le contenu:
- 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> - Fréquence d'interface SPI
- rotate = <90> - orientation de l'image, rotation de 90 degrés, selon la façon dont vous souhaitez positionner l'affichage.
- fps = <25> - images par seconde
- reset-gpios = <& pio 3 4 1> - PIN RESET = PD4
- dc-gpios = <& pio 2 0 0> - broche DC_RS = PC0
Placez le fichier sur le chemin / boot / dtb / allwinner / overlay. Puis compile le fichier .dts en .dtbo:
$ dtc -O dtb -o sun50i-a64-spi-ili9341-led-always-on.dtbo sun50i-a64-spi-ili9341-led-always-on.dts
Lançons l'utilitaire de configuration de la carte: $ armbian-config. Allez dans le menu: Système> Matériel, et activez le calque (superposition): spi-ili9341-led-always-on . Après avoir redémarré la carte, la console Linux sera sur l'écran LCD SPI:
Nom du contact
Pour tous les processeurs Allwinner, le format d'enregistrement des contacts correspond au formulaire cs-gpios = <& pio 3 0 0> , pour les autres processeurs le format d'enregistrement des contacts sera différent.
Solution de problèmes
Si l'image n'apparaît pas sur l'écran LCD, exécutez la commande pour vérifier: $ dmesg | grep -E 'ili9341'.
La console doit contenir les informations suivantes:
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
Configuration de l'écran LCD SPI pour l'interface graphique Xfce et le sous-système X11
Pour la sortie de la console Linux, il suffit d'ajouter un fichier DTS et c'est tout, mais pour la sortie graphique, cela ne suffit pas.
1) Installez XORG et XFCE:
$ sudo apt-get update $ sudo apt-get install xorg $ sudo apt-get install xfce4
2) Pour le processeur Allwinner, vous devez en plus installer le pilote GPU - fbdev:
$ sudo apt-get install xserver-xorg-video-fbdev
3) Supprimez tous les fichiers de configuration le long du chemin /etc/X11/xorg.conf.d (s'il n'y a pas de fichiers, alors super)
4) Créez un fichier de configuration le long du chemin /usr/share/X11/xorg.conf.d / 99-fbdev. Conf et placez-y l'extrait de code suivant:
Section "Device"
Identifier "myfb"
Driver "fbdev"
Option "fbdev" "/dev/fb0"
EndSection
Où / dev / fb0 est le périphérique LCD SPI. Si un panneau HDMI est connecté à la carte, il peut y avoir deux périphériques / dev / fb0 et / dev / fb1.
Nous démarrons l'interface graphique avec la commande: startx ou startxfe4:
Si vous devez accéder directement à l'interface graphique, vous devez en plus installer les packages:
$ sudo apt-get remove tasksel $ sudo apt-get remove xubuntu-desktop
Pour renvoyer la console uniquement au démarrage, vous devez désactiver le démarrage automatique du service display-manager.service
$ sudo systemctl disable display-manager.service
Solution de problèmes
Si l'interface graphique ne démarre pas, pour résoudre les problèmes, vous devez consulter le journal des événements X11 à l'aide de la commande:
$ cat /var/log/Xorg.0.log
Résultat
L'installation et la configuration de SPI LCD ne nécessitent aucune compilation de modules à partir de la source, ce qui simplifie grandement l'installation. L'essentiel est d'exposer soigneusement les contacts et tout fonctionnera immédiatement. Les objectifs fixés ont été atteints avec succès.
RoadMap
- Connexion d'un écran 3,5 '' plus grand sur le contrôleur ILI9488.
- Configuration de l'interface tactile pour Xfe.
- Affichage d'une seule application graphique sur SPI LCD à l'aide du sous-système X11 du conteneur Docker (solution pour terminaux publics, kiosques, terminaux de point de vente).
Le fichier sun50i-a64-spi-ili9341- led-always-on.dts et d'autres fichiers de superposition de bois sont disponibles dans le catalogue GitHub Banana-Pi-BPI-M64 / dt-overlays /