Compilation GCC, hyperpixel4 Square & Pi4 RB7.2.2 :)
-
Bonjour la communauté
Dans l'espoir de faire tourner un ecran Pimoroni hyperpixel4 Square (4 pouces format carré & différent du rectangulaire 800*480) sur mon Pi4 comme déjà fait sur mon très satisfaisant mais humble Pi3, je recherche des pistes pour solutionner mon problème.
Ce post fait écho à quelques précédents... mais reste différent des précédents de par la nature de l'écran, de ses fichiers pilotes et de la carte Raspberry de richePour info, fichiers nécessaires sur mon ancien PI3 équipé de hyperpixel4 Square:
- Modifications config.txt du Pi3:# custom config [all] #dtoverlay=vc4-fkms-v3d # Parametres de l'ecran LCD HyperPixel4 carre # Rotation ecran port vers le haut dtoverlay=hyperpixel4:rotate display_rotate=1 overscan_left=0 overscan_right=0 overscan_top=0 overscan_bottom=0 framebuffer_width=720 framebuffer_height=720 enable_dpi_lcd=1 display_default_lcd=1 dpi_group=2 dpi_mode=87 dpi_output_format=0x7f226 hdmi_timings=720 0 15 15 15 720 0 10 10 10 0 0 0 60 0 35113500 6 dtparam=i2c_arm=off dtparam=spi=off
- Fichiers à installer sur Pi3:
hyperpixel4.dtbo;
hyperpixel4-init;
et
S15hyperpixel (à créer pour RecalBox ci dessous):#!/bin/sh if [ -f /usr/bin/hyperpixel4-init ]; then ( /usr/bin/hyperpixel4-init ) & fi
A présent sur le Pi4!
Dans le principe je devrais utiliser quelques fichiers propres à mon application Pi4 et liés à l'hyperpixel4 Square :- config.txt (à modifier dans l'idée du Pi3);
- hyperpixel4.dtbo ;
- S15hyperpixel identique au précédent sur Pi3 répondant au fichier..
- hyperpixel4-init.c
#include <bcm2835.h> #include <stdio.h> #define CLK RPI_V2_GPIO_P1_13 // BCM 27 #define MOSI RPI_V2_GPIO_P1_37 // BCM 26 #define CS RPI_V2_GPIO_P1_12 // BCM 18 #define DELAY 100 // clock pulse time in microseconds #define WAIT 120 // wait time in milliseconds #define PIN RPI_V2_GPIO_P1_35 // bcm2835_delayMicroseconds() int32_t commands[] = { 0x0ff, 0x1ff, 0x198, 0x106, 0x104, 0x101, 0x008, 0x110, 0x021, 0x109, 0x030, 0x102, 0x031, 0x100, 0x040, 0x110, 0x041, 0x155, 0x042, 0x102, 0x043, 0x109, 0x044, 0x107, 0x050, 0x178, 0x051, 0x178, 0x052, 0x100, 0x053, 0x16d, 0x060, 0x107, 0x061, 0x100, 0x062, 0x108, 0x063, 0x100, 0x0a0, 0x100, 0x0a1, 0x107, 0x0a2, 0x10c, 0x0a3, 0x10b, 0x0a4, 0x103, 0x0a5, 0x107, 0x0a6, 0x106, 0x0a7, 0x104, 0x0a8, 0x108, 0x0a9, 0x10c, 0x0aa, 0x113, 0x0ab, 0x106, 0x0ac, 0x10d, 0x0ad, 0x119, 0x0ae, 0x110, 0x0af, 0x100, 0x0c0, 0x100, 0x0c1, 0x107, 0x0c2, 0x10c, 0x0c3, 0x10b, 0x0c4, 0x103, 0x0c5, 0x107, 0x0c6, 0x107, 0x0c7, 0x104, 0x0c8, 0x108, 0x0c9, 0x10c, 0x0ca, 0x113, 0x0cb, 0x106, 0x0cc, 0x10d, 0x0cd, 0x118, 0x0ce, 0x110, 0x0cf, 0x100, 0x0ff, 0x1ff, 0x198, 0x106, 0x104, 0x106, 0x000, 0x120, 0x001, 0x10a, 0x002, 0x100, 0x003, 0x100, 0x004, 0x101, 0x005, 0x101, 0x006, 0x198, 0x007, 0x106, 0x008, 0x101, 0x009, 0x180, 0x00a, 0x100, 0x00b, 0x100, 0x00c, 0x101, 0x00d, 0x101, 0x00e, 0x100, 0x00f, 0x100, 0x010, 0x1f0, 0x011, 0x1f4, 0x012, 0x101, 0x013, 0x100, 0x014, 0x100, 0x015, 0x1c0, 0x016, 0x108, 0x017, 0x100, 0x018, 0x100, 0x019, 0x100, 0x01a, 0x100, 0x01b, 0x100, 0x01c, 0x100, 0x01d, 0x100, 0x020, 0x101, 0x021, 0x123, 0x022, 0x145, 0x023, 0x167, 0x024, 0x101, 0x025, 0x123, 0x026, 0x145, 0x027, 0x167, 0x030, 0x111, 0x031, 0x111, 0x032, 0x100, 0x033, 0x1ee, 0x034, 0x1ff, 0x035, 0x1bb, 0x036, 0x1aa, 0x037, 0x1dd, 0x038, 0x1cc, 0x039, 0x166, 0x03a, 0x177, 0x03b, 0x122, 0x03c, 0x122, 0x03d, 0x122, 0x03e, 0x122, 0x03f, 0x122, 0x040, 0x122, 0x052, 0x110, 0x053, 0x110, 0x0ff, 0x1ff, 0x198, 0x106, 0x104, 0x107, 0x018, 0x11d, 0x017, 0x122, 0x002, 0x177, 0x026, 0x1b2, 0x0e1, 0x179, 0x0ff, 0x1ff, 0x198, 0x106, 0x104, 0x100, 0x03a, 0x160, 0x035, 0x100, 0x011, 0x100, -1, 0x029, 0x100, -1 }; void setup_pins(void) { bcm2835_gpio_fsel(CLK, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(MOSI, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(CS, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_write(CS, HIGH); } void cleanup_pins(void) { // Return the touch interrupt pin to a usable state bcm2835_gpio_fsel(CLK, BCM2835_GPIO_FSEL_INPT); bcm2835_gpio_set_pud(CLK, BCM2835_GPIO_PUD_OFF); } void send_bits(uint16_t data, uint16_t count){ int x; int mask = 1 << (count-1); for(x = 0; x < count; x++){ bcm2835_gpio_write(MOSI, (data & mask) > 0); data <<= 1; bcm2835_gpio_write(CLK, LOW); bcm2835_delayMicroseconds(DELAY); bcm2835_gpio_write(CLK, HIGH); bcm2835_delayMicroseconds(DELAY); } bcm2835_gpio_write(MOSI, LOW); } void write(uint16_t command){ bcm2835_gpio_write(CS, LOW); send_bits(command, 9); bcm2835_gpio_write(CS, HIGH); } void setup_lcd(void){ int count = sizeof(commands) / sizeof(int32_t); int x; for(x = 0; x < count; x++){ int32_t command = commands[x]; if(command == -1){ bcm2835_delay(WAIT); continue; } write((uint16_t)command); } } int main(int argc, char **argv) { if (!bcm2835_init()) return 1; setup_pins(); setup_lcd(); cleanup_pins(); bcm2835_close(); return 0; }
C'est ici que j'ai un certain doute... Car celui du Pi3 est compilé pour son exploitation.
Sur Pi4 il est en langage de programmation...En fouillant dans le répertoire d'installation du RapPiOS j'ai trouvé quelques informations pour justement compiler ce fichier:
gcc -o hyperpixel4-init -static hyperpixel4-init.c -lbcm2835
J'ai tenté sous windows une compilation mais il semble que l'on doive avoir une référence au GPIO via "-lbcm2835" de la ligne de commande. Donc nécessité de passer sur une compilation sous Pi4 me semble-t-il.
MES QUESTIONS:
- pouvez-vous me renseigner sur la nature des commandes "-static" et "-lbcm2835"?
- Si vous avez les compétences serait-il possible de m'aider dans la compilation du fichier? ... que je mettrai à disposition
Merci !
-
Salut @Jearon,
Oula tu es parti bien loin il me semble, et sans grandes connaissances.
Je n'ai pas la solution pour toi, ce qui est sûr c'est qu'il faut que tu compiles ton programme avec un compilateur pour proc arm. Si tu as essayé sous windows sans le cross compilateur adequat ça ne marchera jamais.
Je ne suis pas sûr non plus que tu puisses prendre les programmes du pi3 pour les passer sur pi4, je pense qu'il y a eu des changements notamment sur la gestion des écrans. et je pense qu'ils sont différents physiquement sur ce point.
il vaudrait mieux essayer d'aller chercher du côté du site de l'hyperpixel4 pour trouver des infos des développeurs. -
@cyril92 merci pour ta réponse.
Certes j'ai un manque flagrant de connaissances notamment pour la compilation. J'ai voulu avancer sans connaître... c'est pour cette raison que j'en appelle à l'attention de bonnes âmes du forum... pour guider ou faire pour moi au pireConcernant mon premier écran hyperpixel4 800x480 je l'ai remballé et mis en vente au profit de sa version carré 720x720 qui concrétise un projet portable pi3 en espérant que par ce post j'arrive à le faire évoluer au pi4.
Je reste lucide pour les fichiers propres à chaque écran et à chaque modèle de Pi.
Je ne me suis pas étendu sur ma démarche en amont, mais j'ai au préalable installé l'écran sur Pi3 puis Pi4 et récupéré chaque répertoires d'installation contenant lesdits fichiers, rangé distinctement et soigneusement sur mon pc pour ne pas mélanger les configuration Pi3 Pi4 entre ellesJ'ai donc un fichier hyperpixel-init.c qui n'est pour l'heure pas au même format que son pendan Pi3.
J'ai du mal à admettre que l'écran ne peut fonctionner hors RaspiOs et je voudrais essayer d'éclaircir ce dernier point avant d'enterrer ma version portable Pi4Pour finir... j'ai traîné sur le github officiel et lu moult forum sur le sujet hyperpixel4 square et pi4... mon avenir s'assombrit mais je ne désespère pas
-