Dépannage d'un problème de rafraîchissement sur la dernière ligne d'écran pour RK3576

L'écran utilise un format RGB565, tandis que le RK3576 se connecte via une interface MIPI. Par conséquent, un convertisseur ICN6211 est utilisé pour transformer le signal MIPI en signal RGB destiné à l'écran.

Le convertisseur avait été configuré par un stagiaire, mais la ligne inférieure de l'écran présentait toujours un scintillement persistant.

En exécutant le benchmark de LVGL, nous avons remarqué que la dernière ligne affichait en réalité le contenu de la première ligne. Le problème était donc évident : le signal vertical était trop rapide. La solution consistait simplement à augemnter les valeurs des bordures verticales avant et arrière.

La configuration DTS de l'écran était la suivante :

 1 &afficheur_dsi{
 2     status = "okay";
 3     compatible = "simple-afficheur-dsi";
 4     reg = <0>;
 5     retroeclairage = <&retroeclairage>;
 6     alimentation = <&vcc_ecran>;// Spécifie l'alimentateur pour le panneau LCD.
 7     
 8     broches_activation = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;// Broche GPIO pour activer le panneau d'affichage
 9     broches_reinitialisation = <&gpio0 RK_PB0 GPIO_ACTIVE_LOW>;// Broche GPIO pour réinitialiser le panneau d'affichage.
10     
11     // Définit les délais entre diverses opérations (réinitialisation, activation, préparation, etc.).
12     delai_reinitialisation_ms = <200>;
13     delai_activation_ms = <300>;
14     delai_preparation_ms = <200>;
15     delai_depreparation_ms = <300>;
16     delai_desactivation_ms = <300>;
17     delai_initialisation_ms = <600>;
18     // Spécifie les dimensions physiques du panneau.
19     //largeur-mm = <71>;
20     //hauteur-mm = <105>;
21     // Définit les indicateurs de mode pour l'interface DSI.
22     dsi,indicateurs = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM)>;
23     dsi,format = <MIPI_DSI_FMT_RGB565>;// Format de pixel pour l'interface DSI.
24     dsi,canaux  = <2>;// Nombre de lignes de données utilisées par l'interface DSI.
25     // Commandes d'initialisation du panneau
26     sequence_initialisation_panneau = [
27         23 00 02 7A C1
28         23 00 02 20 20
29         23 00 02 21 E0
30         23 00 02 22 13
31         23 00 02 23 37
32         23 00 02 24 04
33         23 00 02 25 55
34         23 00 02 26 00
35         23 00 02 27 08
36         23 00 02 28 04
37         23 00 02 29 1F
38         23 00 02 34 80
39         23 00 02 36 37
40         23 00 02 86 29
41         23 00 02 B5 A0
42         23 00 02 5C FF
43         23 00 02 2A 01
44         23 00 02 56 92
45         23 00 02 6B 72
46         23 00 02 69 24
47         23 00 02 10 40
48         23 00 02 11 88
49         23 00 02 B6 20
50         23 00 02 51 20
51         23 00 02 09 10
52     ];
53 
54     sequence_sortie_panneau = [];
55     noms_broches_controle = "default";
56     broches_controle = <&asclcdm0_stbyb>, <&asclcdm0_rst>;
57 
58     temps_affichage: temps_affichage {
59         mode_natif = <&dsi_timing0>;
60         dsi_timing0: timing0 {
61             frequence_horloge = <25000000>;
62             largeur_active = <800>;
63             hauteur_active = <480>;
64             longueur_synchro_h = <4>;
65             marge_arriere_h = <85>;
66             marge_avant_h = <55>;
67             longueur_synchro_v = <4>;
68             marge_arriere_v = <31>;
69             marge_avant_v = <8>;
70             polarite_synchro_h = <0>;
71             polarite_synchro_v = <0>;
72             polarite_de = <0>;
73             polarite_horloge_pixel = <0>;
74         };
75     };
76 
77     ports {
78         #address-cells = <1>;
79         #size-cells = <0>;
80 
81         port@0 {
82             reg = <0>;
83             entree_panneau_dsi: endpoint {
84                 remote-endpoint = <&sortie_dsi_panneau>;
85             };
86         };
87     };
88 };

Après plusieurs tentatives d'ajustement des marges verticales avant et arrière sans succès, nous avons utilisé l'outil ICN6211 Config.exe fourni par le fabricant pour générer une séquence d'initialisation adaptée.

L'outil a révélé que : Marge avant verticale (VFP) = 27 Marge arrière verticale (VBP) = 29

Nous avons ensuite ajusté ces valeurs dans la séquence d'initialisation comme suit :

1         23 00 02 27 58      //VFP
2         23 00 02 28 04
3         23 00 02 29 3F      //VBP

Ces modifications ont résolu le problème de scintillement.

Nous avons ensuite procédé à une élimination progressive des paramètres non essentiels. La suppression de l'indicateur MIPI_DSI_MODE_VIDEO_SYNC_PULSE a d'abord résolu le problème, mais lors d'ajustements ultérieurs des valeurs VFP et VBP, le problème est réapparu. Seule la réintroduction de cet indicateur a permis de rétablir le fonctionnement correct.

La solution finale a donc consisté à combiner :

  • L'indicateur MIPI_DSI_MODE_VIDEO_SYNC_PULSE
  • Les valeurs ajustées de VFP et VBP
 1 &afficheur_dsi{
 2     status = "okay";
 3     compatible = "simple-afficheur-dsi";
 4     reg = <0>;
 5     retroeclairage = <&retroeclairage>;
 6     alimentation = <&vcc_ecran>;
 7     
 8     broches_activation = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;
 9     broches_reinitialisation = <&gpio0 RK_PB0 GPIO_ACTIVE_LOW>;
10     
11     delai_reinitialisation_ms = <200>;
12     delai_activation_ms = <300>;
13     delai_preparation_ms = <200>;
14     delai_depreparation_ms = <300>;
15     delai_desactivation_ms = <300>;
16     delai_initialisation_ms = <600>;
17     
18     dsi,indicateurs = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_VIDEO_SYNC_PULSE)>;
19     dsi,format = <MIPI_DSI_FMT_RGB565>;
20     dsi,canaux  = <2>;
21     
22     sequence_initialisation_panneau = [
23         23 00 02 7A C1
24         23 00 02 20 20
25         23 00 02 21 E0
26         23 00 02 22 13
27         23 00 02 23 37
28         23 00 02 24 04
29         23 00 02 25 55
30         23 00 02 26 00
31         23 00 02 27 58      //VFP
32         23 00 02 28 04
33         23 00 02 29 3F      //VBP
34         23 00 02 34 80
35         23 00 02 36 37
36         23 00 02 86 29
37         23 00 02 B5 A0
38         23 00 02 5C FF
39         23 00 02 2A 01
40         23 00 02 56 92
41         23 00 02 6B 72
42         23 00 02 69 24
43         23 00 02 10 40
44         23 00 02 11 88
45         23 00 02 B6 20
46         23 00 02 51 20
47         23 00 02 09 10
48     ];
49 
50     sequence_sortie_panneau = [];
51     noms_broches_controle = "default";
52     broches_controle = <&asclcdm0_stbyb>, <&asclcdm0_rst>;
53 
54     temps_affichage: temps_affichage {
55         mode_natif = <&dsi_timing0>;
56         dsi_timing0: timing0 {
57             frequence_horloge = <25000000>;
58             largeur_active = <800>;
59             hauteur_active = <480>;
60             longueur_synchro_h = <4>;
61             marge_arriere_h = <85>;
62             marge_avant_h = <55>;
63             longueur_synchro_v = <4>;
64             marge_arriere_v = <63>;
65             marge_avant_v = <88>;
66             polarite_synchro_h = <0>;
67             polarite_synchro_v = <0>;
68             polarite_de = <0>;
69             polarite_horloge_pixel = <0>;
70         };
71     };
72 
73     ports {
74         #address-cells = <1>;
75         #size-cells = <0>;
76 
77         port@0 {
78             reg = <0>;
79             entree_panneau_dsi: endpoint {
80                 remote-endpoint = <&sortie_dsi_panneau>;
81             };
82         };
83     };
84 };

Étiquettes: RK3576 MIPI ICN6211 RGB565 DTS

Publié le 16 juin à 00h01