77 lines
3.1 KiB
Markdown
77 lines
3.1 KiB
Markdown
USRP device documentation
|
|
|
|
OAI works with the most common USRP models like, B200, B200mini, B210, X310, N300, N310, N320, X410. This is achieved by using the Ettus Universal Hardware Driver (UHD) (https://github.com/EttusResearch/uhd). The file usrp_lib.cpp provides an abstraction layer of UHD to OAI.
|
|
|
|
The USRP can be configured in the RU section of the config file. The field "sdr_addrs" uses the same syntax as the USRP device identification string (https://files.ettus.com/manual/page_identification.html). Here are a few examples
|
|
|
|
```bash
|
|
sdr_addrs = "addr=192.168.10.2" # uses a single 10Gb Ethernet interface on an N3x0 or X3x0 or X4x0
|
|
|
|
|
|
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2" # uses 2 10Gb Ethernet interfaces on a N3x0 or X3x0 or X4x0 (requires that you flashed the FPGA wth the XG image)
|
|
```
|
|
|
|
you can also use the multi USRP feature and specify multiple USRPs, in which case you will get the aggregated number of channels on all the devices
|
|
|
|
```bash
|
|
sdr_addrs = "addr0=192.168.10.2,addr1=192.168.30.2"
|
|
```
|
|
|
|
You can specify if you want to use external or interal clock or time source either by adding the parameters in the sdr_addrs field or by using the fields clock_src or time_src
|
|
|
|
```bash
|
|
sdr_addrs = "addr=192.168.10.2,clock_source=external,time_source=external"
|
|
```
|
|
|
|
is equivalent to
|
|
|
|
```bash
|
|
sdr_addrs = "addr=192.168.10.2"
|
|
clock_src = "external"
|
|
time_src = "external"
|
|
```
|
|
|
|
Valid choices for clock and time source are "internal", "external", and "gpsdo".
|
|
|
|
Note 1: the USRP remembers the choice of the clock source. If you want to make sure it uses always the same, always specify the clock_source and time_source.
|
|
|
|
Note 2: when using multiple USRPs they always have to be synchronized using "external" or "gpsdo"
|
|
|
|
Last but not least you may specify that only a specfic subdevice of the USRP is used. See also https://files.ettus.com/manual/page_configuration.html#config_subdev
|
|
|
|
For example on a USRP N310 the following fields will specify that you use channel 0 of subdevice A. You can enter this information after providing the ip addresses of the USRPs in sdr_addrs.
|
|
|
|
```bash
|
|
tx_subdev = "A:0"
|
|
rx_subdev = "A:0"
|
|
```
|
|
Here is an example of the RUs configuration for a setup with 2 USRP N310.
|
|
|
|
```bash
|
|
RUs = (
|
|
{
|
|
local_rf = "yes"
|
|
nb_tx = 2
|
|
nb_rx = 2
|
|
att_tx = 0
|
|
att_rx = 0;
|
|
bands = [78];
|
|
max_pdschReferenceSignalPower = -27;
|
|
max_rxgain = 75;
|
|
eNB_instances = [0];
|
|
##beamforming 1x2 matrix: 1 layer x 2 antennas
|
|
bf_weights = [0x00007fff, 0x0000];
|
|
sdr_addrs = "addr0=192.168.10.2,addr1=192.168.20.2,clock_source=external,time_source=external"
|
|
tx_subdev ="A:0 B:0"
|
|
rx_subdev ="A:1 B:1"
|
|
}
|
|
);
|
|
```
|
|
Hint:
|
|
|
|
You cannot see TX/RX spread over multiple USRPs, if you use "internal" as a refrence of the clock and time source.
|
|
|
|
Furthur information about synchronization on the USRP N3xx devices can be found here: https://kb.ettus.com/Using_Ethernet-Based_Synchronization_on_the_USRP%E2%84%A2_N3xx_Devices
|
|
|
|
When combining this with the multi USRP feature you can create a distributed antenna array with only 1 channel used at each USRP.
|