Hi,
We are on NCS v2.9.1
We have an existing project on based on the nrf52832, which we use as a hci_spi controller. There, CONFIG_BT_LL_SW_SPLIT is set.
We are now porting that to the nrf54L15 for use on future projects.
When building, we get the following error message:gen_isr_tables.py: error: multiple registrations at table_index 227 for irq 227 (0xe3)
Existing handler 0x5653d, new handler 0x5fa19
Has IRQ_CONNECT or IRQ_DIRECT_CONNECT accidentally been invoked on the same irq multiple times?
The Bluetooth LLL registers an interrupt with the GRTC, and the nrfx_grtc_timer does as well:
- zephyr/subsys/bluetooth/controller/ll_sw/nordic/lll/lll.c:241
- zephyr/drivers/timer/nrf_grtc_timer.c:472
Switching to SOFTDEVICE instead of BT_LL_SW_SPLIT, the issue goes away, and the application seems to function ok. But since I have now replaced half of the Bluetooth stack, I need to do a lot of verification to make sure everything is still fine. The only additional warning generated by our build is this:
warning: BT_CTLR_RX_BUFFERS (defined at subsys/bluetooth/controller/Kconfig:225) was assigned the
value '9' but got the value ''. Check these unsatisfied dependencies: BT_LL_SW_SPLIT (=n). See
docs.zephyrproject.org/.../kconfig.html and/or look up
BT_CTLR_RX_BUFFERS in the menuconfig/guiconfig interface. The Application Development Primer,
Setting Configuration Values, and Kconfig - Tips and Best Practices sections of the manual might be
helpful too.
But I assume I just have to find an appropriate config for the softdevice, if there is any.
-------------------------------------
I have managed to recreate the exact same issue using the hci_spi sample in zephyr, for easier debugging. The sample is under zephyr/samples/bluetooth/hci_spi.
I have added a nrf54l15dk_nrf54l15_cpuapp_ns.overlay and configurations for both using LL_SW_SPLIT or SOFTDEVICE. Please see the attached zip files:
7838.hci_spi_softdevice.zip 0005.hci_spi_ll_sw_split.zip
build with west build -b nrf54l15dk/nrf54l15/cpuapp/ns
The same IRQ error is generated in the ll_sw_split configuration. The build succeeds in the softdevice configuration.
The only difference between them is this:
LL_SW_SPLIT overlay:
LL_SW_SPLIT prj.conf:
SOFTDEVICE overlay:
SOFTDEVICE prj.conf:
------------------------------------------------------
I tried using CONFIG_SHARED_INTERRUPTS=y. This makes the LL_SW configuration buildable, but it behaves very weirdly at run-time:
1. It is way harder to establish a connection.
2. When it is established, it drops almost immediately with the following warning printed:
[00:01:34.744,537] <inf> ble_conn: Connected. Peer address: D8:F8:83:0F:6D:DC (public)
[00:01:34.745,025] <inf> ble_ctrl: BLE connected
[00:01:34.988,616] <wrn> bt_conn: conn 0x200101b0 failed to establish. RF noise?
[00:01:34.988,952] <inf> ble_conn: Disconnected. Peer address: D8:F8:83:0F:6D:DC (public) (reason 3e)
I also do not see any way to configure the LLL and GRTC_TIMER drivers to use different interrupts of the GRTC (the nrf54l15 datasheet says there are 4 GRTC interrupts)
------------------------------------------------------
So, our questions:
1. is the only working solution to use the softdevice?
2. Can we configure LLL or GRTC_TIMER to use different interrupts?
3. Is this a known issue? Can we expect it to be fixed in the next NCS release?
4. Did we miss anything else? Is there some other way to make this work?
Note:
I am not quite sure why the original nrf52832 code uses CONFIG_BT_LL_SW_SPLIT, but we would like to keep the same configuration, since we have tuned a lot of the BT configs, and are unsure how sofdevice will handle them.
Thank you and best regards,
Tjaž Vračko