About the Motherboard and Daughtercard EEPROM on USRP Devices

From Ettus Knowledge Base
Revision as of 08:50, 5 August 2020 by MichaelDickens (Talk | contribs) (make the history a comment; please keep it updated!)

Jump to: navigation, search

Application Note Number

AN-309

USRP EEPROM Settings & Recovery Guide

Some USRP products contain an EEPROM on the motherboard which is used to store information about the USRP. Currently, the N200/210, X300/310, B200/210, and E100 contain an on-board EEPROM. The EEPROM contains information about each USRP such as product code, revision number, USRP name, and IP address. The specific information stores on each USRP EEPROM is dependent on the USRP model.

Daughter boards also contain an EEPROM that contains identification information about the daughter board. UHD reads the daughter board ID to determine the model and revision (if applicable) of the daughter board. This information is used to properly configure the USRP and daughter board for proper function.

EEPROM Burn Utility

Disclaimer: Ettus Research accepts no liability for misuse of this utility. It can very easily cause irreversible damage if used incorrectly! Please contact Ettus support at support@ettus.com if you are unsure how to proceed.

A utility, usrp_burn_mb_eeprom, is included with UHD to read/write values on the various motherboards that contain an EEPROM. The utility is located in the UHD install directory. The default folder is:

/usr/local/lib/uhd/utils/

The utility can be used with the USRP X300/310, N200/210, B200/210, and E100. In some cases, it is necessary to use the utility to write custom user settings to the USRP, such as USRP name or IP address. In other cases, some EEPROM settings set by the factory may become corrupted and need to be restored. This section will cover basic usage of the usrp_burn_mb_eeprom utility, with USRP specific instructions covered in the sections below.

EEPROM settings can be read using the usrp_burn_mb_eeprom utility. All the EEPROM settings can be read at once using the 'read all' option:

./usrp_burn_mb_eeprom --args=<optional device args> --read-all

This will return the current contents in the EEPROM for the specified USRP. For example, if you want to read all the EEPROM contents for a USRP B210, the command would look like:

./usrp_burn_mb_eeprom --args="type=b200" --read-all 

The EEPROM settings vary based on the specific USRP in use. The following sections document the EEPROM settings available for each USRP. Examples for each USRP with an EEPROM are also given.

X300/310 EEPROM

The EEPROM on the X300/310 stores useful information about the USRP so that UHD can set the proper settings based on model and revision. Some of these settings are user customizable. The table below outlines the values stored in the X300/310 EEPROM. Any entry that is designated "User Customizable?=No" can cause irreversible damage to the USRP and should only be altered by proper guidance from Ettus Support. For example, certain settings in the EEPROM could become corrupted and can be restored with the proper commands.

X300/310 EEPROM Setting: User Customizable? Description
revision No Hardware Number
revision_compat No Revision Number
product No Product Code
serial No Unique USRP Serial Number
mac-addr0 No MAC Address (Port 0)
mac-addr1 No MAC Address (Port 1)
gateway Yes Network Gateway
subnet0 Yes Subnet Mask
subnet1 Yes Subnet Mask
subnet2 Yes Subnet Mask
subnet3 Yes Subnet Mask
ip-addr0 Yes IP Address
ip-addr1 Yes IP Address
ip-addr2 Yes IP Address
ip-addr3 Yes IP Address
name Yes Custom USRP Name

As an example, the EEPROM settings of an X310 with IP address 192.168.10.2 could be read-back with the following command:

./usrp_burn_mb_eeprom --args="addr=192.168.10.2,type=x300" --read-all

and the output would look like:

Fetching current settings from EEPROM...
	EEPROM ["revision"] is "4"
    	EEPROM ["revision_compat"] is "2"
    	EEPROM ["product"] is "30AD2D4"
    	EEPROM ["mac-addr0"] is "xx:xx:xx:xx:xx:xx"
	EEPROM ["mac-addr1"] is "xx:xx:xx:xx:xx:xx"
	EEPROM ["gateway"] is "192.168.10.1"
	EEPROM ["ip-addr0"] is "192.168.10.2"
	EEPROM ["subnet0"] is "255.255.255.0"
	EEPROM ["ip-addr1"] is "192.168.20.2"
	EEPROM ["subnet1"] is "255.255.255.0"
	EEPROM ["ip-addr2"] is "192.168.10.3"
	EEPROM ["subnet2"] is "255.255.255.0"
	EEPROM ["ip-addr3"] is "192.168.40.2"
	EEPROM ["subnet3"] is "255.255.255.0"
	EEPROM ["serial"] is "30AF217"
    	EEPROM ["name"] is ""

Determining X300/X310 Revision Number

It is useful in many cases to determine the revision number of your X300/X310. A part number sticker is located on the X300/310 motherboard. This sticker is located near the AUX-I/O connector and has the format 123456\<R>-\<XXX> where \<R> is a letter code that corresponds to the revision number. The photograph below highlights the location of the sticker:

  • The USRP X300/310 motherboard has a sticker that identifies the product and revision. The sticker is outlined in red.

Once the letter code has been determined use the table below to map the letter code to a revision number:

Letter Revision #
C 3
D 4
E 5
F 6
G 7
H 8
I N/A
J 8
K 8

Restore X300/310 EEPROM Revision Code

A corrupted or missing revision code in the X300/310 EEPROM will be indicated by a UHD runtime error:

Error: RuntimeError: No revision compat detected. MB EEPROM must be reprogrammed!

If this problem is encountered, the usrp_burn_mb_eeprom utility can be used to restore the X300/310 revision code in the EEPROM. First, the X300/X310 revision number must be determined. Once the revision number for your X300/310 is known, the usrp_burn_mb_eeprom utility can be used to restore the revision code to the EEPROM. The syntax is as follows:

./usrp_burn_mb_eeprom --args="recover_mb_eeprom" --values="revision=<#>"

where <#> is the revision number of your X300/310 to be written to the EEPROM. For example, to restore the revision number in EEPROM for a Rev. 6 X300 with an IP address of 192.168.10.2, the command would be:

./usrp_burn_mb_eeprom --args="recover_mb_eeprom,addr=192.168.10.2" --values="revision=6"

After the utility has been run, power cycle the USRP and then run uhd_usrp_probe to ensure that the new revision number has been written to the EEPROM correctly. If you are unsure of how to accomplish these steps, please feel free to contact Ettus Support at support@ettus.com.

Restore X300/310 EEPROM Product Code

A corrupted product code in the X300/310 EEPROM will be indicated by a UHD warning:

UHD Warning: X300/X310 unknown product code in EEPROM: <###>

where <###> is some numbered code that is unknown by UHD. If this problem is encountered, the usrp_burn_mb_eeprom utility can be used to write a new product code to the EEPROM. First, the X300/X310 revision number must be determined. Once the revision number has been determined, refer to the table below to find the product code for the X300/310:

USRP Rev. 0-6 Rev. 7-8
X300 30518 (0x7736) 30817 (0x7861)
X310 30410 (0x76CA) 30818 (0x7862)

Once the correct product code has been determined base on the X3x0 model and revision, the usrp_burn_mb_eeprom utility can be used to write the correct product code to the EEPROM. They syntax is as follows:

./usrp_burn_mb_eeprom --args="recover_mb_eeprom" --values="product=<###>"

where <###> is the product code to be written to the EEPROM. For example, on a Rev. 7 X300 with an IP address of 191.168.10.2, the command would be:

./usrp_burn_mb_eeprom --args="recover_mb_eeprom,addr=192.168.10.2" --values="product=30817"

After the utility has been run, power cycle the USRP and then run uhd_usrp_probe to ensure that the new revision number has been written to the EEPROM correctly. If you are unsure of how to accomplish these steps, please feel free to contact Ettus Support at support@ettus.com.

National Instruments USRP RIO

The National Instruments branded X300/310 have unique product codes to identify the motherboard revision as well as the daughter-cards in the USRP. The product codes are listed below:

Model (DB, BW, Rev.) Hex ID
USRP-2940R (WBX, 40 MHz BW, Rev. 0-6) 0x772B
USRP-2940R (WBX, 40 MHz BW, Rev. 7+) 0x7853
USRP-2940R (WBX, 120 MHz BW, Rev. 0-6) 0x77FB
USRP-2940R (WBX, 120 MHz BW, Rev. 7+) 0x785B
USRP-2942R (SBX, 40 MHz BW, Rev. 0-6) 0x772C
USRP-2942R (SBX, 40 MHz BW, Rev. 7+) 0x7854
USRP-2942R (SBX, 120 MHz BW, Rev. 0-6) 0x77FC
USRP-2942R (SBX, 120 MHz BW, Rev. 7+) 0x785C
USRP-2943R (CBX, 40 MHz BW, Rev. 0-6) 0x772D
USRP-2943R (CBX, 40 MHz BW, Rev. 7+) 0x7855
USRP-2943R (CBX, 120 MHz BW, Rev. 0-6) 0x77FD
USRP-2943R (CBX, 120 MHz BW, Rev. 7+) 0x785D
USRP-2944R (UBX, 160 MHz BW, Rev. 0-6) 0x772E
USRP-2944R (UBX, 160 MHz BW, Rev. 7+) 0x7856
USRP-2945R (TwinRX, 80 MHz BW, Rev. 7+) 0x78EF
USRP-2950R (GPS, WBX, 40 MHz BW, Rev. 0-6) 0x772F
USRP-2950R (GPS, WBX, 40 MHz BW, Rev. 7+) 0x7857
USRP-2950R (GPS, WBX, 120 MHz BW, Rev. 0-6) 0x77FE
USRP-2950R (GPS, WBX, 120 MHz BW, Rev. 7+ 0x785E
USRP-2952R (GPS, SBX, 40 MHz BW, Rev. 0-6) 0x7730
USRP-2952R (GPS, SBX, 40 MHz BW, Rev. 7+) 0x7858
USRP-2952R (GPS, SBX, 120 MHz BW, Rev. 0-6) 0x77FF
USRP-2952R (GPS, SBX, 120 MHz BW, Rev. 7+ 0x785F
USRP-2953R (GPS, CBX, 40 MHz BW, Rev. 0-6) 0x7731
USRP-2953R (GPS, CBX, 40 MHz BW, Rev. 7+) 0x7859
USRP-2953R (GPS, CBX, 120 MHz BW, Rev. 0-6) 0x7800
USRP-2953R (GPS, CBX, 120 MHz BW, Rev. 7+) 0x7860
USRP-2954R (GPS, UBX, 160 MHz BW, Rev. 0-6) 0x7732
USRP-2954R (GPS, UBX, 160 MHz BW, Rev. 7+) 0x785A
USRP-2955R (TwinRX, 80 MHz BW, Rev. 7+) 0x78F0

N200/210 EEPROM

N200/210 EEPROM Setting User Customizable? Description
hardware No Hardware Number
revision No Revision Number
product No Product Code
mac-addr No MAC Address
ip-addr Yes IP Address
subnet Yes Subnetwork
gateway Yes Network Gateway

The N200/210 do not store the product codes in the motherboard EEPROM. The "hardware" field is programmed at the factory but is not referenced by UHD. Instead, the revision field is used to determine the N200/210 hardware in use.

USRP Motherboard Product ID
N200 0x0A00
N210 0x0A01
N200 - R4 0x0A10
N210 - R4 0x0A11

B200/210 and B200mini EEPROM

The USRP B200 and B210 EEPROM is used to store certain information about each board. The USB PID (Product ID) and VID (Vendor ID) are stored in the EEPROM as well as serial number, product code, hardware revision, and USRP name for each B200/210. A table of these settings and whether or not the setting is user customizable is given below:

B200/210 EEPROM Setting User Customizable? Description
revision No Revision Number
product No Product Code
serial No Unique Serial Number
name Yes Custom USRP Name

To read the current EEPROM values from the USRP, use the usrp_burn_mb_eeprom utility:

./usrp_burn_mb_eeprom --args="type=b200" --read-all

This will read the settings and print them to the terminal. A sample output is shown below for a USRP B210:

Fetching current settings from EEPROM...
	EEPROM ["revision"] is "4"
    	EEPROM ["product"] is "2"
    	EEPROM ["serial"] is "30AD2D4"
    	EEPROM ["name"] is "MyB210"

If desired, a B200/210 could be given a custom name with the following command:

./usrp_burn_mb_eeprom --args="type=b200" --values="name=Lab_B210"

After the command has been run, the device must be power-cycled for the new EEPROM setting to take effect. Reading the updated EEPROM values yields:

Fetching current settings from EEPROM...
	EEPROM ["revision"] is "4"
    	EEPROM ["product"] is "2"
    	EEPROM ["serial"] is "30AD2D4"
    	EEPROM ["name"] is "Lab_B210"

USB VID/PID

The USB vendor identification (VID) and product identification (PID) numbers can be written to the USRP B200/210 using the "b2xx_fx3_utils" utility that is included with UHD. To reset the VID and PID, the command would be:

./b2xx_fx3_utils --init-device --write-vid 0x2500 --write-pid -0x0020
USRP USB PID
B200 0x0020
B210 0x0020
B200 (NI) 0x7813
B210 (NI) 0x7814
B200mini 0x0021
B205mini 0x0022

The VID is the same for all B2x0 variants, 0x2500.

Daughtercard IDs

Below is a comprehensive list of the daughtercard hex ID's.

Name Hex ID
Basic Tx 0x0000
Basic Rx 0x0001
DBS Rx 0x0002
TV Rx 0x0003
Flex 400 Rx 0x0004
Flex 900 Rx 0x0005
Flex 1200 Rx 0x0006
Flex 2400 Rx 0x0007
Flex 400 Tx 0x0008
Flex 900 Tx 0x0009
Flex 1200 Tx 0x000a
Flex 2400 Tx 0x000b
TV Rx Rev 2 0x000c
DBS Rx ClkMod 0x000d
LF Tx 0x000e
LF Rx 0x000f
DBSRX2 0x012
Flex 400 Rx MIMO A 0x0014
Flex 900 Rx MIMO A 0x0015
Flex 1200 Rx MIMO A 0x0016
Flex 2400 Rx MIMO A 0x0017
Flex 400 Tx MIMO A 0x0018
Flex 900 Tx MIMO A 0x0019
Flex 1200 Tx MIMO A 0x001a
Flex 2400 Tx MIMO A 0x001b
Flex 400 Rx MIMO B 0x0024
Flex 900 Rx MIMO B 0x0025
Flex 1200 Rx MIMO B 0x0026
Flex 2400 Rx MIMO B 0x0027
Flex 400 Tx MIMO B 0x0028
Flex 900 Tx MIMO B 0x0029
Flex 1200 Tx MIMO B 0x002a
Flex 2400 Tx MIMO B 0x002b
Flex 2200 Rx MIMO B 0x002c
Flex 2200 Tx MIMO B 0x002d
Flex 1800 Rx 0x0030
Flex 1800 Tx 0x0031
Flex 1800 Rx MIMO A 0x0032
Flex 1800 Tx MIMO A 0x0033
Flex 1800 Rx MIMO B 0x0034
Flex 1800 Tx MIMO B 0x0035
TV Rx Rev 3 0x0040
DTT754 0x0041
DTT768 0x0042
TV Rx MIMO 0x0043
TV Rx Rev 2 MIMO 0x0044
TV Rx Rev 3 MIMO 0x0045
TVRX2 0x0046
WCDMA US 0x004d
WCDMA EU 0x004e
SIMPLE GDB 0x004f
WBX LO TX 0x0050
WBX LO RX 0x0051
WBX NG TX 0x0052
WBX NG RX 0x0053
SBX v3 RX 0x0054
SBX v3 TX 0x0055
WBX v3 TX 0x0056
WBX v3 RX 0x0057
XCVR2450 - No Div 0x0059
XCVR2450 TX 0x0060
XCVR2450 RX 0x0061
WBX v4 TX 0x0062
WBX v4 RX 0x0063
SBX v4 TX 0x0064
SBX v4 RX 0x0065
CBX v1 TX 0x0066
CBX v1 RX 0x0067
SBX v5 TX 0x0068
SBX v5 RX 0x0069
UBX-Prototype v3 TX 0x0073
UBX-Prototype v3 RX 0x0074
UBX-Prototype v4 TX 0x0075
UBX-Prototype v4 RX 0x0076
UBX v1 TX 0x0077
UBX v1 RX 0x0078
UBX-160 v1 TX 0x0079
UBX-160 v1 RX 0x007a
UBX-40 v2 TX 0x007b
UBX-40 v2 RX 0x007c
UBX-160 v2 TX 0x007d
UBX-160 v2 RX 0x007e
Bitshark RX 0x0070
B150 v1 TX 0x0071
B150 v1 RX 0x0072
WBX-120 v1 TX 0x0080
WBX-120 v1 RX 0x0081
SBX-120 v1 TX 0x0082
SBX-120 v1 RX 0x0083
CBX-120 v1 TX 0x0084
CBX-120 v1 RX 0x0085
TwinRX Rev A TX 0x0090
TwinRX Rev A RX 0x0091
TwinRX Rev B TX 0x0092
TwinRX Rev B RX 0x0093
TwinRX Rev C TX 0x0094
TwinRX Rev C RX 0x0095
E300 AD3964 DB RevB 0x0100
E310 AD9361 DB RevB 0x0110
E300 AD9364 DB RevC 0x0101
E310 AD9361 DB RevC 0x0111
Unknown Tx 0xfff0
Unknown Rx 0xfff1

Motherboard IDs

Name Hex ID
B200 0x7737
B210 0x7738
B200mini 0x7739
B205mini 0x773a