−Table of Contents
UIC EEPROM structure
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.
Board info
Bit 0-3 of the board info value are the main version, while bit 4-7 are the sub version.
Main version:
- 0 = DK1
- 1 = EP_DK2
- 2 = DP1
- 3 = DP2
- 4 = DK3
- 5 = DK4
- 6 = DP3
- 7 = DK5
- 8 = DP4
- 9 = DKMP
- 10 = DP5
- 11 = MASS
- 12 = DKMP2
- 13 = DRC_I
Sub version:
- 0 = DK1_EP_DK2
- 1 = DP1_DK3
- 2 = DK4
- 3 = DP3
- 4 = DK5
- 5 = DP4
- 6 = DKMP
- 7 = DP5
- 8 = MASS
- 9 = DKMP2
- 10 = DRC_I
Region info
- 0 = Japan
- 1 = North America
- 2 = Europe
- 3 = China
- 4 = South Korea
- 5 = Taiwan
- 6 = Australia
Board config
Value is 0x15 for retail boards.
If bit0-1 are any value other than 1, the gamepad will enter service mode upon boot.
Language
(0-3 = America, 4-11 = Europe)
- 0 = English
- 1 = French
- 2 = Spanish
- 3 = Portuguese
- 4 = English
- 5 = French
- 6 = Spanish
- 7 = Portuguese
- 8 = Dutch
- 9 = Italian
- 10 = German
- 11 = Russian
- 12 = Japanese
- 13 = Chinese (simplified)
- 14 = Korean
- 15 = Chinese (traditional)
Volume calibration
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
Gyroscope calibration
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 |
Accelerometer calibration
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 |
Touchscreen calibration
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
LCD brightness levels
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.