meta data for this page
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
sw:zephyr:hciuart [2025/05/03 12:40] – niziak | sw:zephyr:hciuart [2025/05/03 20:56] (current) – niziak | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== hciuart ====== | ====== hciuart ====== | ||
- | ===== ===== | + | ===== |
< | < | ||
Line 19: | Line 19: | ||
rtt:~$ [00: | rtt:~$ [00: | ||
</ | </ | ||
+ | |||
+ | <file c zephyr/ | ||
+ | #define EVENT_OVERHEAD_PREEMPT_US | ||
+ | #define EVENT_OVERHEAD_PREEMPT_MIN_US 0 | ||
+ | |||
+ | #if defined(CONFIG_BT_CTLR_XTAL_ADVANCED) && (EVENT_OVERHEAD_PREEMPT_US <= EVENT_OVERHEAD_PREEMPT_MIN_US) | ||
+ | uint32_t overhead; | ||
+ | |||
+ | overhead = lll_preempt_calc(ull, | ||
+ | /* check if preempt to start has changed */ | ||
+ | if (overhead) { | ||
+ | LL_ASSERT_OVERHEAD(overhead); | ||
+ | |||
+ | radio_isr_set(lll_isr_abort, | ||
+ | radio_disable(); | ||
+ | |||
+ | return -ECANCELED; | ||
+ | } | ||
+ | #endif /* CONFIG_BT_CTLR_XTAL_ADVANCED */ | ||
+ | |||
+ | </ | ||
+ | |||
+ | <file c zephyr/ | ||
+ | #if defined(CONFIG_BT_CTLR_ASSERT_OVERHEAD_START) | ||
+ | #define LL_ASSERT_OVERHEAD(overhead) \ | ||
+ | LL_ASSERT_MSG(false, | ||
+ | __func__, HAL_TICKER_TICKS_TO_US(overhead)); | ||
+ | #else /* !CONFIG_BT_CTLR_ASSERT_OVERHEAD_START */ | ||
+ | #define LL_ASSERT_OVERHEAD(overhead) ARG_UNUSED(overhead) | ||
+ | #endif /* !CONFIG_BT_CTLR_ASSERT_OVERHEAD_START */ | ||
+ | </ | ||
+ | |||
+ | <file kconfig zephyr/ | ||
+ | config BT_CTLR_ASSERT_OVERHEAD_START | ||
+ | bool " | ||
+ | default y | ||
+ | help | ||
+ | Assert on increased Radio Event Prepare callback latencies due to | ||
+ | CPU usage overheads in the Controller implementation. | ||
+ | |||
+ | Disabling this option permits the Controller to gracefully skip radio | ||
+ | events that are delayed due to CPU usage latencies; as long as the | ||
+ | radio event skips are not for every consecutive radio event interval, | ||
+ | otherwise leading to remote supervision timeout and possible missing | ||
+ | local disconnect events. | ||
+ | </ | ||
+ | |||
+ | Similar reports: | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | Workaround / fixes: | ||
+ | * reduce CPU usage: | ||
+ | * disable packet hexdump to RTT | ||
+ | * disable BT debug logs | ||
+ | * lower all NRF peripherial IRQ prio to 5 (override.dtsi) | ||
+ | * set radio IRQ priority to 0 (dts) | ||
+ | |||
===== Out-of-order packet arrived ===== | ===== Out-of-order packet arrived ===== |