| 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. |