Jetson EEPROM Layout¶
This topic describes the layout of EEPROM for NVIDIA® Jetson™ devices supported by this release of NVIDIA® Jetson™ Linux.
All numeric values are little-endian, i.e. the low-addressed byte contains the least significant digit and the high-addressed byte contains the most significant digit.
MAC addresses are also little-endian. For example, for the MAC address
00:04:4b:01:02:03, the low-addressed byte contains
high-addressed byte contains
A Jetson system has two EEPROMs, one on the module and one on the carrier board. Both EEPROMs are 256 bytes long, and they have similar formats. The following table describes the layout of both EEPROMs. The Notes column identifies the fields in which they differ.
|0||Major version number||
The EEPROM's major and minor version number. The version numbers are incremented for backward-incompatible changes. Software may parse EEPROM data only if both version numbers match between the software and the module. As of this writing, the values are:
|1||0x00||Minor version number|
|2–3||254||Length of module ID data starting from this field to the end of EEPROM data.|
|4-18||Reserved for future use or for NVIDIA internal use. Do not read or modify these bytes.|
|19||Number of Ethernet MAC addresses||
Orin only: Number of MAC addresses used by the platform for Ethernet interfaces. The boot software creates device tree nodes for this number of Ethernet interfaces and assigns them successive MAC addresses beginning with the default Gigabit Ethernet MAC address.
For example, if the Gigabit Ethernet MAC address is specified as 00:04:4b:00:00:00 and the number of additional Ethernet MAC addresses is 3, the software creates nodes for three Ethernet interfaces with addresses 00:04:4b:00:00:00, 00:04:4b:00:00:01, and 00:04:4b:00:00:02.
For customer-overwriteable Ethernet MAC addresses, the customer-overwriteable number of Ethernet MAC addresses is used instead.
Product part number, used for asset tracking.
In a module's EEPROM this field contains the module's part number; in a carrier board's EEPROM it contains the carrier board's part number. If you develop a custom carrier board, coordinate with NVIDIA to assign an appropriate value to this field.
The field contains 22 bytes of data, right-padded with
An example of a module part number is
The part number is subject to change without notice. However, in the event of a major change with customer impact, a PCN (Product Change Notification) will be issued.
NVIDIA default MAC addresses. The boot software builds device tree nodes for the WiFi, Bluetooth®, and gigabit Ethernet MAC addresses only if the customer-overwriteable MAC addresses are not valid. See the description of those addresses for more information. The secondary WiFi MAC address has no customer-overwriteable equivalent, so the boot software always builds a node for it if it is valid.
Product serial number, padded with
|89-149||Reserved for future use or for NVIDIA internal use. Do not read or modify these bytes.|
|Customer-overwritable section. You may modify or erase the fields in this section.|
If the value is
|154–155||28||Length of this structure from block signature to end (currently byte 177). Value is subject to change.|
Customer-overwriteable section's type signature; specifies the format of the following customer-overwriteable MAC addresses.
Customer-overwriteable section's version.
|160–165||Wi-Fi MAC address||
Customer-overwriteable MAC addresses.
If the type signature and version are valid, the boot software builds device tree nodes for these MAC addresses. A MAC address that is all-00 or all-FF indicates that the corresponding type of interface is not being used, and the boot software does not populate a node for it.
On Orin modules, the boot software may build nodes for more than one Ethernet MAC address, depending on the customer-overwriteable section's number of Ethernet MAC addresses.
If the customer-overwriteable section's type signature and version are not valid, the boot software uses the corresponding NVIDIA default MAC addresses and number of default Ethernet MAC addresses, with the same results.
|166–171||Bluetooth MAC address|
Gigabit Ethernet MAC address
(Starting MAC address of Ethernet interfaces on the system)
|178||Number of Ethernet MAC addresses||
Orin only: Specifies the number of customer-overwriteable Ethernet MAC addresses used. This field corresponds to the number of default Ethernet MAC addresses used. See that field for more information.
|179–199||Reserved for future use.|
Orin only: System-level part number.
In a carrier board that is sold as a component of a Jetson developer kit, this field contains the asset tracking number from the Jetson developer kit's system sticker.
In a module EEPROM or a custom board, this field is unused.
The field's value is a string in the format
Orin only: System serial number, padded with
|255||CRC-8 computed for bytes 0–254.|
Configuration of Vendor-Specified MAC Addresses¶
To configure the vendor-specified MAC addresses, use the following procedure.
If either of the “Verify” steps does not produce the expected result, the EEPROM has been corrupted or the device is malfunctioning. Identify and correct the problem before you proceed.
Read the EEPROM data from the 256-byte block at I2C bus 2, address
Verify the EEPROM’s CRC-8 checksum. Compute the checksum for bytes 0-254, using the procedure in Value of the CRC-8 Byte. The computed checksum should match the value in byte 255.
Verify that bytes 150-153 and 156-157 contain the signature values shown in the table above.
Update the MAC addresses in bytes 160-177 (see table). Remember that the MAC addresses are stored in little-endian order, the reverse of normal reading order.
Recompute the checksum, using the updated MAC addresses. Store the new checksum in byte 255.
Value of the CRC-8 Byte¶
The CRC is a single byte stored in byte 255, the byte of EEPROM. It is computed using the CRC-8 algorithm in the following sample.
def AddToCRC(b, crc): b2 = b if (b < 0): b2 = b + 256 for i in range(8): odd = ((b2^crc) & 1) == 1 crc >>= 1 b2 >>= 1 if (odd): crc ^= 0x8C # This means crc ^= 140. return crc
For each byte B of EEPROM content:
crc = AddToCRC(B, crc)