Radio validation tool¶
The purpose of this tool is to evaluate RF performance. It can be used to certify for both the ETSI and FCC standards. The tool is also helpful during hardware development to verify the RF behaviour.
The firmware has a CLI interface to send commands to.
Common use cases¶
Below is procedures for common use cases of this tool. For more information regarding the tool, see the command section.
Configure the frontend¶
This should be done before any of the other procedures if a frontend module is present. Configure the frontend, either with a predefined module or with a custom configuration. See frontend command section regarding frontend configuration for appropriate commands to run.
Measure RF output power¶
Set the output power to the maximum designated operating power.
Run transmit single <channel>
for non hopping measurement or transmit hopping <start channel> <end channel>
for measuring during hopping.
Measure hopping frequency separation¶
Set the output power to the maximum designated operating power.
Run transmit hopping <channel n> <channel n+1>
Measure adaptivity¶
Set the output power to the maximum designated operating power.
Run transmit single <channel>
.
When a CCA hit is detected a c
will be printed instead of a #
Measure occupied channel bandwidth¶
Set the output power to the maximum designated operating power.
Run transmit single <channel>
Measure TX spurious emissions¶
Set the output power to the maximum designated operating power.
Run carrier transmit <channel>
.
Measure RX spurious emissions¶
Run receive sweep
.
Test receiver blocking¶
Set up two devices A and B with the radio validation tool.
Device A should run transmit hopping <start channel> <end channel>
.
Device B should run receive scan <channel>
, where channel
is in the set of channels defined by start channel
and end channel
.
Automatic command sequences¶
It is possible to flash command sequences to the device that will be run when it starts.
A command sequence starts with commands that are always executed, then follows a mode definition and commands to run in that mode. Modes start with a number followed by a colon.
An example:
frontend module set 1
mode set button 0 13
mode set led 0 17
mode set leds 0 17 0 18 0 19
1:
transmit hopping 2 80
2:
receive status set 0 20
receive connect 40
Here the first four commands are always executed, then either the transmit command or the receive commands are executed.
When the "mode set button" command is run, it checks the provided port+pin. If that pin is low, the card will switch to the next higher mode (or wrap around to 1), then wait for the pin to be high again. If a button is connected to the pin, hold it down and reset the card to switch modes.
The "mode set led" command will blink the given port+pin as many times as the mode's number.
The "mode set leds" command will set the given ports+pins to the binary value of the mode.
Use the provided config2hex.py program to create a hex file with the command sequence:
then flash the hex file to the device together with the radio-test firmware.
Commands¶
The commands are divided into subgroups depending on what actions they perform.
Subgroup | Group description |
---|---|
frontend |
Commands for settting and gettting configuration for frontend control |
transmit |
Commands for transmitting radio packets |
receive |
Commands for listening for radio packets |
measure |
Commands for measuring RSSI |
carrier |
Commands for transmitting carrier waves |
frontend¶
The frontend command subgroup is used for either setting one of the predefined configurations for LumenRadio modules or for providing a custom frontend configuration.
Getting and setting the frontend configuration¶
Get one parameter of the frontend config.
Set one parameter of the frontend config. Description ofparam
:
param | Description |
---|---|
gain_cb_bypass_tx |
Gain for passive frontend when transmitting |
gain_cb_active_tx |
Gain for active frontend when transmitting |
gain_cb_bypass_rx |
Gain for passive frontend when receiving |
gain_cb_active_rx |
Gain for active frontend when receiving |
gpio_mode_controlX (X = 0..3, value = 256+pin for P1.pin) |
Pins used to send control signals to frontend, for GPIO port P1 use 256+\<pin> for P1.\<pin> |
gpio_antsel (value = 256+pin for P1.pin) |
Pin for selecting different antennas |
pin_values_bypass_rx |
Values of GPIO pins for active frontend when receiving |
pin_values_active_rx |
Values of GPIO pins for passive frontend when receiving |
pin_values_active_tx |
Values of GPIO pins for active frontend when transmitting |
pin_values_bypass_tx |
Values of GPIO pins for passive frontend when transmitting |
pin_values_idle |
Values of GPIO pins when frontend is in idle |
pin_values_antselX (X = 0 or 1) |
Value for antenna select pin |
pin_values_antsel_idle |
Value for default antenna |
Note
Formatting for pin_values_*
param is an integer where the 4 least significant bits are the values used for the pins provided by the gpio_mode_controlX
param.
For example: If gpio_mode_control0 = 1
, gpio_mode_control1 = 2
, gpio_mode_control2 = 257
, gpio_mode_control3 = 258
and pin_values_active_rx = 11
. 11 is 1011 in binary
which then will translate into port0.pin1, port0.pin2, port1.pin2 being active and port1.pin1 being inactive when the frontend is in active RX mode.
Get the entire frontend config as a json that is compatible with mira_factory_configuration.py
.
Set and get RF output power¶
Set desired output power. The radio has discrete steps in the output so not all powers can be exactly matched. If the power level can't be matched then the closest value that is less than the provided is set. The value is in centibel-milliwats (cBm) which is one tenth of decibel-milliwats (dBm).
Get the current configured output power.Select antenna¶
If multiple antennas are available via an antenna switch, then antennas can be switched with:
Get current configured antenna.Select a predefined module¶
Select predefined module.
Wheretype id
is one of the following:
type id | Module |
---|---|
5 |
MWA_N2 |
6 |
MWA_N3 |
Get current active frontend module.
transmit¶
Transmit on either one channel or a set of channels with channel hopping. The device will report the status of each transmission with a character aligned by channel, see description below:
Letter | Description |
---|---|
# |
Succesful transmission |
c |
Channel busy |
. |
Internal error |
f |
Internal fatal error |
Transmit on a single channel¶
Transmit continuously on a single channel
Transmit on a set of channels with channel hopping¶
Continuously transmit and does channel hopping in the provided span set of channels.
receive¶
Receive packets from another device running a transmit
command or do RX sweeps in the 2.4GHz band.
Connect to and receive packets from another device¶
Connects to another device running the transmit commands and continuously receives packets.
Note
Works both with transmit single
and transmit hopping
as long as the channel is equal or in the provided set of channels.
If receiving from a device that does channel hopping, the hopping is followed when receiving.
measure¶
Measure receive signal strength indicator (RSSI)
Single measurement¶
To get a single RSSI measurement on a channel. If channel is not provided, all channels will be swept and the max value is returned.
Continuous measurement¶
To do a continuos RSSI measurement on a channel. If channel is not provided, all channels will be swept and the max value is returned.
carrier¶
Transmit different carrier waves at given channel.
Modulated or unmodulated carrier¶
Transmit a modulated or unmodulated constant carrier.