Aller au contenu
Display Engineer
Dépannage

GT911 tactile ne fonctionne pas ? Adresse I2C, temporisation de reset, configuration et correction des coordonnées

Une liste de vérification étape par étape pour un contrôleur tactile capacitif GT911 qui n'est pas détecté, ne renvoie aucune touche ou signale des coordonnées erronées : alimentation et scan I2C, séquence de sélection d'adresse INT/RST, registre d'état 0x814E, front d'interruption, corrections de résolution et d'axes pour Linux, ESP-IDF et ESPHome.

DEDisplay Engineer Applications Team · Ingénieurs d’application afficheurMis à jour le 19 oct. 2026

Commencez ici : identifiez le symptôme

Symptôme

Cause la plus probable

Consultez

Rien aux adresses 0x5D ou 0x14 lors d'un scan I2C

Contrôleur non alimenté, résistances de tirage manquantes, ou puce maintenue en reset

Étape 1

Détecté à l'adresse 0x14 alors que le pilote attend 0x5D (ou l'inverse), ou l'adresse change d'un démarrage à l'autre

Niveau de la broche INT pendant le reset

Étape 2

Détecté, l'ID de produit se lit correctement, mais aucune touche n'arrive

Registre d'état non effacé, front d'interruption incorrect, ou INT non câblée

Étape 3

Les touches arrivent mais au mauvais endroit, en miroir ou pivotées

La résolution dans la configuration du GT911 ne correspond pas au panneau, ou les axes doivent être permutés

Étape 4

Tenté d'écrire un nouveau bloc de configuration

Lisez ceci d'abord

Étape 5

Suivez les étapes dans l'ordre. Les adresses de registres et les temporisations ci-dessous proviennent du pilote goodix de Linux, du composant esp_lcd_touch_gt911 d'Espressif et de la documentation ESPHome ; les liens figurent dans la section Sources.

1. Vérifier que le GT911 est alimenté et répond sur le bus I2C

Alimentation et résistances de tirage

Le binding device-tree Linux pour les contrôleurs Goodix nomme deux alimentations : AVDD28 (analogique) et VDDIO (rail d'E/S logiques). Sur un module ou une FPC, les deux sont généralement alimentées depuis le connecteur hôte ; mesurez-les donc au niveau du connecteur avant de suspecter le firmware. SDA et SCL nécessitent également des résistances de tirage quelque part sur le bus ; de nombreux modules d'affichage n'en intègrent pas.

Scanner le bus

Exécutez un sketch de scan I2C ou i2cdetect. Un GT911 répond à l'une de ces deux adresses 7 bits :

Adresse 7 bits

Octets d'écriture / lecture 8 bits (comme listés dans certaines datasheets)

0x5D

0xBA / 0xBB

0x14

0x28 / 0x29

Les paires 8 bits proviennent d'un commentaire dans le code de reset du pilote Linux. Si une documentation vendeur indique « adresse 0xBA », il s'agit du même périphérique que 0x5D en 7 bits ; saisissez 0x5D dans Arduino, ESP-IDF et Linux.

Lire l'ID de produit

Sur le GT911, les registres ont des adresses 16 bits. Le pilote Linux lit 6 octets à partir de 0x8140 : les 4 premiers octets sont l'ID de produit en texte ASCII et les 2 derniers sont la version du firmware (petit-boutiste). Un GT911 renvoie la chaîne 911. Si vous obtenez 911, le bus, l'alimentation et l'adresse sont corrects, et le problème se trouve plus bas dans cette liste.

Si rien ne répond à l'une ou l'autre adresse, vérifiez que la ligne de reset n'est pas maintenue à l'état bas. Sur de nombreux modules, RST est une entrée du GT911 et doit être pilotée à l'état haut par l'hôte (ou tirée vers le haut sur la carte) avant que le contrôleur ne fonctionne.

2. Réussir la séquence de reset et de sélection d'adresse

Le GT911 choisit son adresse I2C en fonction du niveau de sa broche INT au moment où le reset est relâché. Selon les termes du binding Linux, la ligne INT « est échantillonnée par le périphérique à la désassertion du reset pour sélectionner l'adresse du client I2C ».

Niveau de INT quand RST passe à l'état haut

Adresse I2C

Bas

0x5D

Haut

0x14

La séquence utilisée par le pilote Linux

  1. Passer RST à l'état bas et attendre plus de 10 ms (le pilote attend 20 ms).
  2. Amener INT au niveau correspondant à l'adresse souhaitée : haut pour 0x14, bas pour 0x5D.
  3. Attendre plus de 100 µs.
  4. Passer RST à l'état haut et attendre plus de 5 ms (le pilote attend 6–10 ms).
  5. Maintenir INT à l'état bas pendant 50 ms, puis basculer INT en entrée.

Si INT flotte pendant l'étape 4, l'adresse peut différer d'une mise sous tension à l'autre. C'est le signalement classique du type « ça marche après le flash, ça échoue après un démarrage à froid ».

ESP-IDF : esp_lcd_touch_gt911

Le composant d'Espressif définit ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS comme 0x5D et ESP_LCD_TOUCH_IO_I2C_GT911_ADDRESS_BACKUP comme 0x14. Il n'exécute la séquence de sélection d'adresse que si les trois conditions suivantes sont remplies :

  • rst_gpio_num est un GPIO réel (pas GPIO_NUM_NC),
  • int_gpio_num est un GPIO réel,
  • driver_data pointe vers une structure esp_lcd_touch_io_gt911_config_t dont dev_addr est l'adresse souhaitée.

Sinon, il journalise I2C address initialization procedure skipped - using default GT9xx setup et effectue une simple réinitialisation. Dans ce cas, l'adresse est celle que donne le câblage de la carte, et l'adresse I2C du panel-IO que vous passez doit correspondre au résultat du scan. L'horloge I2C par défaut du composant dans ESP_LCD_TOUCH_IO_I2C_GT911_CONFIG() est de 100 kHz.

Cartes où l'hôte ne commande pas INT

Si INT n'est pas relié à l'hôte, celui-ci ne peut pas choisir l'adresse ; scannez donc les deux adresses et utilisez celle qui répond. Sur la Sunton ESP32-8048S043C, par exemple, l'interruption du GT911 n'est pas câblée par défaut vers un GPIO (voir notre page sur la carte). La page GT911 d'ESPHome indique que lorsque INT passe par un expandeur d'E/S, la broche sert toujours à définir l'adresse au démarrage, mais le tactile est interrogé par polling plutôt que par interruption.

3. Détecté, mais aucun événement tactile

Lire et effacer le registre d'état

Les données tactiles commencent à 0x814E. Le premier octet est un octet d'état :

  • Bit 7 (0x80) : tampon prêt. De nouvelles données ne sont valides que si ce bit est positionné.
  • Bits 0–3 : nombre de points de contact. Le pilote Linux rejette les valeurs supérieures au maximum configuré.
  • Bit 4 : une touche (bouton) est enfoncée.

Chaque point de contact qui suit occupe 8 octets : un track ID, puis X, Y et la taille en valeurs 16 bits little-endian.

Après lecture, le pilote Linux comme esp_lcd_touch_gt911 écrivent 0 dans 0x814E. Si vous écrivez votre propre pilote, faites de même ; omettre cette écriture est une cause fréquente de pilote artisanal qui ne détecte que le premier contact.

Adapter le front d'interruption

Le type de déclenchement est indiqué dans la configuration propre du GT911 : bits 0–1 de l'octet de configuration à 0x804D (décalage de 6 depuis le début de la configuration à 0x8047). Le pilote Linux l'interprète ainsi :

Valeur

Type d'interruption

0

Front montant

1

Front descendant

2

Niveau bas

3

Niveau haut

Configurez votre interruption GPIO en conséquence. Dans esp_lcd_touch_gt911, levels.interrupt = 1 sélectionne une interruption sur front montant et 0 sur front descendant.

Pas de ligne INT ? Scrutez

Le polling fonctionne très bien pour une utilisation HMI. ESPHome scrute toutes les 50 ms par défaut (update_interval) quand aucun interrupt_pin n'est défini. Le pilote Linux, lorsqu'il dispose d'une interruption, attend jusqu'à 20 ms le bit ready avant d'abandonner une trame.

4. Le toucher arrive au mauvais endroit

Vérifiez la résolution enregistrée dans le GT911

Le GT911 rapporte les coordonnées dans la résolution écrite dans sa configuration, et non dans celle de votre écran. D'après le pilote Linux, le maximum X est la valeur 16 bits little-endian à l'adresse 0x8048 et le maximum Y à l'adresse 0x804A. Lisez-les. Si le contrôleur est configuré pour 1024×600 alors que votre dalle est en 800×480, les touchers atterrissent à droite et en dessous du doigt et les bords extrêmes sortent de l'écran. La solution consiste à mettre à l'échelle (ou à régler les limites du pilote sur les valeurs du contrôleur).

D'où chaque pile tire ses limites :

Pile

Source de la résolution

Permutation et miroir

Pilote Linux goodix

Lues dans la configuration du GT911 ; repli sur 4095 × 4095 quand la configuration n'en contient pas

Device-tree touchscreen-swapped-x-y, touchscreen-inverted-x, touchscreen-inverted-y, touchscreen-size-x/y

ESP-IDF esp_lcd_touch_gt911

Vos x_max / y_max dans esp_lcd_touch_config_t (le pilote ne lit pas la résolution de la puce)

flags.swap_xy, flags.mirror_x, flags.mirror_y

ESPHome gt911

calibration du tactile (x_min, x_max, y_min, y_max)

transform: swap_xy / mirror_x / mirror_y

Calibrez à partir des valeurs brutes

La page touchscreen d'ESPHome suggère de logger touch.x_raw et touch.y_raw dans une lambda on_touch, de toucher les coins au niveau des pixels en bordure quelques fois, puis de saisir les valeurs brutes minimales et maximales comme calibration. La même méthode fonctionne sur n'importe quelle plateforme : affichez les X et Y bruts, touchez les quatre coins, puis ramenez la plage sur l'écran.

Corrigez l'orientation dans cet ordre : commencez par placer X et Y sur les bons axes (swap_xy), puis inversez l'axe qui parcourt l'écran à l'envers (mirror_x / mirror_y). Le point logique (0, 0) de l'écran doit être en haut à gauche.

5. Réécrire la configuration du GT911 : en dernier recours

Le bloc de configuration commence à 0x8047. Pour le GT911, le pilote Linux le traite comme 186 octets :

  • Octet 0 (0x8047) : version de la configuration.
  • Octets 1–4 : résolution X et Y (voir étape 4).
  • Octet 5 (0x804C) : nombre maximal de points de contact, 4 bits de poids faible.
  • Octet 6 (0x804D) : type de déclenchement de l'interruption, 2 bits de poids faible.
  • Octet 184 (0x80FF) : checksum, complément à deux sur 8 bits de la somme des octets 0 à 183.
  • Octet 185 (0x8100) : config_fresh, qui doit valoir 1.

Le pilote Linux lui-même n'écrit une configuration que s'il dispose à la fois des GPIO INT et RST et trouve un fichier firmware (nom par défaut goodix_911_cfg.bin, ou le nom indiqué dans une propriété goodix,config-name). Sans ce fichier, il utilise la configuration déjà stockée dans la puce.

Avant d'écrire quoi que ce soit, lisez les 186 octets et sauvegardez-les. Corrigez la résolution et l'orientation par logiciel quand c'est possible. Un bloc de configuration conçu pour un autre panneau tactile peut désactiver le tactile sur le vôtre : procurez-vous donc le fichier auprès du fournisseur du panneau si vous devez vraiment le modifier.

Choisir un module tactile capacitif

Si vous choisissez un écran CTP pour une nouvelle conception, posez trois questions au fournisseur avant de commander des échantillons : quel contrôleur tactile il utilise, à quelle adresse I2C il est livré, et si INT et RST sont raccordées au connecteur. Envoyez-nous votre taille, votre interface et votre processeur hôte via Ask an Engineer, et nous joindrons ces trois réponses aux modules que nous vous suggérons.

Questions fréquentes

Quelle est l'adresse I2C du GT911 ?

Soit 0x5D, soit 0x14 (sur 7 bits). Le contrôleur échantillonne sa broche INT au relâchement du reset : INT à l'état bas sélectionne 0x5D, INT à l'état haut sélectionne 0x14. Les datasheets qui indiquent 0xBA/0xBB ou 0x28/0x29 donnent les mêmes adresses sous forme d'octets d'écriture/lecture sur 8 bits.

Pourquoi mon GT911 change-t-il d'adresse après un redémarrage ?

INT est flottante ou pilotée par autre chose au relâchement du reset, si bien que le contrôleur échantillone un niveau différent à chaque fois. Imposez INT à l'état bas (pour 0x5D) ou haut (pour 0x14) avant de relâcher RST, attendez plus de 5 ms, maintenez INT à l'état bas pendant 50 ms, puis repassez la broche en entrée. Si l'hôte ne peut pas piloter INT, scrutez les deux adresses.

Pourquoi n'obtiens-je qu'un seul toucher du GT911 ?

Après la lecture des données tactiles à 0x814E, écrivez 0 en 0x814E. Le driver goodix Linux et l'esp_lcd_touch_gt911 d'Espressif le font après chaque lecture ; un driver qui l'omet cesse généralement de détecter les nouveaux contacts.

Pourquoi les coordonnées tactiles du GT911 sont-elles mises à l'échelle ou décalées ?

Le GT911 rapporte les coordonnées dans la résolution stockée dans sa propre configuration (X en 0x8048, Y en 0x804A). Si elle diffère de celle de votre panneau, mettez les valeurs à l'échelle ou réglez x_max/y_max de votre driver sur la résolution du contrôleur, puis utilisez swap_xy et mirror_x/mirror_y pour l'orientation.

Le GT911 fonctionne-t-il sans la broche INT ?

Oui. Interrogez le registre d'état 0x814E au lieu d'utiliser une interruption. ESPHome interroge toutes les 50 ms par défaut quand aucun interrupt_pin n'est défini. Sans INT, l'hôte ne peut pas non plus choisir l'adresse : utilisez celle des deux adresses, 0x5D ou 0x14, qui répond.

Dois-je réécrire la configuration du GT911 ?

Uniquement en dernier recours. Lisez et sauvegardez d'abord le bloc existant de 186 octets à partir de 0x8047, privilégiez la correction de la résolution et de l'orientation par logiciel, et utilisez le fichier de configuration du fournisseur du panneau tactile si vous devez absolument en écrire un. Le bloc se termine par une somme de contrôle 8 bits en 0x80FF et un octet config_fresh en 0x8100 qui doit valoir 1.

Sources

  1. Noyau Linux : drivers/input/touchscreen/goodix.c
  2. Noyau Linux : drivers/input/touchscreen/goodix.h (adresses des registres)
  3. Noyau Linux : binding device-tree du tactile Goodix (goodix.yaml)
  4. Espressif ESP-BSP : code source du driver esp_lcd_touch_gt911
  5. Espressif ESP-BSP : en-tête esp_lcd_touch_gt911 (adresses I2C)
  6. ESPHome : écran tactile GT911
  7. ESPHome : composants écran tactile (transform, calibration)

Vous ne savez pas quel afficheur convient à votre conception ?

Envoyez-nous votre taille, interface et processeur hôte. Un ingénieur afficheur répond sous 12 heures avec 2 à 3 options, fiches techniques et code d’initialisation. Échantillons dès 1 pce.