This is almost always a threshold (0x8105) issue. If set too low (e.g., <30), environmental noise triggers false touches. Increase to 120 and test.
The GT911 register map is not just a list of memory locations—it is the control panel for one of the most versatile touch controllers on the market. By mastering registers like 0x8009 for status, 0x8010 for coordinates, 0x8040 for gestures, and the extensive 0x8100 configuration block, you can unlock the full potential of your touch interface.
Whether you are tuning thresholds for a glove-friendly industrial panel, enabling gesture controls for a smart home device, or simply trying to get your DIY display to work, the register map is your roadmap. Always remember the golden rules: reset with INT low, write configs at address 0x14, and clear the status register after every read. With this guide, you are now equipped to handle any GT911 integration challenge.
is a popular 5-point capacitive touch controller that communicates via
. Understanding its register map is essential for configuring the screen, handling touch events, and reading coordinates. Key Hardware Details I2C Addresses: The chip supports two addresses, (default) or , depending on the state of the pin during power-on. Essential Pins: VDD, GND, SCL, SDA, (touch event interrupt), and Crystalfontz Core Register Map Highlights The register addresses are
allows for continuous reading; it will automatically increment the address after each byte is sent STMicroelectronics Community GOODiX GT911 Programming Guide 2014-08-04_Rev.00
The GT911 register map is a 16-bit addressing scheme used to configure and read data from the Goodix GT911 capacitive touch controller. This high-performance IC supports up to 5-point multi-touch and communicates with a host processor via a standard I2C interface with speeds up to 400 kHz. GT911 Register Map Overview
The register map is organized into functional blocks ranging from real-time commands to coordinate data reporting. Register Range Description Access Type 0x8040 – 0x8046 Command and Status Read/Write (R/W) 0x8047 – 0x80FF Configuration Data Read/Write (R/W) 0x8100 – 0x813F Coordinate Data Read-Only (R) 0x8140 – 0x814E Product ID and Information Read-Only (R) Key Register Descriptions 1. Command Register (0x8040)
This register is used to send operational commands to the GT911. Common commands include: 0x00: Read coordinates status. 0x05: Screen off mode.
0x08: Enter Gesture mode (must be preceded by a write to 0x8046).
0xAA: ESD protection mechanism; drivers should write this value and check it regularly to ensure the chip hasn't reset due to electrostatic discharge. 2. Configuration Registers (0x8047 – 0x80FF) gt911 register map
These registers define how the touch sensor behaves. They are typically written once during initialization.
Resolution (0x8048 – 0x804B): Sets the X and Y axis maximum coordinates. For example, a screen can be configured for depending on these values.
Touch Threshold (0x804D): Determines the sensitivity required to register a touch.
Config Checksum (0x80FF): A vital byte used to validate the entire configuration block. If the checksum is incorrect, the GT911 may ignore the new settings. 3. Coordinate Data (0x8100 – 0x813F) This block reports live touch events.
Status Register (0x814E): The first byte indicates how many touch points are currently detected (bits 0-3) and if new data is ready (buffer status bit 7).
Point Data: Each touch point follows with 6 bytes of data, including Track ID and X/Y coordinates. I2C Communication Protocols
The GT911 uses a 16-bit register address, sent as two 8-bit bytes (High byte then Low byte). 3. Register Map
The Goodix GT911 Go to product viewer dialog for this item. is a popular 5-point capacitive touch controller used in various small-to-medium-sized displays for automotive, mobile, and DIY electronics. Interfacing with this chip requires communicating via I2C and interacting with its structured internal memory known as the Register Map. Core Communication Basics
uses a standard I2C interface with a 16-bit register address.
Slave Address: Commonly 0x5D or 0x14, depending on how the INT pin is pulled during reset. This is almost always a threshold ( 0x8105 ) issue
Register Addressing: Always send two bytes for the register address (High byte then Low byte) before reading or writing data.
Auto-Increment: The chip automatically increments the register address, allowing you to read multiple touch points in a single session. Register Map Summary
The register map is divided into functional blocks. Below are the primary addresses you will need for basic driver development.
| Address Range | Function Block | Key Registers & Details |
| :--- | :--- | :--- || 0x8040 | Command | Writing 0x00 (read coordinates), 0x01 (read raw data), or 0x05 (screen off). || 0x8047 – 0x813F | Configuration | Settings for resolution, touch thresholds, and sensor orientation. || 0x8140 – 0x8143 | Product ID | Reads as ASCII "911" or "9111" to verify chip identity. || 0x814E | Status | Critical: Bit 7 (Buffer Status) indicates new touch data is ready. Writing 0 here clears the flag. || 0x814F – 0x8156 | Touch 1 Data | Contains Track ID, X-coordinate (Low/High), Y-coordinate, and Size. || 0x8157 – 0x81FF | Touch 2–5 Data | Subsequent blocks (8 bytes each) for the remaining touch points. | The Reading Workflow
To retrieve touch coordinates reliably, you should follow this sequence according to the GT911 Programming Guide:
Wait for Interrupt: Monitor the INT pin or poll the Status Register (0x814E) until Bit 7 becomes 1.
Read Point Count: The lower 4 bits of register 0x814E tell you how many fingers (0–5) are currently on the screen.
Fetch Coordinates: Read the coordinate registers for each active point. For example, Point 1's X-coordinate is at 0x8150 (Low) and 0x8151 (High).
Clear Status: Write 0x00 back to register 0x814E. If you skip this, the chip will not update the buffer with new data. Implementation Resources Just when the community thought they had the
If you are developing for specific platforms, these verified libraries and guides can save hours of debugging: 3. Register Map
Just when the community thought they had the map memorized, Goodix released an update. The chip was now labeled GT9110 (sometimes called the "Red" series firmware).
The register map changed. The configuration offset 0x6A (which previously set the number of touch points) moved. The checksum calculation method changed. Suddenly, old drivers broke.
This forced the open-source community (particularly contributors to the Linux Kernel and projects like ESP32 Arduino core) to write "auto-detect" routines. The code had to probe the registers, trying to read the "Goodix" ID (GT911, GT9110, etc.) stored in the read-only memory area (around 0x8140 to 0x8143) to decide which map to use.
| Start Addr | Size | Description | |------------|------|-------------| | 0x8040 | 1 | Config checksum | | 0x8041 | 1 | Config version number | | 0x8042 | 184 | Main configuration block (touch thresholds, XY mapping, etc.) |
The GT911 loads its working configuration from internal flash at boot. You can override it by writing to 0x8040–0x80FF then sending the "update config" command.
0x8141 — Number of touch points (n) (1 byte).
0x8142–0x8151 — Touch data block for point 1..n (6–8 bytes each), repeated per point:
Example: for point i, offset = 0x8143 + (i-1)*8 (confirm per device).
The GT911 communicates over I2C. Two common addresses exist:
The device uses 16-bit register addresses. This means any I2C transaction requires sending a 2-byte address (high byte first) before reading or writing data.