In this article we are shortly discussing the BGAPI/BGScript commands used to configure the RF maximum transmit power of the BT121 module, and we are showing the results of the measurements taken to reveal the actual power fed to the antenna depending on the chosen parameters.
In accordance to the API reference there are two separate and independent commands to configure the max RF TX power used by the radio chipset in the BT121:
bt_gap_set_max_power(…) for the Bluetooth Classic
le_gap_set_max_power(…) for the Bluetooth Low Energy
In both cases the commands take only one parameter.
In the Classic case, the possible parameter is an integer that can range between -20 and +12, and is meant to correspond to the desired max output power (in dBm) fed to the antenna.
The actual power used during a transmission dynamically and autonomously changes depending on the environment and on the current data exchange (but principally on range) so it can be lower, however it will anyway never exceed the configured max power.
In the Low Energy case, the parameter value can be any integer from 0 to 5 and the corresponding nominal output power fed to the antenna increments by 5dBm starting from -18dBm, thus ranging from a minimum of -18dBm to a maximum of +7dBm (in the API reference a simple table exposes the exact correspondence between the parameter and the nominal power.)
Despite the “max” reference in the name of the command, what you are configuring is actually the power used in any transmission, because with BLE there is no power control algorithm built-in the part of the stack running in the radio chipset.
By default, the BT121 module always uses the max nominal power of 7dBm with BLE and up to the nominal 12dBm with BR/EDR after a reset or a power-cycle.
The above commands are to be issued during runtime if there is any need to change the output power from the default state.
In fact, there is no configuration to set an initial max RF TX power, other than the default, via the hardware.xml (or any other .xml) firmware project file.
For the purpose of having the module automatically changing the power configuration after a reset, a BGScript could be used, however remember that the "call bt_gap_set_max_power(…)" and/or the "call le_gap_set_max_power(…)" should go under the "event system_initialized(...)" and not under the "event system_boot(...)" because it is only after the system_initialized event that the radio chipset is actually started and can be re-configured.
Of course the above calls can be inserted anywhere else in a custom BGScript, depending on the application requirements.
As a side note, let’s remind here that there is no option or command to re-configure the receiver sensitivity: this is fixed to the values seen in the datasheet and cannot be changed during runtime or through some .xml project file before building a custom firmware.
With the above being said, we wanted to verify the actual power fed to the antenna of a random module vs the nominal value configured before each test by the commands discussed above. We used for our test the API’s commands test_dtm_tx(...) as we wanted to test the Bluetooth Low Energy part.
Below please find the graph with the results of the measurements:
As can be noticed from the graph, the actual power fed to the antenna of the particular module under test happened to be slightly lower than the configured nominal power. Looking at the max value, 5.5dBm is measured compared to the configured value of 7, but this is in line with the information provided in the datasheet which for example mentions that the max power could indeed oscillate from module to module between 5.5dBm and 8.5dBm.