−Table of Contents
PMIC
The gamepad's power management IC is a Texas Instruments SN1010007. So far no datasheet has been found.
It is connected to the UIC's I2C bus, where its device ID is 0x48.
Pinout
Pin | Desc. |
---|---|
1 | ?? |
2 | ?? |
3 | ?? |
4 | ?? |
5 | Battery pin 1 (red) |
6 | Battery pin 1 (red) |
7 | ?? |
8 | ?? |
9 | ?? |
10 | 4.75V input from AC adapter |
11 | Battery pin 2 (gray) (through 510ohm resistor) |
12 | ?? |
13 | ?? |
14 | ?? |
15 | ?? |
16 | ?? |
17 | Ground |
18 | ?? |
19 | Vcc1 - 3.2V (UIC voltage?) |
20 | Vcc1 feedback |
21 | ?? |
22 | Vcc2 feedback |
23 | Vcc2 - 1.24V (SoC core voltage) |
24 | Power button output - to UIC pin 64 |
25 | Power button |
26 | CPU/etc active - to UIC pin 19 |
27 | UIC I2C - SDA |
28 | UIC I2C - SCL |
29 | Vcc3 - 2.8V output for peripherals (CPU, Flash, etc) |
30 | Ground |
31 | Vcc3 feedback |
32 | ?? |
33 | ?? |
34 | ?? |
35 | ?? |
36 | ?? |
37 | ?? |
38 | ?? |
39 | ?? |
40 | System active? - to UIC pin 17, with 100k pull-up resistor |
41 | ?? |
42 | Ground |
43 | Battery pin 4 (white) |
44 | ?? |
45 | ?? |
46 | ?? |
47 | ?? |
48 | ?? |
The gamepad is rated for 4.75V 1.6A. In practice, the PMIC accepts an input voltage of up to 5.2V (as often delivered by third-party AC adapters) without problem. This makes USB chargers a viable substitute for the proprietary AC adapter, as long as they can deliver enough current.
I2C communications
Communications to the PMIC always start by writing one byte, which is likely a register ID/address. Then further bytes are written or read in order to access the registers themselves.
The UIC firmware has code for accessing the following registers:
Register | Description |
---|---|
0x01 | Charge status – bit6=AC, bit7=USB (1=connected) |
0x02 | ?? |
0x03 | ?? |
0x04 | ?? |
0x06 | ?? |
0x07 | ?? |
0x08 | ?? – seemingly accessed after 0x07 |
0x09 | Battery level LSB (format/bounds unknown) |
0x0A | Battery level MSB |
0x0D | ?? |
0x0F | ?? |
0x18 | Backlight related – 0x90=on 0x10=off |
0x19 | Backlight related – maybe timeout/delay? |
Which battery level is read out of registers 0x09/0x0A seems to depend on settings in register 0x07.
Writes to register 0x07 (and 0x08):
90 06 - to turn on the CPU
D9 - to read current battery level
D0 - to read maximum battery level
D5 - ?? to read minimum battery level?? (unused)
00 07 - to turn off the CPU
Seems register 0x0D is set to 0xA0 after turning the CPU on/off?
Bit 5 in register 0x07 is some sort of ready bit that is checked after changing register 0x07 and before reading battery levels.