MPSL ESB and BLE timer problem.

I have installed NCS V3.0.0, nrf54L05

I'm currently working on the ESB and BLE coexistence feature, but I've run into some issues.

In ,config file
#
# Hardware selection (alter with care)
#
CONFIG_ESB_SYS_TIMER10=y
CONFIG_ESB_SYS_TIMER_INSTANCE=10
# end of Hardware selection (alter with care)
 I find that  TIMER10 is used by MPSL_TIMER0 and esb function simultaneously.
And in mpsl_timeslot_callback (    mpsl_timeslot_session_id_t session_id, uint32_t signal_type) funtion,
MPSL_TIMESLOT_SIGNAL_TIMER0 if happened only once, When i call app_esb_stop in MPSL_TIMESLOT_SIGNAL_TIMER0  to release MPSl_TIMER0.
 case MPSL_TIMESLOT_SIGNAL_TIMER0:
        if(1){//(radio_isr_remain_cnt > 0) {
            /* Request new timeslot when callback returns */
			signal_callback_return_param.params.request.p_next = &timeslot_request_normal;
			signal_callback_return_param.callback_action = MPSL_TIMESLOT_SIGNAL_ACTION_REQUEST;
            app_esb_stop();
        }else {
            signal_callback_return_param.callback_action = MPSL_TIMESLOT_SIGNAL_ACTION_END;
        }
        
        p_ret_val = &signal_callback_return_param;
And if Comment out app_esb_stop, esb fountion is ok,  but only run several seconds, and could receive event,And assert failed mpsl_init...  2, 62
MPSL_TIMESLOT_SIGNAL_TIMER0.
When I tried to change the ESB timer to timer020, the compilation succeeded, but the .config file still shows:
CONFIG_ESB_SYS_TIMER10=y
CONFIG_ESB_SYS_TIMER_INSTANCE=10.
I believe that after resolving the issue where both ESB and MPSL were using Timer10, MPSL will be able to trigger events MPSL_TIMESLOT_SIGNAL_TIMER0, and ESB functionality will also work properly.
Parents
  • Hi,

     

    For the nRF54L-series target, only TIMER10 is supported at the moment.

    As you have noticed, this conflicts with the MPSL timeslot timer, thus MPSL timeslot + ESB is not yet running as expected for the nRF54L-series devices.

     

    Since the radio power domain only has one timer instance:

    https://docs.nordicsemi.com/bundle/ps_nrf54L15/page/overview.html#ariaid-title2

     

    other timer options must be used from other power domains, which will require "PPIB", ie. bridging between the domains, in order to run properly:

    https://docs.nordicsemi.com/bundle/ps_nrf54L15/page/ppi.html

     

    This is a feature request that has been raised to the ESB team.

     

    Kind regards,

    Håkon

  • Thank you for your reply, it was like timely rain after a drought and answered my question precisely.
    There are still a few aspects I would like to confirm:
    1. If I want to solve this problem myself, could you please check if my understanding is correct?
      For example,
      void esb_ppi_for_wait_for_rx_set(void)
      {
      uint32_t channels_mask;
      
      nrf_radio_publish_set(NRF_RADIO, ESB_RADIO_EVENT_END, radio_end_timer_start);
      nrf_timer_subscribe_set(ESB_NRF_TIMER_INSTANCE, NRF_TIMER_TASK_START, radio_end_timer_start);
      
      channels_mask = (BIT(radio_end_timer_start));
      
      nrf_dppi_channels_enable(ESB_DPPIC, channels_mask);
      }
      changed to
      void esb_ppi_for_wait_for_rx_set(void)
      {
      // RADIO PD
      nrf_radio_publish_set(NRF_RADIO, NRF_RADIO_EVENT_END, radio_end_timer_start);
      nrf_ppib_subscribe_set(NRF_PPIB11, nrf_ppib_send_task_get(0), BRIDGE_CHANNEL);
      nrf_dppi_channels_enable(ESB_DPPIC, channels_mask);
      
      // PERI PD
      nrf_timer_subscribe_set(NRF_TIMER20, NRF_TIMER_TASK_START, 0);
      nrf_ppib_publish_set(NRF_PPIB21, nrf_ppib_receive_event_get(0), BRIDGE_CHANNEL);
      nrf_dppi_channels_enable(ESB_DPPIC, 0);
      }
    2. Regarding this issue, what is the solution from the ESB team, and when is it planned to be resolved? Will it be addressed in a new release?
      Is it possible to provide us with a version that solves the problem for early verification?
  • Hi,

     

    Alex said:
    If I want to solve this problem myself, could you please check if my understanding is correct?

    I would recommend using the default timer for ESB, and then rather use another timer for the timeslot.

     

    Let's see what domains are set for the different bridges:

    https://docs.nordicsemi.com/bundle/ps_nrf54L15/page/ppib.html#d1050e586

     

    You want to connect the "RADIO PD" to "PERI PD", which is PPIB11.

    Your logic looks correct.

     

    That being said; you can use nrfx_gppi API instead, as this shall handle PPIB bridging for you.

     

    Alex said:
    Regarding this issue, what is the solution from the ESB team, and when is it planned to be resolved? Will it be addressed in a new release?
    Is it possible to provide us with a version that solves the problem for early verification?

    I am sorry, but I do not have a timeline to communicate. The team has just recently started to look into what is required, so what I can tell you is that this is actively being developed.

     

    If this is crucial for your product, please feel free to send me a direct message with your location and I will share the details of your local regional sales manager, so that we can get a more detailed response on the matter.

     

    Kind regards,

    Håkon

  • A correction towards my comment here:

    Håkon Alseth said:
    That being said; you can use nrfx_gppi API instead, as this shall handle PPIB bridging for you.

    GPPI does not handle groups, so you will hit another issue with using the nrfx_gppi implementation, unfortunately.

     

    Kind regards,

    Håkon

  • GPPI does not handle groups, so you will hit another issue with using the nrfx_gppi implementation, unfortunately.

    nrfx_gppi will will hit another issue.Are there any other ways to do this? Could you operate it the same way as in my example function? I’m not familiar with this part, so I’m not sure if there are any issues.

     

    I would recommend using the default timer for ESB, and then rather use another timer for the timeslot.

    Because not every MPSL function is accompanied by source code, we’re afraid that any misunderstanding on our part could lead to further headaches. Could you please spell out, step by step, how to replace the MPSL timer?

  • Hi,

     

    I am so sorry, I was supposed to edit out this comment:

    Håkon Alseth said:
    I would recommend using the default timer for ESB, and then rather use another timer for the timeslot.

    This is not ideal either, due to the facts that you share.

    My observation here is based on checking the current DPPI API vs GPPI API for the nRF54L-series device specifically:

    Håkon Alseth said:
    GPPI does not handle groups, so you will hit another issue with using the nrfx_gppi implementation, unfortunately.

    There's a lack of certain APIs, mostly towards how groups are done. A workaround could be to loop over channels instead, but again; we're still in a discussion state, as we do not have proper support for this scenario.

    I fully understand your considerations here:

    Alex said:
    Because not every MPSL function is accompanied by source code, we’re afraid that any misunderstanding on our part could lead to further headaches. Could you please spell out, step by step, how to replace the MPSL timer?

    The main problem is that we currently do not support esb + timeslot at this time, so the path-of-least-resistance does point towards your original thought, ie. add another timer instance to ESB, and setup DPPI/PPIB.

     

    Kind regards,

    Håkon

Reply
  • Hi,

     

    I am so sorry, I was supposed to edit out this comment:

    Håkon Alseth said:
    I would recommend using the default timer for ESB, and then rather use another timer for the timeslot.

    This is not ideal either, due to the facts that you share.

    My observation here is based on checking the current DPPI API vs GPPI API for the nRF54L-series device specifically:

    Håkon Alseth said:
    GPPI does not handle groups, so you will hit another issue with using the nrfx_gppi implementation, unfortunately.

    There's a lack of certain APIs, mostly towards how groups are done. A workaround could be to loop over channels instead, but again; we're still in a discussion state, as we do not have proper support for this scenario.

    I fully understand your considerations here:

    Alex said:
    Because not every MPSL function is accompanied by source code, we’re afraid that any misunderstanding on our part could lead to further headaches. Could you please spell out, step by step, how to replace the MPSL timer?

    The main problem is that we currently do not support esb + timeslot at this time, so the path-of-least-resistance does point towards your original thought, ie. add another timer instance to ESB, and setup DPPI/PPIB.

     

    Kind regards,

    Håkon

Children
No Data
Related