Line 3:
Line 3:
= Contents =
= Contents =
−
Most of the data here is written once at the factory and never changed, but some fields are updated fairly frequently:
+
Most of the data here is only written once during manufacturing, but some fields are updated fairly frequently. Items listed as reserved are empty and not known to be used.
{| style="border: 1px solid #bbb; border-collapse: collapse; background-color: #eef; padding: 0.2em 0.2em 0.2em 0.2em;" border="1" cellpadding="2"
{| style="border: 1px solid #bbb; border-collapse: collapse; background-color: #eef; padding: 0.2em 0.2em 0.2em 0.2em;" border="1" cellpadding="2"
|- style="background-color: #ddd;"
|- style="background-color: #ddd;"
Line 18:
Line 18:
| 0x01A (0x0D * 2) || 0x06 bytes || Reserved
| 0x01A (0x0D * 2) || 0x06 bytes || Reserved
|-
|-
−
| 0x020 (0x10 * 2) || 0x04 bytes || PPC PVR
+
| 0x020 (0x10 * 2) || 0x0C bytes || [[#EspressoPackageInfo|EspressoPackageInfo]]
−
Should always be 0x70010201.
|-
|-
−
| 0x024 (0x12 * 2) || 0x06 bytes ||
+
| 0x02C (0x16 * 2) || 0x0C bytes || [[#LattePackageInfo|LattePackageInfo]]
−
|-
−
| 0x02A (0x15 * 2) || 0x02 bytes ||
−
|-
−
| 0x02C (0x16 * 2) || 0x02 bytes || OTP version code
−
|-
−
| 0x02E (0x17 * 2) || 0x02 bytes || OTP revision code
−
|-
−
| 0x030 (0x18 * 2) || 0x08 bytes || OTP version name string
|-
|-
| 0x038 (0x1C * 2) || 0x48 bytes || [[#BoardConfig|BoardConfig]]
| 0x038 (0x1C * 2) || 0x48 bytes || [[#BoardConfig|BoardConfig]]
Line 38:
Line 29:
This key is cleared by IOS-MCP.
This key is cleared by IOS-MCP.
|-
|-
−
| 0x0A0 (0x50 * 2) || 0x10 bytes || SHDD key
+
| 0x0A0 (0x50 * 2) || 0x10 bytes || SHDD seed
|-
|-
| 0x0B0 (0x58 * 2) || 0x10 bytes || IVS seed
| 0x0B0 (0x58 * 2) || 0x10 bytes || IVS seed
−
This seed is encrypted with a key from OTP then used to set the /dev/crypto USB key.
+
This seed is encrypted with the IVS key from OTP then used to set the /dev/crypto USB key.
−
The first 0x04 bytes of this key must match the Wii U DeviceId.
+
The first 0x04 bytes of this key must match the Wii U device ID.
|-
|-
| 0x0C0 (0x60 * 2) || 0x02 bytes || DriveConfig
| 0x0C0 (0x60 * 2) || 0x02 bytes || DriveConfig
−
If the flag is 0xFFFF, the drive key is set and encrypted with the Wii U SEEPROM key.
+
If the flag is 0x0000, the drive key is unencrypted.
−
If the flag is 0x0000, the drive key is set and in plain form.
+
If the flag is 0xFFFE, the drive key is empty.
+
If the flag is 0xFFFF, the drive key is encrypted with the SEEPROM key.
|-
|-
| 0x0C2 (0x61 * 2) || 0x02 bytes || IvsConfig
| 0x0C2 (0x61 * 2) || 0x02 bytes || IvsConfig
+
If the flag is 0x0010, real IVS should be used.
|-
|-
| 0x0C4 (0x62 * 2) || 0x02 bytes || ShddConfig
| 0x0C4 (0x62 * 2) || 0x02 bytes || ShddConfig
−
If the flag is 0xFFFF, the SHDD key is set and encrypted with a key from OTP.
+
If the flag is 0x0000, the SHDD seed is empty.
−
If the flag is 0x0000, the SHDD key is not set.
+
If the flag is 0xFFFF, the SHDD seed is encrypted with the SHDD key from OTP.
|-
|-
| 0x0C6 (0x63 * 2) || 0x6A bytes || Reserved
| 0x0C6 (0x63 * 2) || 0x6A bytes || Reserved
Line 66:
Line 59:
| 0x140 (0xA0 * 2) || 0x40 bytes || [[#SysProd|SysProd]]
| 0x140 (0xA0 * 2) || 0x40 bytes || [[#SysProd|SysProd]]
|-
|-
−
| 0x180 (0xC0 * 2) || 0x02 bytes ||
+
| 0x180 (0xC0 * 2) || 0x12 bytes || [[#ProdInfo|ProdInfo]]
−
|-
−
| 0x182 (0xC1 * 2) || 0x02 bytes ||
−
|-
−
| 0x184 (0xC2 * 2) || 0x02 bytes ||
−
|-
−
| 0x186 (0xC3 * 2) || 0x02 bytes ||
−
|-
−
| 0x188 (0xC4 * 2) || 0x02 bytes || Production date (year)
−
|-
−
| 0x18A (0xC5 * 2) || 0x02 bytes || Production date (month and day)
−
|-
−
| 0x18C (0xC6 * 2) || 0x02 bytes || Production date (hour and minute)
−
|-
−
| 0x18E (0xC7 * 2) || 0x04 bytes || CRC32 of the last 0x0E bytes
|-
|-
| 0x192 (0xC9 * 2) || 0x02 bytes || Always 0xAA55
| 0x192 (0xC9 * 2) || 0x02 bytes || Always 0xAA55
Line 108:
Line 87:
| 0x1B4 (0xDA * 2) || 0x08 bytes ||
| 0x1B4 (0xDA * 2) || 0x08 bytes ||
|-
|-
−
| 0x1BC (0xDE * 2) || 0x04 bytes ||
+
| 0x1BC (0xDE * 2) || 0x04 bytes || [[#StorageSize|StorageSize]]
|-
|-
−
| 0x1C0 (0xE0 * 2) || 0x30 bytes || [[#BootOsVer|BootOsVer]]
+
| 0x1C0 (0xE0 * 2) || 0x30 bytes || [[#BootParams|BootParams]]
|-
|-
| 0x1F0 (0xF8 * 2) || 0x10 bytes || Reserved
| 0x1F0 (0xF8 * 2) || 0x10 bytes || Reserved
+
|}
+
+
== EspressoPackageInfo ==
+
{| class="wikitable" border="1"
+
|-
+
! Offset || Size || Description
+
|-
+
| 0x0 || 0x4 || PpcPvr (0x70010201)
+
|-
+
| 0x4 || 0x6 || EspressoPackageId
+
|-
+
| 0xA || 0x2 ||
+
|}
+
+
== LattePackageInfo ==
+
{| class="wikitable" border="1"
+
|-
+
! Offset || Size || Description
+
|-
+
| 0x0 || 0x2 || LatteWaferX
+
|-
+
| 0x2 || 0x2 || LatteWaferY
+
|-
+
| 0x4 || 0x8 || [[Hardware/OTP#LattePackageId|LattePackageId]]
|}
|}
Line 134:
Line 137:
| 0xE || 0x2 || [[#bootSource|bootSource]]
| 0xE || 0x2 || [[#bootSource|bootSource]]
|-
|-
−
| 0x10 || 0x2 || ddr3Size
+
| 0x10 || 0x2 || [[#ddr3Size|ddr3Size]]
|-
|-
| 0x12 || 0x2 || ddr3Speed
| 0x12 || 0x2 || ddr3Speed
Line 202:
Line 205:
| 0x5333
| 0x5333
| S3 (SDIO3)
| S3 (SDIO3)
+
|}
+
+
=== ddr3Size ===
+
{| class="wikitable"
+
|-
+
! Value
+
! Description
+
|-
+
| 0x0800
+
| 2GB (Production/Test)
+
|-
+
| 0x1000
+
| 4GB (Development)
|}
|}
Line 211:
Line 227:
|-
|-
| 0x5521
| 0x5521
−
| U! (Micron?)
+
| U!
|}
|}
Line 239:
Line 255:
|-
|-
| 0x0007
| 0x0007
−
| GEN2-HDD (CAT-I with HDD)
+
| GEN2-HDD
|-
|-
| 0x0008
| 0x0008
−
| GEN1-HDD (CAT-I with HDD)
+
| GEN1-HDD
|}
|}
Line 261:
Line 277:
|-
|-
| 0x0004
| 0x0004
−
| EV board
+
| EV board (Evaluation)
|-
|-
| 0x0005
| 0x0005
Line 288:
Line 304:
| 0x4 || 0x2 || eeprom_version
| 0x4 || 0x2 || eeprom_version
|-
|-
−
| 0x6 || 0x2 ||
+
| 0x6 || 0x2 || Reserved
|-
|-
| 0x8 || 0x4 || game_region
| 0x8 || 0x4 || game_region
|-
|-
−
| 0xC || 0x4 ||
+
| 0xC || 0x4 || Reserved
|-
|-
| 0x10 || 0x4 || ntsc_pal
| 0x10 || 0x4 || ntsc_pal
Line 304:
Line 320:
| 0x20 || 0xC || serial_id
| 0x20 || 0xC || serial_id
|-
|-
−
| 0x2C || 0x4 ||
+
| 0x2C || 0x4 || Reserved
|-
|-
| 0x30 || 0x10 || model_number
| 0x30 || 0x10 || model_number
|}
|}
−
== BootOsVer ==
+
== ProdInfo ==
+
This 0x12-byte structure is only present in production/test units. For development units, this structure is left empty.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset || Size || Description
+
|-
+
| 0x0 || 0x4 || LotNumber
+
|-
+
| 0x4 || 0x4 || LotNumberEx (only available if [[#BoardConfig|boardRevision]] >= 0x0C)
+
|-
+
| 0x8 || 0x2 || ProdYear
+
|-
+
| 0xA || 0x2 || ProdMonthDay
+
|-
+
| 0xC || 0x2 || ProdHourMinute
+
|-
+
| 0xE || 0x4 || ProdInfoCrc (CRC32 over the previous 14 bytes)
+
|}
+
+
== StorageSize ==
+
{| class="wikitable"
+
|-
+
! Value
+
! Description
+
|-
+
| 0x1000
+
| 8GB (MLC)
+
|-
+
| 0x4000
+
| 32GB (MLC)
+
|-
+
| 0x14000
+
| 320GB (MION)
+
|}
+
+
== BootParams ==
This 0x30-byte structure is AES-128-ECB encrypted with the SEEPROM key.
This 0x30-byte structure is AES-128-ECB encrypted with the SEEPROM key.
Line 324:
Line 376:
| 0x8 || 0x4 || NandBank (value for overwriting the NAND_BANK register)
| 0x8 || 0x4 || NandBank (value for overwriting the NAND_BANK register)
|-
|-
−
| 0xC || 0x4 || ConfigCrc (CRC32 over the previous 12 bytes)
+
| 0xC || 0x4 || BootParamsCrc0 (CRC32 over the previous 12 bytes)
|-
|-
| 0x10 || 0x2 || Boot1Version0
| 0x10 || 0x2 || Boot1Version0
Line 332:
Line 384:
| 0x14 || 0x8 || Reserved
| 0x14 || 0x8 || Reserved
|-
|-
−
| 0x1C || 0x4 || Boot1Crc0 (CRC32 over the previous 12 bytes)
+
| 0x1C || 0x4 || BootParamsCrc1 (CRC32 over the previous 12 bytes)
|-
|-
| 0x20 || 0x2 || Boot1Version1
| 0x20 || 0x2 || Boot1Version1
Line 340:
Line 392:
| 0x24 || 0x8 || Reserved
| 0x24 || 0x8 || Reserved
|-
|-
−
| 0x2C || 0x4 || Boot1Crc1 (CRC32 over the previous 12 bytes)
+
| 0x2C || 0x4 || BootParamsCrc2 (CRC32 over the previous 12 bytes)
|}
|}
Line 350:
Line 402:
|-
|-
| 0-9
| 0-9
−
| CPU speed in MHz used for delay calculations.
+
| CPU speed in MHz used for delay calculations
|-
|-
| 10-14
| 10-14
−
| Value for delaying before checking if the SD boot combo has been pressed.
+
| Value for delaying before checking if the SD boot combo has been pressed
|-
|-
| 15
| 15
−
| Causes 0x3 to be written to LT_IOP2X which increases the ARM CPU clock multiplier.
+
| Causes 0x3 to be written to LT_IOP2X which increases the ARM CPU clock multiplier
|}
|}
Line 366:
Line 418:
|-
|-
| 0-7
| 0-7
−
| SD card clock divider.
+
| SD card clock divider
|-
|-
| 8-9
| 8-9
−
| Value for delaying before initializing the SD host controller.
+
| Value for delaying before initializing the SD host controller
|-
|-
| 10
| 10
−
| Enables SD card 4-bit bus through CMD55 (SD_APP_CMD) and CMD6 (SD_APP_SET_BUS_WIDTH).
+
| Enables SD card 4-bit bus through CMD55 (SD_APP_CMD) and CMD6 (SD_APP_SET_BUS_WIDTH)
|-
|-
| 11
| 11
−
| Enables using the supplied value for the SD card clock divider.
+
| Enables using the supplied value for the SD card clock divider
|-
|-
| 12
| 12
Line 381:
Line 433:
|-
|-
| 13
| 13
−
| Enables using the supplied value for overwriting NAND_BANK.
+
| Enables using the supplied value for overwriting NAND_BANK
|-
|-
| 14
| 14
−
| Enables using the supplied value for overwriting NAND_CONFIG.
+
| Enables using the supplied value for overwriting NAND_CONFIG
|-
|-
| 15
| 15
−
| Forces NAND to validate ECC data.
+
| Forces NAND to validate ECC data
|}
|}
[[Category:Hardware]]
[[Category:Hardware]]