Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs

Multiprotocol Support (BLE and IEEE-802.15.4)

I am working on developing an application for nRF52833 DK (PCA10100) using nRF5 SDK_v17.1 and nRF_802.15.4 Radio driver v1.6. I am using the s122 Soft device on the device. I don't have enough experience with multiprotocol. I used the ble_app_uart_c example in the SDK for this. The application works in the central role on the BLE and can communicate with the peripheral device by connecting it. When BLE is not active, it can send packets over IEEE-802.15.4 radio. I want to run IEEE-802.15.4 radio and BLE as multiprotocol on the device. But right after connecting to peripheral device with BLE, I can only send one packet over IEEE-802.15.4 and then I cannot send another packet. As long as the BLE connection is established, packets can be sent over IEEE-802.15.4 only for a short time at the beginning. How can I fix this situation?

Note: The BLE peripheral device only responds to my commands, so I don't have to keep receive open all the time.

Parents Reply Children
  • Hi, 

    I am not getting any error codes. 

    When the BLE connection is established, I send the first packet over the IEEE-802.15.4 radio with the ieee_802154_transmit() function and it returns 1. After this transmission, the nrf_802154_transmitted() is called. The next time I call the ieee_802154_transmit function, the function returns 1, but the nrf_802154_transmitted function is not called. In my next transmit attempts, the ieee_802154_transmit function returns 0. During these processes, the BLE side continues to work without any problems.

  • 1) Do you have preprocessor define RAAL_SOFTDEVICE defined?

    2) Did you try to increase BLE connection interval?

  • 1) Yes, i have the RAAL_SOFTDEVICE define.

    2) In SDK_CONFIG I have set the NRF_BLE_SCAN_MAX_CONNECTION_INTERVAL define as 0xFF, this value was 0x1F before. After this change, I saw that the max interval was set to 0xCC in the BLE connection. However, I encountered the same result.

  • One thing that caught me when adding multiprotocol support to my application was the need to forward soc events to the arbiter. Have you done this?

    Ie you need a NRF_SDH_SOC_OBSERVER that calls nrf_raal_softdevice_soc_event_handler whenever a soc event occurs.

  • I added NRF_SDH_SOC_OBSERVER and soc_event_handler to the code.

    After calling nrf_802154_transmit function, soc_event_handler is called with evt_id = NRF_EVT_HFCLKSTARTED and transmitted from packet radio. Then after the nrf_802154_transmitted function is called, soc_event_handler is called with evt_id = NRF_EVT_HFCLKSTARTED. However, after that, when the nrf_802154_transmit function is called, there is no call to soc_event_handler.

    I guess the BLE side doesn't leave the radio to IEEE-802.15.4. What should I do to fix this?

Related