In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Difference between revisions of "Hardware/OTP"

From WiiBrew
Jump to navigation Jump to search
Line 6: Line 6:
 
| bits = 32
 
| bits = 32
 
}}
 
}}
{| border="1"
+
 
! address    !! description
+
== General ==
 +
The '''o'''ne '''t'''ime '''p'''rogrammable memory is used to store 32 4byte words. It is programmed sometimes during the factory process and can never be changed afterwards. Next to the Wii's shared and public keys it also contains a random number generation seed and the boot1 hash which basically makes it impossible for us to change boot1.
 +
 
 +
== Register List ==
 +
{{reglist|Hollywood GPIOs}}
 +
{{rla|0x0d8001ec|32|HW_OTP_COMMAND|OTP command}}
 +
{{rla|0x0d8001f0|32|HW_OTP_DATA|OTP data}}
 +
|}
 +
 
 +
== Register descriptions ==
 +
{{regsimple|HW_OTP_COMMAND|addr=0x0d8001ec|bits=32|access=R/W}}
 +
This register contains the command sent to the OTP. Reading data is 0x8000_00aa where aa is the address of the 4byte word you want to read. It is unknown whether is register is also used during the factory process to program the OTP.
 +
 
 +
----
 +
{{regsimple|HW_OTP_DATA|addr=0x0d8001f0|bits=32|access=R/W}}
 +
This register contains the output data for the last issued OTP command. Changes of the HW_OTP_COMMAND register directly change this register without any delays.
 +
----
 +
 
 +
== OTP Contents ==
 +
The following things are stored inside the OTP:
 +
{| 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;"
 +
! Address
 +
! Description
 
|-
 
|-
||0x0D8001EC || OTP read address (addresses run from 0x80000000..0x8000001F)
+
| 0-4 || Boot1 hash
 
|-
 
|-
||          || 0x80000000 - 0x80000004 stores 20 bytes boot1 SHA-1 hash
+
| 5-8 || common key
 
|-
 
|-
||           || 0x80000005 - 0x80000008 common key
+
| 9 || NG id
 
|-
 
|-
||           || 0x80000009 NG id
+
| a-10 || NG private key
 
|-
 
|-
||           || 0x8000000a - 0x80000010 NG private
+
| 11-15 || NAND HMAC
 
|-
 
|-
||           || 0x80000011 - 0x80000015 NAND HMAC
+
| 16-19 || NAND key
 
|-
 
|-
||           || 0x80000016 - 0x80000019 NAND AES
+
| 1a-1d || RNG key
 
|-
 
|-
||           || 0x8000001A - 0x8000001D RNG key
+
| 1e-1f || Unknown
 
|-
 
|-
||0x0D8001F0 || OTP data         
 
 
|}
 
|}
 
{{hwstub}}
 
{{hwstub}}

Revision as of 12:10, 28 February 2009

OTP
Hollywood Registers
Access
BroadwayNone
StarletFull
Registers
Base0x0d8001ec
Length0x8
Access size32 bits
Byte orderBig Endian
This box: view  talk  edit

General

The one time programmable memory is used to store 32 4byte words. It is programmed sometimes during the factory process and can never be changed afterwards. Next to the Wii's shared and public keys it also contains a random number generation seed and the boot1 hash which basically makes it impossible for us to change boot1.

Register List

Hollywood GPIOs
Address Bits Name Description
0x0d8001ec 32 HW_OTP_COMMAND OTP command
0x0d8001f0 32 HW_OTP_DATA OTP data

Register descriptions

HW_OTP_COMMAND (0x0d8001ec)
  310
Access R/W

This register contains the command sent to the OTP. Reading data is 0x8000_00aa where aa is the address of the 4byte word you want to read. It is unknown whether is register is also used during the factory process to program the OTP.


HW_OTP_DATA (0x0d8001f0)
  310
Access R/W

This register contains the output data for the last issued OTP command. Changes of the HW_OTP_COMMAND register directly change this register without any delays.


OTP Contents

The following things are stored inside the OTP:

Address Description
0-4 Boot1 hash
5-8 common key
9 NG id
a-10 NG private key
11-15 NAND HMAC
16-19 NAND key
1a-1d RNG key
1e-1f Unknown