The UIC's EEPROM occupies address range 0x1000..0x17FF. (TODO: maybe it occupies more?)
The first 256 bytes are used internally, while the rest is used for user data storage.
https://bitbucket.org/memahaxx/libdrc/src/master/src/device-config.cpp for more info.
| Address | Length | Description |
|---|---|---|
| 0x1010 | 2 | Firmware install status – set to A5 5A when a firmware is installed |
| 0x1012 | 1 | ?? |
| 0x1013 | 1 | LED status when no firmware installed – 1=red 2=amber 0/x=none |
| – | – | – |
| 0x1101 | 32 | Wifi SSID (WiiUxxxx…) |
| 0x1121 | 1 | Wifi SSID length |
| 0x1122 | 1 | Wifi auth type0 = open 1 = shared key (?) |
| 0x1123 | 1 | Wifi auth mode0x00 = disabled 0x01 = none 0x04 = WPA 0x80 = WPA2 |
| 0x1124 | 1 | Wifi encryption0 = none 1 = WEP 2 = TKIP 3 = AES |
| 0x1125 | 64 | Wifi passphrase |
| 0x1165 | 1 | Wifi passphrase length |
| 0x1166 | 2 | Wifi country code |
| 0x116B | 2 | CRC16 over 0x1101..0x116A |
| 0x116D | 16 | WoWL key |
| 0x117F | 6 | WoWL MAC |
| 0x1187 | 1 | WoWL setting (?) |
| 0x118A | 1 | Last wifi channel |
| – | – | – |
| 0x11FD | 1 | Layout of page 1 (should be 3) |
| 0x11FE | 2 | CRC16 over 0x11FD |
| – | – | – |
| 0x1200 | 1 | Board info 1 |
| 0x1201 | 2 | CRC16 over 0x1200 |
| 0x1203 | 1 | Region info 1 |
| 0x1204 | 2 | CRC16 over 0x1203 |
| 0x1206 | 1 | Board config 1 |
| 0x1207 | 2 | CRC16 over 0x1206 |
| 0x121A | 2 | Volume calibration 1 |
| 0x121C | 2 | CRC16 over 0x121A..0x121B |
| 0x121E | 12 | Accelerometer calibration 2 |
| 0x122A | 2 | CRC16 over 0x121E..0x1229 |
| 0x122C | 19 | Gyroscope calibration 1 |
| 0x123F | 2 | CRC16 over 0x122C..0x123E |
| 0x1253 | 16 | Touchscreen calibration 2 |
| 0x1263 | 2 | CRC16 over 0x1253..0x1262 |
| 0x1265 | 4 | Service version 2 |
| 0x1269 | 2 | CRC16 over 0x1265..0x1268 |
| – | – | – |
| 0x1280 | 1 | Board info 2 |
| 0x1281 | 2 | CRC16 over 0x1280 |
| 0x1283 | 1 | Region info 2 |
| 0x1284 | 2 | CRC16 over 0x1283 |
| 0x1286 | 1 | Board config 2 |
| 0x1287 | 2 | CRC16 over 0x1286 |
| 0x129A | 2 | Volume calibration 2 |
| 0x129C | 2 | CRC16 over 0x129A..0x129B |
| 0x129E | 12 | Accelerometer calibration 3 |
| 0x12AA | 2 | CRC16 over 0x129E..0x12A9 |
| 0x12AC | 19 | Gyroscope calibration 1 |
| 0x12BF | 2 | CRC16 over 0x12AC..0x12BE |
| 0x12D3 | 16 | Touchscreen calibration 3 |
| 0x12E3 | 2 | CRC16 over 0x12D3..0x12E2 |
| 0x12E5 | 4 | Service version 3 |
| 0x12E9 | 2 | CRC16 over 0x12E5..0x12E8 |
| – | – | – |
| 0x12FD | 1 | Layout of page 2 (should be 5) |
| 0x12FE | 2 | CRC16 over 0x12FD |
| – | – | – |
| 0x1300 | 1 | Language |
| 0x1301 | 2 | CRC16 over 0x1300 |
| 0x1303 | 1 | Opening screen index |
| 0x1304 | 2 | CRC16 over 0x1303 |
| 0x1306 | 1 | Development mode setting |
| 0x1307 | 2 | CRC16 over 0x1306 |
| 0x1313 | 12 | Accelerometer calibration 1 |
| 0x131F | 2 | CRC16 over 0x1313..0x131E |
| 0x1344 | 16 | Touchscreen calibration 1 |
| 0x1354 | 2 | CRC16 over 0x1344..0x1353 |
| 0x1356 | 1 | Language bank index |
| 0x1357 | 2 | CRC16 over 0x1356 |
| 0x1359 | 1 | Language version (together with CRC16 bytes) |
| 0x135C | 4 | Remote control data version |
| 0x1360 | 2 | CRC16 over 0x135C |
| 0x1362 | 4 | Service version 1 |
| 0x1366 | 2 | CRC16 over 0x1362..0x1365 |
| 0x1368 | 4 | Opening screen 1 version |
| 0x136C | 2 | CRC16 over 0x1368..0x136B |
| 0x136E | 4 | Opening screen 2 version |
| 0x1372 | 2 | CRC16 over 0x136E..0x1371 |
| 0x1374 | 1 | Initial boot flag (?) |
| 0x1375 | 2 | CRC16 over 0x1374 |
| 0x1377 | 13 | LCD brightness levels |
| 0x1384 | 2 | CRC16 over 0x1377..0x1383 |
| 0x1386 | 1 | LCD brightness setting |
| 0x1387 | 2 | CRC16 over 0x1386 |
| 0x1389 | 5 | Remote control ID 1 |
| 0x138E | 5 | Remote control ID 2 |
| 0x1393 | 2 | CRC16 over 0x1389..0x1392 |
| 0x1396 | 1 | Airwave setting |
| 0x1397 | 2 | CRC16 over 0x1396 |
| – | – | – |
| 0x13FD | 1 | Layout of page 3 (should be 4) |
| 0x13FE | 2 | CRC16 over 0x13FD |
| – | – | – |
| 0x1400 | 256 | ??? |
| 0x1500 | 2 | CRC16 over 0x1400-0x14FF |
| – | – | – |
| 0x1580 | 256 | ??? |
| 0x1680 | 2 | CRC16 over 0x1580-0x167F |
Data is stored in little-endian order.
When multiple regions exist for a given information (for example, board info), the first region with a correct CRC16 is selected.
Bit 0-3 of the board info value are the main version, while bit 4-7 are the sub version.
Main version:
Sub version:
Value is 0x15 for retail boards.
If bit0-1 are any value other than 1, the gamepad will enter service mode upon boot.
(0-3 = America, 4-11 = Europe)
| Offset | Length | Description |
|---|---|---|
| 0x00 | 1 | Minimum volume |
| 0x01 | 1 | Maximum volume |
The minimum and maximum values are used to cap the reading from the volume slider within an acceptable range.
TODO: detail how that reading is converted to the final volume setting passed to the audio amplifier
| Offset | Length | Description |
|---|---|---|
| 0x00 | 3 | Zero X |
| 0x03 | 3 | Zero Y |
| 0x06 | 3 | Zero Z |
| 0x09 | 3 | Rotation X |
| 0x0C | 3 | Rotation Y |
| 0x0F | 3 | Rotation Z |
| 0x12 | 1 | Speed |
| Offset | Length | Description |
|---|---|---|
| 0x00 | 2 | 0G X |
| 0x02 | 2 | 0G Y |
| 0x04 | 2 | 0G Z |
| 0x06 | 2 | 1G X |
| 0x08 | 2 | 1G Y |
| 0x0A | 2 | 1G Z |
| Offset | Length | Description |
|---|---|---|
| 0x00 | 2 | Point 1 screen X |
| 0x02 | 2 | Point 1 screen Y |
| 0x04 | 2 | Point 2 screen X |
| 0x06 | 2 | Point 2 screen Y |
| 0x08 | 2 | Point 1 raw X |
| 0x0A | 2 | Point 1 raw Y |
| 0x0C | 2 | Point 2 raw X |
| 0x0E | 2 | Point 2 raw Y |
Raw coordinates are 12-bit TSC readings, while screen coordinates are their corresponding values in pixels.
Observed screen coordinates are: 53,30 802,451
| Offset | Length | Description |
|---|---|---|
| 0x00 | 1 | Level 0 brightness level (setting A) |
| 0x01 | 1 | Level 0 frequency (setting B) |
| 0x02 | 1 | Level 1 brightness level |
| 0x03 | 1 | Level 1 frequency |
| 0x04 | 1 | Level 2 brightness level |
| 0x05 | 1 | Level 2 frequency |
| 0x06 | 1 | Level 3 brightness level |
| 0x07 | 1 | Level 3 frequency |
| 0x08 | 1 | Level 4 brightness level |
| 0x09 | 1 | Level 4 frequency |
| 0x0A | 1 | Level 5 brightness level |
| 0x0B | 1 | Level 5 frequency |
| 0x0C | 1 | Threshold level |
This table maps 6 predefined brightness levels to their adequate LCD parameters. See the LCD page for information as to how these settings are used.