Warning! Use usrp2_card_burner
with caution. If you specify the wrong device node, you could overwrite your hard drive. Make sure that --dev=
specifies the SD card.
Warning! It is possible to use 3rd party SD cards with the USRP2. However, certain types of SD cards will not interface with the CPLD:
For these reasons, we recommend that you use the SD card that was supplied with the USRP2.
sudo <install-path>/lib/uhd/utils/usrp2_card_burner_gui.py -- OR -- cd <install-path>/lib/uhd/utils sudo ./usrp2_card_burner.py --dev=/dev/sd<XXX> --fpga=<path_to_fpga_image> sudo ./usrp2_card_burner.py --dev=/dev/sd<XXX> --fw=<path_to_firmware_image>
Use the --list
option to get a list of possible raw devices. The list result will filter out disk partitions and devices too large to be the sd card. The list option has been implemented on Linux, Mac OS X, and Windows.
<path_to_python.exe> <install-path>/lib/uhd/utils/usrp2_card_burner_gui.py
The USRP-N Series can be reprogrammed over the network to update or change the firmware and FPGA images. When updating images, always burn both the FPGA and firmware images before power cycling. This ensures that when the device reboots, it has a compatible set of images to boot into.
Use default images:
usrp_n2xx_simple_net_burner --addr=<IP address>
Use custom-built images:
usrp_n2xx_simple_net_burner --addr=<IP address> --fw=<firmware path> --fpga=<FPGA path>
Note: Different hardware revisions require different FPGA images. Determine the revision number from the sticker on the rear of the chassis. Use this number to select the correct FPGA image for your device.
For users who would prefer a graphical utility, a Python-based alternative exists.
<install-path>/lib/uhd/utils/usrp_n2xx_net_burner_gui.py
<path_to_python.exe> <install-path>/lib/uhd/utils/usrp_n2xx_net_burner_gui.py
Its possible to put the device into an unusable state by loading bad images. Fortunately, the USRP-N Series can be booted into a safe (read-only) image. Once booted into the safe image, the user can once again load images onto the device.
The safe-mode button is a pushbutton switch (S2) located inside the enclosure. To boot into the safe image, hold-down the safe-mode button while power-cycling the device. Continue to hold-down the button until the front-panel LEDs blink and remain solid.
When in safe-mode, the USRP-N device will always have the IP address 192.168.10.2.
For more information on using external tools to unbrick your device when even this fails, see Unbricking an N-Series Device.
The USRP2 only supports Gigabit Ethernet and will not work with a 10/100 Mbps interface. However, a 10/100 Mbps interface can be connected indirectly to a USRP2 through a Gigabit Ethernet switch.
The USRP2 communicates at the IP/UDP layer over the gigabit ethernet. The default IP address of the USRP2 is 192.168.10.2. You will need to configure the host's Ethernet interface with a static IP address to enable communication. An address of 192.168.10.1 and a subnet mask of 255.255.255.0 is recommended.
On a Linux system, you can set a static IP address very easily by using the 'ifconfig' command:
sudo ifconfig <interface> 192.168.10.1
Note that interface
is usually something like eth0. You can discover the names of the network interfaces in your computer by running ifconfig without any parameters:
ifconfig -a
Note: When using UHD software, if an IP address for the USRP2 is not specified, the software will use UDP broadcast packets to locate the USRP2. On some systems, the firewall will block UDP broadcast packets. It is recommended that you change or disable your firewall settings.
For maximum throughput, one Ethernet interface per USRP2 is recommended, although multiple devices may be connected via a Gigabit Ethernet switch. In any case, each Ethernet interface should have its own subnet, and the corresponding USRP2 device should be assigned an address in that subnet. Example:
You may need to change the USRP2's IP address for several reasons:
To change the USRP2's IP address, you must know the current address of the USRP2, and the network must be setup properly as described above. Run the following commands: :
cd <install-path>/lib/uhd/utils ./usrp_burn_mb_eeprom --args=<optional device args> --values="ip-addr=192.168.10.3"
This method assumes that you do not know the IP address of your USRP2. It uses raw Ethernet packets to bypass the IP/UDP layer to communicate with the USRP2. Run the following commands:
cd <install-path>/lib/uhd/utils sudo ./usrp2_recovery.py --ifc=eth0 --new-ip=192.168.10.3
When setting up a development machine for the first time, you may have various difficulties communicating with the USRP device. The following tips are designed to help narrow down and diagnose the problem.
This is a common error that occurs when you have set the subnet of your network interface to a different subnet than the network interface of the USRP device. For example, if your network interface is set to 192.168.20.1, and the USRP device is 192.168.10.2 (note the difference in the third numbers of the IP addresses), you will likely see a 'no control response' error message.
Fixing this is simple - just set the your host PC's IP address to the same subnet as that of your USRP device. Instructions for setting your IP address are in the previous section of this documentation.
When the IP address is not specified, the device discovery broadcasts UDP packets from each ethernet interface. Many firewalls will block the replies to these broadcast packets. If disabling your system's firewall or specifying the IP address yields a discovered device, then your firewall may be blocking replies to UDP broadcast packets. If this is the case, we recommend that you disable the firewall or create a rule to allow all incoming packets with UDP source port 49152.
The USRP device will reply to ICMP echo requests. A successful ping response means that the device has booted properly and that it is using the expected IP address.
ping 192.168.10.2
Read the serial port to get debug verbose output from the embedded microcontroller. The microcontroller prints useful information about IP addresses, MAC addresses, control packets, fast-path settings, and bootloading. Use a standard USB to 3.3v-level serial converter at 230400 baud. Connect GND to the converter ground, and connect TXD to the converter receive. The RXD pin can be left unconnected as this is only a one-way communication.
Use Wireshark to monitor packets sent to and received from the device.
In a single-device configuration, the USRP device must have a unique IPv4 address on the host computer. The USRP can be identified through its IPv4 address, resolvable hostname, or by other means. See the application notes on Device Identification. Please note that this addressing scheme should also be used with the multi_usrp interface.
Example device address string representation for a USRP2 with IPv4 address 192.168.10.2:
addr=192.168.10.2
In a multi-device configuration, each USRP device must have a unique IPv4 address on the host computer. The device address parameter keys must be suffixed with the device index. Each parameter key should be of the format <key><index>. Use this addressing scheme with the uhd::usrp::multi_usrp interface.
Example device address string representation for 2 USRP2s with IPv4 addresses 192.168.10.2 and 192.168.20.2:
addr0=192.168.10.2, addr1=192.168.20.2
The MIMO cable allows two USRP devices to share reference clocks, time synchronization, and the Ethernet interface. One of the devices will sync its clock and time references to the MIMO cable. This device will be referred to as the slave, and the other device, the master.
In shared Ethernet mode, only one device in the configuration can be attached to the Ethernet.
In dual Ethernet mode, both devices in the configuration must be attached to the Ethernet.
In order for the slave to synchronize to the master over MIMO cable, the following clock configuration must be set on the slave device: :
It is possible to program the USRP device to send RX packets to an alternative IP/UDP destination.
To use an alternative streaming destination, the device needs to be able to determine if the destination address is within its subnet, and ARP appropriately. Therefore, the user should ensure that subnet and gateway addresses have been programmed into the device's EEPROM.
Run the following commands:
cd <install-path>/lib/uhd/utils ./usrp_burn_mb_eeprom --args=<optional device args> --values="subnet=255.255.255.0, gateway=192.168.10.2"
Set the stream args "addr" and "port" values to the alternative destination. Packets will be sent to this destination when the user issues a stream command.
Note: Calling recv()
on this streamer object should yield a timeout.
The LEDs on the front panel can be useful in debugging hardware and software issues. The LEDs reveal the following about the state of the device:
Using an external 10 MHz reference clock, a square wave will offer the best phase noise performance, but a sinusoid is acceptable. The reference clock requires the following power level:
Using a PPS signal for timestamp synchronization requires a square wave signal with the following amplitude:
Test the PPS input with the following app:
<args>
are device address arguments (optional if only one USRP device is on your machine)
cd <install-path>/lib/uhd/examples ./test_pps_input –args=<args>
Please see Internal GPSDO (USRP-N2x0/E1X0 Models) for information on configuring and using the internal GPSDO.
The following sensors are available for the USRP2/N-Series motherboards; they can be queried through the API.
There are two complete DDC chains in the FPGA. In the single channel case, only one chain is ever used. To receive from both channels, the user must set the RX subdevice specification. This hardware has only one daughterboard slot, which has been aptly named slot A.
In the following example, a TVRX2 is installed. Channel 0 is sourced from subdevice RX1, and channel 1 is sourced from subdevice RX2 (RX1 and RX2 are the antenna ports on the TVRX2 daughterboard):
You'll need:
Download the latest FPGA images, e.g. using uhd_images_downloader
.
There is a sub-directory in the archive below the firmware/images called 'bit'. Use Impact to load usrp_n210_r4_fpga.bit
via the programmer (the filename may be different depending on your device type and revision).
The USRP should now be able to communicate on the network (you'll see some LEDs light up and network link be established). The next step is to flash the device and program the serial number. Both these steps can be done with UHD (the JTAG step is complete).
To be sure, run uhd_find_devices
and it should appear in the list - remember this IP address for the burner utility (should be 192.168.10.2 - make sure your network settings enable to you communicate with that subnet!).
The first step is to flash the unit's safe-mode image, and then do a normal flash - both with the USRP N-series image burner utility.
Make sure you have UHD installed, and the images from before, and follow the instructions in Load the Images onto the SD card (USRP2 only). You can combine the --fw
and --fpga
arguments into the single invocation of the burner.
You will probably use "usrp_n210_fw.bin" for the firmware and "usrp_n210_r4_fpga.bin" for the FPGA image parameters (use the full/relative file path if your current directory is not that of the images).
usrp_n2xx_net_burner.py --addr=192.168.10.2 --fw=usrp_n210_fw.bin --fpga=usrp_n210_r4_fpga.bin --overwrite-safe
Use --overwrite-safe
the first time, and then repeat without it for the second time. Don't forget to power-cycle the device after it has been flashed.
If you see a Python exception thrown (e.g. KeyError 65535) and something about if(check_rev)... use the –dont-check-rev option too (this is when the EEPROM has not yet been initialised, or has been blanked).
You can change the normal IP address by following the instructions in Change the USRP2's IP address.
If you run uhd_usrp_probe
, you can see the EEPROM keys at the top. Example:
Mboard: N210r4 hardware: 2577 mac-addr: a0:36:fa:25:34:a7 ip-addr: 192.168.10.4 subnet: 255.255.255.255 gateway: 255.255.255.255 gpsdo: none serial: EAR14U7UP
If you need to change any of there, you should then be able to run:
usrp_burn_mb_eeprom --key=<key> --val=<val>
to set the 'mac-addr', 'serial' and 'Mboard'.