Let’s talk about Register 0x804C (Config Register #6). Bit 2 is the "Swap XY" bit. In a sane world, you set it to 1, the axes swap. In the GT911 world? It works, but it also affects the screen resolution registers (0x8048 and 0x804A).
If you hard-code a swap, but forget to swap your width/height registers, the touch point will be a mirror image across the diagonal. It’s a riddle wrapped in an enigma. The register map is logically laid out, but the interdependence of these bytes feels like a puzzle box.
If you want, I can produce a device-specific register map for your GT911 module—tell me the Product ID string or share the module's PCB markings. gt911 register map
(Invoking related search terms.)
The story of the GT911 Register Map is not a story of a single document, but a tale of reverse engineering, evolving firmware, and the democratization of touch technology. Let’s talk about Register 0x804C (Config Register #6)
It begins around the early 2010s. Capacitive touchscreens were transitioning from luxury items (like the original iPhone) to standard components in consumer electronics. Goodix, a Chinese semiconductor company, released the GT911—a capacitive touch controller that was powerful, responsive, and significantly cheaper than competitors like FocalTech or Cypress.
However, Goodix operated under a strict "NDA-only" policy for their datasheets. The official register map was a guarded secret, available only to large manufacturers. This is the story of how that map was drawn. In the GT911 world
Each touch point uses 6 bytes (TrackID + coordinates + size)
| Byte offset | Field | |-------------|-------| | +0 | Track ID | | +1 | X coordinate (low byte) | | +2 | X coordinate (high byte) | | +3 | Y coordinate (low byte) | | +4 | Y coordinate (high byte) | | +5 | Touch area (size/pressure) |
Example for Touch 1: 0x8052 to 0x8057
Touch 2: 0x8058 to 0x805D ... up to touch 5.