USB840X Fanstel dongle (enable PA/LNA) with ble_connectivity does not guarantee throughput.

Hi Nordic team,

I'm using the USB840X dongle with ble_connectivity firmware (nRF5_SDK_15.3.0_59ac345\examples\connectivity\ble_connectivity\pca10059\ser_s140_usb_hci with hex/nRF5_SDK_15.3.0_connectivity.patch). On my PC, I communicate with the dongle using pc-ble-driver through the softdevice API.

  • PC + USB840X: Acts as center
  • Device (nRF52840): Acts as peripheral.

The USB840X has a BT840X module (nRF52840+Sky66112) with a SKY66112 power amplifier.


When the SKY66112 operates in bypass mode, the Device streams data to the PC, ensuring good throughput. However, enabling SKY66112 Control Codes for LNA seems to affect throughput negatively.

Is there a relationship between throughput and enabling LNA?

Parents
  • Hi,

    How do you monitor the throughput?

    I'm assuming the nRF52840 + LNA is on a custom board, can you share the design file (schematic + layout)?

    I can make the case private first if you prefer it.

    regards

    Jared 

  • Thanks for your help.

    1. How do you monitor the throughput?

    I can verify throughput using the packet counter (for example, N packets/second). It ensures functionality with the bypass mode, but in LNA mode, I'm not receiving an adequate amount of requested packets.

    2. I'm assuming the nRF52840 + LNA is on a custom board, can you share the design file (schematic + layout)?

    It's the Fanstel BT840X, unfortunately, we only have the documentation provided by the manufacturer here.


    3. I can make the case private first if you prefer it.

    The public is okay with this ticket.



    Thanks.

  • Hi,

    I see, and when you enable the LNA you see more packets being dropped? 

    What rate of packets drop do you see when you enable the LNA? How much is the difference? 

    lammobile said:
    2. I'm assuming the nRF52840 + LNA is on a custom board, can you share the design file (schematic + layout)?

    It's the Fanstel BT840X, unfortunately, we only have the documentation provided by the manufacturer here.

     SW wise I can't think of anything that would cause a higher packet loss since you use PPI + GPIOTE to setup the radio events so that the PA/LNA is enabled automatically. Which is correct,

    regards

    Jared 

  • Hi Jared,

    When I enable LNA on the Fanstel dongle (which acts as the Center device with ble_connectivity firmware), if I place the peripheral device and the Fanstel dongle close to each other, it works well, with a sample rate of 256 data packets/second (= 128 ble packets/second - combining 2 data packets for transmission at once).

    However, when I move the device further away, the throughput gradually decreases, and even at a distance of 50cm, it disconnects.

    We are using the Fanstel dongle as a Bluetooth adapter compatible with pc-ble-driver, which provides C/C++ libraries for Bluetooth Low Energy nRF5 SoftDevice serialization. Rather than relying on built-in Bluetooth and OS parameters.

    According to this documentation, the Fanstel dongle acts as a Connectivity chip and is loaded with connectivity firmware (<InstallFolder>\examples\connectivity).

    Here, in the original code, we only need to call the nrf_sdh_enable_request function, but to initialize the PA/LNA, it needs to be called after the ble_stack_init function, which we have added. We are unsure whether this is the correct flow and suitable for the application?

    #ifdef APP_PA_LNA
    
    #define APP_BLE_CONN_CFG_TAG                1                                       /**< A tag identifying the SoftDevice BLE configuration. */
    #define APP_BLE_OBSERVER_PRIO               3                                       /**< Application's BLE observer priority. You shouldn't need to modify this value. */
    
    
    static void ble_stack_init(void)
    {
        ret_code_t err_code;
    
        err_code = nrf_sdh_enable_request();
        APP_ERROR_CHECK(err_code);
    
        // Configure the BLE stack using the default settings.
        // Fetch the start address of the application RAM.
        uint32_t ram_start = 0;
        err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start);
        APP_ERROR_CHECK(err_code);
    
        // Enable BLE stack.
        err_code = nrf_sdh_ble_enable(&ram_start);
        APP_ERROR_CHECK(err_code);
    
        // Register a handler for BLE events.
        NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
    }
    #endif 
    
    
    
    
    int main(void) {
    
    
    ...
    
    #ifdef APP_PA_LNA
      ble_stack_init();
    
      nrf_gpio_cfg_output(APP_CPS_PIN);
      nrf_gpio_cfg_output(APP_CHL_PIN);
      nrf_gpio_pin_set(APP_CHL_PIN);
      nrf_gpio_pin_clear(APP_CPS_PIN); //enable
      pa_lna_init(APP_PA_PIN, APP_LNA_PIN);
    #else
        err_code = nrf_sdh_enable_request();
        APP_ERROR_CHECK(err_code);
    #endif 
    ...
    }

Reply
  • Hi Jared,

    When I enable LNA on the Fanstel dongle (which acts as the Center device with ble_connectivity firmware), if I place the peripheral device and the Fanstel dongle close to each other, it works well, with a sample rate of 256 data packets/second (= 128 ble packets/second - combining 2 data packets for transmission at once).

    However, when I move the device further away, the throughput gradually decreases, and even at a distance of 50cm, it disconnects.

    We are using the Fanstel dongle as a Bluetooth adapter compatible with pc-ble-driver, which provides C/C++ libraries for Bluetooth Low Energy nRF5 SoftDevice serialization. Rather than relying on built-in Bluetooth and OS parameters.

    According to this documentation, the Fanstel dongle acts as a Connectivity chip and is loaded with connectivity firmware (<InstallFolder>\examples\connectivity).

    Here, in the original code, we only need to call the nrf_sdh_enable_request function, but to initialize the PA/LNA, it needs to be called after the ble_stack_init function, which we have added. We are unsure whether this is the correct flow and suitable for the application?

    #ifdef APP_PA_LNA
    
    #define APP_BLE_CONN_CFG_TAG                1                                       /**< A tag identifying the SoftDevice BLE configuration. */
    #define APP_BLE_OBSERVER_PRIO               3                                       /**< Application's BLE observer priority. You shouldn't need to modify this value. */
    
    
    static void ble_stack_init(void)
    {
        ret_code_t err_code;
    
        err_code = nrf_sdh_enable_request();
        APP_ERROR_CHECK(err_code);
    
        // Configure the BLE stack using the default settings.
        // Fetch the start address of the application RAM.
        uint32_t ram_start = 0;
        err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start);
        APP_ERROR_CHECK(err_code);
    
        // Enable BLE stack.
        err_code = nrf_sdh_ble_enable(&ram_start);
        APP_ERROR_CHECK(err_code);
    
        // Register a handler for BLE events.
        NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
    }
    #endif 
    
    
    
    
    int main(void) {
    
    
    ...
    
    #ifdef APP_PA_LNA
      ble_stack_init();
    
      nrf_gpio_cfg_output(APP_CPS_PIN);
      nrf_gpio_cfg_output(APP_CHL_PIN);
      nrf_gpio_pin_set(APP_CHL_PIN);
      nrf_gpio_pin_clear(APP_CPS_PIN); //enable
      pa_lna_init(APP_PA_PIN, APP_LNA_PIN);
    #else
        err_code = nrf_sdh_enable_request();
        APP_ERROR_CHECK(err_code);
    #endif 
    ...
    }

Children
No Data
Related