698a0c3193
It adds unnecessary noise in the navigation pane. We don't do this for other chapters (e.g. kernel services don't say "Kernel Services System Threads" in the title, just "System Threads"). Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
321 lines
6.7 KiB
ReStructuredText
321 lines
6.7 KiB
ReStructuredText
.. _bluetooth-ctlr-arch:
|
|
|
|
LE Controller
|
|
#############
|
|
|
|
Overview
|
|
********
|
|
|
|
.. image:: img/ctlr_overview.png
|
|
|
|
#. HCI
|
|
|
|
* Host Controller Interface, Bluetooth standard
|
|
* Provides Zephyr Bluetooth HCI Driver
|
|
|
|
#. HAL
|
|
|
|
* Hardware Abstraction Layer
|
|
* Vendor Specific, and Zephyr Driver usage
|
|
|
|
#. Ticker
|
|
|
|
* Soft real time radio/resource scheduling
|
|
|
|
#. LL_SW
|
|
|
|
* Software-based Link Layer implementation
|
|
* States and roles, control procedures, packet controller
|
|
|
|
#. Util
|
|
|
|
* Bare metal memory pool management
|
|
* Queues of variable count, lockless usage
|
|
* FIFO of fixed count, lockless usage
|
|
* Mayfly concept based deferred ISR executions
|
|
|
|
|
|
Architecture
|
|
************
|
|
|
|
Execution Overview
|
|
==================
|
|
|
|
.. image:: img/ctlr_exec_overview.png
|
|
|
|
|
|
Architecture Overview
|
|
=====================
|
|
|
|
.. image:: img/ctlr_arch_overview.png
|
|
|
|
|
|
Scheduling
|
|
**********
|
|
|
|
.. image:: img/ctlr_sched.png
|
|
|
|
|
|
Ticker
|
|
======
|
|
|
|
.. image:: img/ctlr_sched_ticker.png
|
|
|
|
|
|
Upper Link Layer and Lower Link Layer
|
|
=====================================
|
|
|
|
.. image:: img/ctlr_sched_ull_lll.png
|
|
|
|
|
|
Scheduling Variants
|
|
===================
|
|
|
|
.. image:: img/ctlr_sched_variant.png
|
|
|
|
|
|
ULL and LLL Timing
|
|
==================
|
|
|
|
.. image:: img/ctlr_sched_ull_lll_timing.png
|
|
|
|
|
|
Event Handling
|
|
**************
|
|
|
|
.. image:: img/ctlr_sched_event_handling.png
|
|
|
|
|
|
Scheduling Closely Spaced Events
|
|
================================
|
|
|
|
.. image:: img/ctlr_sched_msc_close_events.png
|
|
|
|
|
|
Aborting Active Event
|
|
=====================
|
|
|
|
.. image:: img/ctlr_sched_msc_event_abort.png
|
|
|
|
|
|
Cancelling Pending Event
|
|
========================
|
|
|
|
.. image:: img/ctlr_sched_msc_event_cancel.png
|
|
|
|
|
|
Pre-emption of Active Event
|
|
===========================
|
|
|
|
.. image:: img/ctlr_sched_msc_event_preempt.png
|
|
|
|
|
|
Data Flow
|
|
*********
|
|
|
|
Transmit Data Flow
|
|
==================
|
|
|
|
.. image:: img/ctlr_dataflow_tx.png
|
|
|
|
|
|
Receive Data Flow
|
|
=================
|
|
|
|
.. image:: img/ctlr_dataflow_rx.png
|
|
|
|
|
|
Execution Priorities
|
|
********************
|
|
|
|
.. image:: img/ctlr_exec_prio.png
|
|
|
|
- Event handle (0, 1) < Event preparation (2, 3) < Event/Rx done (4) < Tx
|
|
request (5) < Role management (6) < Host (7).
|
|
|
|
- LLL is vendor ISR, ULL is Mayfly ISR concept, Host is kernel thread.
|
|
|
|
|
|
Lower Link Layer
|
|
****************
|
|
|
|
LLL Execution
|
|
=============
|
|
|
|
.. image:: img/ctlr_exec_lll.png
|
|
|
|
|
|
LLL Resume
|
|
----------
|
|
|
|
.. image:: img/ctlr_exec_lll_resume_top.png
|
|
|
|
.. image:: img/ctlr_exec_lll_resume_bottom.png
|
|
|
|
|
|
Bare metal utilities
|
|
********************
|
|
|
|
Memory FIFO and Memory Queue
|
|
============================
|
|
|
|
.. image:: img/ctlr_mfifo_memq.png
|
|
|
|
Mayfly
|
|
======
|
|
|
|
.. image:: img/ctlr_mayfly.png
|
|
|
|
|
|
* Mayfly are multi-instance scalable ISR execution contexts
|
|
* What a Work is to a Thread, Mayfly is to an ISR
|
|
* List of functions executing in ISRs
|
|
* Execution priorities map to IRQ priorities
|
|
* Facilitate cross execution context scheduling
|
|
* Race-to-idle execution
|
|
* Lock-less, bare metal
|
|
|
|
Legacy Controller
|
|
*****************
|
|
|
|
.. image:: img/ctlr_legacy.png
|
|
|
|
Bluetooth Low Energy Controller - Vendor Specific Details
|
|
*********************************************************
|
|
|
|
Hardware Requirements
|
|
=====================
|
|
|
|
Nordic Semiconductor
|
|
--------------------
|
|
|
|
The Nordic Semiconductor Bluetooth Low Energy Controller implementation
|
|
requires the following hardware peripherals.
|
|
|
|
.. list-table:: SoC Peripheral Use
|
|
:header-rows: 1
|
|
:widths: 15 15 15 10 50
|
|
|
|
* - Resource
|
|
- nRF Peripheral
|
|
- # instances
|
|
- Zephyr Driver Accessible
|
|
- Description
|
|
* - Clock
|
|
- NRF_CLOCK
|
|
- 1
|
|
- Yes
|
|
- * A Low Frequency Clock (LFCLOCK) or sleep clock, for low power
|
|
consumption between Bluetooth radio events
|
|
* A High Frequency Clock (HFCLOCK) or active clock, for high precision
|
|
packet timing and software based transceiver state switching with
|
|
inter-frame space (tIFS) timing inside Bluetooth radio events
|
|
* - RTC [a]_
|
|
- NRF_RTC0
|
|
- 1
|
|
- **No**
|
|
- * Uses 2 capture/compare registers
|
|
* - Timer
|
|
- NRF_TIMER0 or NRF_TIMER4 [1]_, and NRF_TIMER1 [0]_
|
|
- 2 or 1 [1]_
|
|
- **No**
|
|
- * 2 instances, one each for packet timing and tIFS software switching,
|
|
respectively
|
|
* 7 capture/compare registers (3 mandatory, 1 optional for ISR profiling,
|
|
4 for single timer tIFS switching) on first instance
|
|
* 4 capture/compare registers for second instance, if single tIFS timer
|
|
is not used.
|
|
* - PPI [b]_
|
|
- NRF_PPI
|
|
- 21 channels (20 [2]_), and 2 channel groups [3]_
|
|
- Yes [4]_
|
|
- * Used for radio mode switching to achieve tIFS timings, for PA/LNA
|
|
control
|
|
* - DPPI [c]_
|
|
- NRF_DPPI
|
|
- 20 channels, and 2 channel groups [3]_
|
|
- Yes [4]_
|
|
- * Used for radio mode switching to achieve tIFS timings, for PA/LNA
|
|
control
|
|
* - SWI [d]_
|
|
- NRF_SWI4 and NRF_SWI5, or NRF_SWI2 and NRF_SWI3 [5]_
|
|
- 2
|
|
- **No**
|
|
- * 2 instances, for Lower Link Layer and Upper Link Layer Low priority
|
|
execution context
|
|
* - Radio
|
|
- NRF_RADIO
|
|
- 1
|
|
- **No**
|
|
- * 2.4 GHz radio transceiver with multiple radio standards such as 1 Mbps,
|
|
2 Mbps and Coded PHY S2/S8 Long Range Bluetooth Low Energy technology
|
|
* - RNG [e]_
|
|
- NRF_RNG
|
|
- 1
|
|
- Yes
|
|
-
|
|
* - ECB [f]_
|
|
- NRF_ECB
|
|
- 1
|
|
- **No**
|
|
-
|
|
* - CBC-CCM [g]_
|
|
- NRF_CCM
|
|
- 1
|
|
- **No**
|
|
-
|
|
* - AAR [h]_
|
|
- NRF_AAR
|
|
- 1
|
|
- **No**
|
|
-
|
|
* - GPIO [i]_
|
|
- NRF_GPIO
|
|
- 2 GPIO pins for PA and LNA, 1 each
|
|
- Yes
|
|
- * Additionally, 10 Debug GPIO pins (optional)
|
|
* - GPIOTE [j]_
|
|
- NRF_GPIOTE
|
|
- 1
|
|
- Yes
|
|
- * Used for PA/LNA
|
|
* - TEMP [k]_
|
|
- NRF_TEMP
|
|
- 1
|
|
- Yes
|
|
- * For RC sourced LFCLOCK calibration
|
|
* - UART [l]_
|
|
- NRF_UART0
|
|
- 1
|
|
- Yes
|
|
- * For HCI interface in Controller only builds
|
|
* - IPC [m]_
|
|
- NRF_IPC [5]_
|
|
- 1
|
|
- Yes
|
|
- * For HCI interface in Controller only builds
|
|
|
|
|
|
.. [a] Real Time Counter (RTC)
|
|
.. [b] Programmable Peripheral Interconnect (PPI)
|
|
.. [c] Distributed Programmable Peripheral Interconnect (DPPI)
|
|
.. [d] Software Interrupt (SWI)
|
|
.. [e] Random Number Generator (RNG)
|
|
.. [f] AES Electronic Codebook Mode Encryption (ECB)
|
|
.. [g] Cipher Block Chaining (CBC) - Message Authentication Code with Counter
|
|
Mode encryption (CCM)
|
|
.. [h] Accelerated Address Resolver (AAR)
|
|
.. [i] General Purpose Input Output (GPIO)
|
|
.. [j] GPIO tasks and events (GPIOTE)
|
|
.. [k] Temperature sensor (TEMP)
|
|
.. [l] Universal Asynchronous Receiver Transmitter (UART)
|
|
.. [m] Interprocess Communication peripheral (IPC)
|
|
|
|
|
|
.. [0] :kconfig:option:`CONFIG_BT_CTLR_TIFS_HW` ``=n``
|
|
.. [1] :kconfig:option:`CONFIG_BT_CTLR_SW_SWITCH_SINGLE_TIMER` ``=y``
|
|
.. [2] When not using pre-defined PPI channels
|
|
.. [3] For software-based tIFS switching
|
|
.. [4] Drivers that use nRFx interfaces
|
|
.. [5] For nRF53x Series
|