CYBT-423028-02 BT module (CYW20719 radio): How can transmit power be controlled?

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
RoFe_2218931
Level 1
Level 1

We are currently using the CYBT-423028-02 Bluetooth radio module, based on the CYW20719 radio, in HCI mode hosted by Android on an i.MX 6 microprocessor. We seem to be having issues of transmitted signal strength from our packaged product as measured by its RSSI by other devices and instrumentation.

We have looked at how we can increase transmit power from the CYBT-423028-02 module. From the CYW20719 datasheet Section 5.2 (Receiver Path), it appears that the radio baseband automatically modulates TX power based on RSSI of the connected device (based on the following text):

Receiver Signal Strength Indicator

The radio portion of the CYBT-4230xx-02 provides a receiver signal strength indicator (RSSI) to the baseband. This enables the

controller to take part in a Bluetooth power-controlled link by providing a metric of its own receiver signal strength to determine whether

the transmitter should increase or decrease its output power.

We want to bypass this behavior by setting TX power to maximum (+4 dBm) and attempted to control the TX power from our i.MX 6 host side by adding the command HCI_VENDOR_SET_TX_PWR (0xFDA5) to our vendor code library and build into Android. However, this was unsuccessful.

Our questions:

  1. Is there a way for us to control transmit power from our i.MX 6 host via Android (using HCI_VENDOR_SET_TX_PWR command)? This would be out preferred way of handling transmit power.
  2. If not, is there a way to modify the Cypress module itself, whether updating a setting through another path or running a small program in the module's Cortex-M4 to set transmit power upon boot and then place the module in HCI mode to continue operation with the i.MX 6 host/HCI with the new TX power setting maintained? For example, can we change TX power from default to maximum power by using this function:

CYBLE_API_RESULT_T CyBle_SetTxPowerLevel(CYBLE_BLESS_PWR_IN_DB_T * bleSsPwrLvl);

Description: This function sets the transmit power of the BLE radio for given BLE sub-system channel group. This is a blocking function. No event is generated on calling this function. 

    .........

power.blePwrLevelInDbm=CYBLE_LL_PWR_LVL_3_DBM;   ------> CHANGE THIS TO CYBLE_LL_PWR_LVL_MAX

CyBle_SetTxPowerLevel(&power);

     3. What is the default value for the transmit power level in the current firmware when the radio is used in HCI mode?  

We very much appreciate any insight into how we can control transmit power.

Thanks!

0 Likes
1 Solution
DheerajPK_41
Moderator
Moderator
Moderator
750 replies posted 500 likes received 500 replies posted

Hi,

You may have to set the Tx power by sending appropriate HCI commands from the host. Please use below command.

Set_Transmit_Power (OCF 0x026)

This command is used to adjust the transmit power attenuation on a per-connection basis.

OGF 0x3F

Command Parameters

Connection_Handle

     This is the connection handle of the link for which to adjust the transmit power.

     Type: uint16 (2 bytes — little endian).

Max Tx Power Level

     This is the index into the power table array.

     Type: int8 (1 byte).

Return Parameters

Status

     Error code per Bluetooth Core Specification.

     Type: uint8 (1 byte).

You can read the tx_power using CyBluetool (Windows Installer) command: LE_Read_Transmit_Power.

Thanks,

-Dheeraj

View solution in original post

0 Likes
3 Replies
DheerajPK_41
Moderator
Moderator
Moderator
750 replies posted 500 likes received 500 replies posted

Hi,

You may have to set the Tx power by sending appropriate HCI commands from the host. Please use below command.

Set_Transmit_Power (OCF 0x026)

This command is used to adjust the transmit power attenuation on a per-connection basis.

OGF 0x3F

Command Parameters

Connection_Handle

     This is the connection handle of the link for which to adjust the transmit power.

     Type: uint16 (2 bytes — little endian).

Max Tx Power Level

     This is the index into the power table array.

     Type: int8 (1 byte).

Return Parameters

Status

     Error code per Bluetooth Core Specification.

     Type: uint8 (1 byte).

You can read the tx_power using CyBluetool (Windows Installer) command: LE_Read_Transmit_Power.

Thanks,

-Dheeraj

0 Likes

Hi,

Thank you for the guidance. Would you have a link to documentation regarding the Set_Transmit_Power command, and other commands? We haven't been about to locate such a document and have some additional questions regarding the use of the command:

  1. Connection_Handle   - we're not sure precisely where to get the connection handle - is this specific to the host side or on the radio side?
  2. Max Tx Power Level  - where is that power table array (we assume in the radio) and how do we know what value to provide?
  3. When does Cypress recommend to use this command - after the connection with device is established or after RESET of the BT controller?
  4. Does this command (Set_Transmit_Power) increase power of both adv and data channels ?

Also please confirm that we can derive the opcode from concatenating the OGF and OCF, yielding an opcode of  0xFC26.

Thanks,

Rodney

0 Likes

Hi,

connection_handle can get from the connection complete event. For adv, please use 0xFE as connection handle.

Max Tx power level ranges from +4dBm to -16dBm for 20719 device.

The opcode is correct 0xFC26.

You can also refer "https://community.cypress.com/message/147720#147720".

The public VS commands are listed in cybluetool. (https://community.cypress.com/docs/DOC-15585).

Thanks,

-Dheeraj