Gt911 Register: Map

GT911 Touch Controller: Complete Register Map

The GT911 (by Goodix) is a 5-point capacitive touch controller commonly found in displays (LCDs, LVDS, HDMI panels). Understanding its register map is key for debugging, calibration, or bare-metal drivers.

Touch/status registers

  • 0x814E / 0x814F onward — Product ID string (length varies).

  • 0x8140 (also part of config) — see above.

  • 0x814E sometimes used for firmware/product ID; implementations vary — read product ID to confirm.

  • 0x8140 family overlaps with config; primary touch data region is below: gt911 register map

  • 0x8140 family confusion aside, main runtime touch/status are under 0x8140 or 0x814E on many modules; however Goodix commonly documents:

  • 0x8140 — Status/interrupt register (1 byte):

    • Bit0 = 1 indicates new touch data available (clear by reading register and writing 0).
    • Bits indicate gesture/points count in some firmwares.
  • 0x8141 — Number of touch points (n) (1 byte).

  • 0x8142–0x8151 — Touch data block for point 1..n (6–8 bytes each), repeated per point: GT911 Touch Controller: Complete Register Map The GT911

    • Byte0: Event flag (0=down,1=up,2=contact,3=reserved)
    • Byte1: Touch ID (0..F)
    • Byte2: X coordinate low byte
    • Byte3: X coordinate high byte
    • Byte4: Y coordinate low byte
    • Byte5: Y coordinate high byte
    • Byte6: Size/pressure (optional)
    • (Layout can be 8 bytes per point on newer firmwares)
  • Example: for point i, offset = 0x8143 + (i-1)*8 (confirm per device).

Chapter 5: The "Key" and the Lock

Perhaps the most dramatic entry in the register map is the Write Key.

Engineers discovered they couldn't just write to the configuration registers. The chip would ignore them. Through reverse engineering, they found a "safety lock."

  • To write config data, you first had to write specific magic numbers to a specific register (often discovered to be two consecutive writes to 0x8040 or similar depending on firmware version).
  • This was the equivalent of inserting a key to unlock the firmware update mode. Without this sequence in the map, the GT911 was immutable.

3. Gesture & Status Registers

| Register | R/W | Description | |-----------|-----|-------------| | 0x8100 | R | Gesture ID (0 = no gesture, 0x01 = move up, 0x02 = move down, etc.) | | 0x8101 | R | Number of touch points (0–5) | | 0x8102 | R | Large touch indicator / proximity | | 0x8103 | R | Reserved | 0x814E / 0x814F onward — Product ID string

Pro tip: Poll 0x8101 first. If it returns >0, then read the touch data.

Part 1: Understanding the I²C Foundation

Before exploring the registers, you must understand the GT911's dual I²C addressing scheme.

  • Normal Address (Write): 0x5D (7-bit)
  • Alternate Address (Write): 0x14 (7-bit) Used after a hardware reset sequence to enter configuration mode.

The GT911 contains two logical spaces:

  1. Information Registers (Read-Only): Product ID, firmware version, status.
  2. Configuration Registers (Read/Write): Thresholds, debounce, gain, screen resolution, touch mapping.

A critical nuance: The GT911 cannot be configured while actively reporting touches. The standard workflow is:

  1. Hardware Reset (Pull INT low, then RESET low/high).
  2. Write configuration data to address 0x14.
  3. Send a "soft reset" command.
  4. Change I²C address back to 0x5D for normal operation.