Écran à contrôleur ILI9341 et Raspberry Pi

Publié le 2021-07-21

fbcp-ili9341 permet de cloner la sortie HDMI sur un écran doté d'un contrôleur ILI9341 (bus SPI). Il prend en charge le redimensionnement automatique vers 320x240 pixel au coût d'une consommation CPU accrue. Pour ne pas utiliser cette fonctionnalité et limiter l'utilisation du CPU il faut définir la résolution HDMI à 320x240 en modifiant le fichier config.txt:

hdmi_group=2
hdmi_mode=87
hdmi_cvt=320 240 60 1 0 0 0
hdmi_force_hotplug=1

Concernant l'interconnexion Raspberry/ILI9341, fbcp-ili9341 utilise par défaut les GPIO SPI_0 (non configurables). Seuls DC et Reset sont paramétrables, MISO (GPIO 9) n'est pas utilisé.

Raspberry ILI9341 Fonction
2 VCC Alimentation 3.3v
6 GND Alimentation
24/GPIO8 CS Cable select
13/GPIO27 Reset Reset
15/GPIO22 DC Data control
19/GPIO10 MOSI MOSI
23/GPIO11 SCK Clock
16/GPIO23 LED Éclairage

Pour ne pas utiliser la fonction de mise ne veille en cas d'inactivité, LED peut être connectée à VCC (3.3V).

Pour compiler le programme (nécessite git et cmake):

git clone https://github.com/juj/fbcp-ili9341
cd fbcp-ili9341
mkdir build

#Supprime l'option de mise en veille de l'écran
sed -i '/^#define BACKLIGHT_CONTROL_FROM_KEYBOARD/c\//#define BACKLIGHT_CONTROL_FROM_KEYBOARD' config.h

#Pour un Raspberry Pi 3 (-DARMV8A=ON) avec un écran générique (-DILI9341=ON)
cmake -DILI9341=ON -DGPIO_TFT_DATA_CONTROL=22 -DGPIO_TFT_RESET_PIN=27 -DGPIO_TFT_BACKLIGHT=23 \
      -DSPI_BUS_CLOCK_DIVISOR=6 -DARMV8A=ON -DBACKLIGHT_CONTROL=ON -DSTATISTICS=0

#Exécution, nécessite les droits root
sudo ./fbcp-ili9341

L'option -DBACKLIGHT_CONTROL=ON ne peut être retirée sans quoi l'écran reste inactif. Pour retirer la mise en veille après un délais, il faut commenter la ligne #define BACKLIGHT_CONTROL_FROM_KEYBOARD dans le fichier config.h ou bien connecter LED à VCC (3.3V).

Le binaire produit utilise les librairies suivantes:

linux-vdso.so.1 (0x7eff9000)
/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so => /usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so (0x76ee0000)
libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x76eb6000)
libbcm_host.so => /opt/vc/lib/libbcm_host.so (0x76e8f000)
libatomic.so.1 => /lib/arm-linux-gnueabihf/libatomic.so.1 (0x76e76000)
libstdc++.so.6 => /lib/arm-linux-gnueabihf/libstdc++.so.6 (0x76d2f000)
libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0x76cad000)
libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0x76c80000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76b32000)
/lib/ld-linux-armhf.so.3 (0x76ef5000)
libvchiq_arm.so => /opt/vc/lib/libvchiq_arm.so (0x76b1c000)
libvcos.so => /opt/vc/lib/libvcos.so (0x76b03000)
libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0x76af0000)
librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0x76ad9000)

Sources