ExtIO USRP
Contents
Summary
ExtIO_USRP is an ExtIO plugin for Winrad/HDSDR/WRplus that allows one to use a USRP as the baseband input.
It can either connect to a locally attached USRP, or a remote unit accessible via BorIP (this server enables one to use a USRP 1 remotely).
You can opt to use either the UHD host, or older Legacy interface.
The settings you use (e.g. gain, sampling rate) are remembered by the plugin and are stored on a per-device basis (based on the serial number).
SPECIAL NOTE: This plugin has two cool features:
- It can relay the baseband data to another computer, where further processing can be done (e.g. a UDP Source block in GNU Radio/GRC). It will also send the tuning offset via XML-RPC so you can perform channel selection with Winrad, and have your specialised SDR application demodulate the precise signal you selected in Winrad's spectrum view.
- This one isn't widely advertised: Winrad has the ability to one-touch record and replay a baseband stream - this is extremely handy for testing. This plugin is able to operate in Playback mode, which means it can relay the baseband stream being replayed from a previous recording of a live feed. In this mode, however, the sending of tuning information does not work (so make sure your custom SDR application remembers the correct frequency translation offset).
The main site has a less-technical page with screenshots.
For GNU Radio: Please see gr-baz.
Notes
- Default UDP Source destination port: 28888
- Can be changed by appending :port to destination IP address
- If UDP Source relaying is enabled, but the computer specified destination is either not up, or not listening on the port, the application may slow down. This is (probably) due to ICMP destination unavailable responses being sent back at a high rate. If this happens, simply switch off relaying.
- If the XML-RPC server at the destination is not listening on the specified port, the application will freeze for a split second and an error will be printed in the log. This is because RPC commands are currently sent in the (default) synchronous fashion and the client could not connect to the server. To avoid this, disable XML-RPC IF commands while the server is not running.
USB Driver Installation
Please refer to the USRP Zadig page.
Device creation (hint)
USRP
The hint is used to specify which device to create, and implies whether the UHD or Legacy interface is used:
- A blank hint implies the default device, which depends on whether you are connecting to a local device, or a remote server:
- For a local device, this means the default device that UHD will find.
- For a remote server...
- ...that is not connected to a device, this also means the default UHD device
- ...this is already connected to a device, use that device.
- Entering a hyphen ("-") will force a remote server to connect to the default UHD device, regardless of whether it is already connected to a device. Using it for a local device is the equivalent of leaving the hint blank.
- To select the Legacy host interface, the following format must be used:
<device index> [sub-device[:side]] [FPGA image] [Firmware image]
- Argument breakdown:
- device index: a single digit (required, use 0 for the default Legacy device)
- sub-device: a single digit, or single letter A-Z (e.g. B for USRP 1's B side)
- side: a single digit, single letter A-Z, or AB (e.g. AB for BasicRX/LFRX)
- FPGA image path: path (default is the Legacy default, usually std_2rxhb_2tx.rbf)
- Firmware image path: path (default is the Legacy default, usually std.ihx)
- Anything else is fed through to the UHD device factory (see UHD Device Identification Notes).
- To supply a sub-device specification, simply follow the above sub-device/side format and append it to the comma-separated hint list - with the follow exception: it must conform to the UHD sub-device specification (e.g. the sub-device must be a letter, see UHD USRP 1 Application Notes).
- For example, to select the first available USRP 1 (assuming you also have other models of USRP connected) and use its B-side WBX daughterboard:
type=usrp1, B:0
FUNcube Dongle
FCD [<device index> [<I offset> [[<gain offset> [<phase offset>]]]]] [mixergain={4,12}] [ifgain1={-3,6}]
- Argument breakdown:
- FCD is mandatory to select a FUNcube Dongle
- If multiple dongles are connected, use an integer to specify the device index.
- The offsets are expressed the same as in the FCHID application. If they are not supplied, the device's offsets will remain as they are.
- The named key/value argument pairs can be specified in any order throughout the hint. If you wish to specify the offsets out of order, then you can also use the following key/value arguments keys: i=, q=, gain=, phase=.
- For example, to select the second FCD and set the offsets:
FCD 1 0.00156 0.00076 0.97586 0 mixergain=4 ifgain1=-3
RTL2832U-based DVB-T USB Dongle
RTL <options>
Please see the USRP Interfaces for all options.
Additional considerations & limitations
- The clients and BorIP protocol are currently limited to complex short sample pairs
- 2 x 16-bit samples = 4 bytes per complex sample
- The supported frequency range of hardware is not currently checked. However, the success of a tune request is checked.
- So for the moment, if you have a WBX for example, you will see tune requests succeed that are slightly outside the spec'ed range of the daughterboard.
- Since the Legacy interface does not support querying what antennas are available on a specific daughterboard, it will always return the following list of possibilities:
- TX/RX, RX2, RXA, RXB, RXAB
- Both UHD and Legacy client ask from the host API what the FPGA clock rate is (i.e. 64MHz is not hardcoded in the client). However it may be hardcoded in the host layer (e.g. IIRC it is in Legacy), so if you are clocking your USRP at a different rate there are two options:
- Stick to UHD
- Let me know and I'll add an option that will override the clock rate
Bugs
- TAB'ing does not work in the dialog box (unfortunately I believe this is due to Winrad)
To Do
- Asynchronous XML-RPC IF
- Listen to BorIP server announce
- In streaming mode, buffer & request re-send of missing blocks
|