Skip to content

SEEPROM

SEEPROM is a serial EEPROM accessed through GPIO. boot1 uses it for version records and IOS reads it for console certificate data.

GPIO connection

Address Width Access Name Purpose
0x0D8000E0 32 bits R/W HW_GPIO1OUT Chip select, clock and outgoing data
0x0D8000E8 32 bits R HW_GPIO1IN Incoming data
Register Bits Name Description
HW_GPIO1OUT 10 Chip select High during a transfer
HW_GPIO1OUT 11 Clock Serial clock
HW_GPIO1OUT 12 Data out Data sent to SEEPROM
HW_GPIO1IN 13 Data in Data received from SEEPROM

For each outgoing bit, they lower the clock, assert chip select and set the data output before raising the clock. For each incoming bit, they lower the clock, assert chip select and raise the clock before sampling the input. They end a transfer by clearing chip select and issuing two clock pulses, leaving the clock low.

Firmware commands

Operation Command Following transfer
Read word 11 bits: 0x600 OR word_address Receive 16 bits
Write word 11 bits: 0x500 OR word_address Send 16 bits
Enable writes 11 bits: 0x4C0 None
Disable writes 11 bits: 0x400 None

IOS enables writes before writing a record and disables them afterwards. After each word write, it ends the transfer then polls the input in groups of 10 bits. The last bit of each group indicates readiness. It ends the polling transfer when that bit is 1 or the retry limit is reached.

Certificate data

IOS reads the following fields for the console certificate. Offsets are byte offsets within SEEPROM. Integer fields are big-endian.

Offset Size Contents
0x00 4 bytes MS identifier
0x04 4 bytes CA identifier
0x08 4 bytes NG key identifier
0x0C 60 bytes NG certificate signature

The MS and CA identifiers form the certificate issuer components. The NG device identifier comes from OTP, separately from the NG key identifier stored here. See IOS certificate identity.

boot1's version records begin at byte offset 0x48.