You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.6 KiB
67 lines
2.6 KiB
Configure clock for controller
|
|
------------------------------
|
|
|
|
The NimBLE stack uses OS cputime for scheduling various events inside
|
|
controller. Since the code of controller is optimized to work with 32768
|
|
Hz clock, the OS cputime has to be configured accordingly.
|
|
|
|
To make things easier, controller package (``net/nimble/controller``)
|
|
defines new system configuration setting ``BLE_LP_CLOCK`` as sets it to
|
|
``1`` so other packages can be configured if necessary. The next section
|
|
describes configuration required for controller to work properly.
|
|
|
|
System configuration
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
**Note:** All BSPs based on nRF5x have below settings automatically
|
|
applied when ``BLE_LP_CLOCK`` is set, there is no need to configure this
|
|
in application.
|
|
|
|
The following things need to be configured for NimBLE controller to work
|
|
properly:
|
|
|
|
- OS cputime frequency shall be set to ``32768``
|
|
- OS cputime timer source shall be set to 32768 Hz clock source
|
|
- Default 1 MHz clock source can be disabled if not used by application
|
|
- 32768 Hz clock source shall be enabled
|
|
- Crystal settling time shall be set to non-zero value (see below)
|
|
|
|
For example, on nRF52 platform timer 5 can be used as source for 32768
|
|
Hz clock. Also, timer 0 can be disabled since this is the default source
|
|
for OS cputime clock and is no longer used. The configuration will look
|
|
as below:
|
|
|
|
::
|
|
|
|
syscfg.vals:
|
|
OS_CPUTIME_FREQ: 32768
|
|
OS_CPUTIME_TIMER_NUM: 5
|
|
TIMER_0: 0
|
|
TIMER_5: 1
|
|
BLE_XTAL_SETTLE_TIME: 1500
|
|
|
|
On nRF51 platform the only difference is to use timer 3 instead of timer
|
|
5.
|
|
|
|
On platforms without 32768 Hz crystal available it usually can be
|
|
synthesized by setting ``XTAL_32768_SYNTH`` to ``1`` - this is also
|
|
already configured in existing BSPs.
|
|
|
|
Crystal settle time configuration
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
The configuration variable ``BLE_XTAL_SETTLE_TIME`` is used by the
|
|
controller to turn on the necessary clock source(s) for the radio and
|
|
associated peripherals prior to Bluetooth events (advertising, scanning,
|
|
connections, etc). For the nRF5x platforms, the HFXO needs to be turned
|
|
on prior to using the radio and the ``BLE_XTAL_SETTLE_TIME`` must be set
|
|
to accommodate this time. The amount of time required is board
|
|
dependent, so users must characterize their hardware and set
|
|
``BLE_XTAL_SETTLE_TIME`` accordingly. The current value of 1500
|
|
microseconds is a fairly long time and was intended to work for most, if
|
|
not all, platforms.
|
|
|
|
Note that changing this time will impact battery life with the amount
|
|
depending on the application. The HFXO draws a fairly large amount of
|
|
current when running so keeping this time as small as possible will
|
|
reduce overall current drain.
|
|
|