Documentation library

nRF5 SDK v15.3.0

The nRF5 SDK documentation includes descriptions and other reference material to help you understand the various components of the SDK. Examples are provided for development purposes only and should always be tested with your design.

See Getting Started for instructions on how to run the provided examples.

This version of the SDK supports the following SoftDevices:

This SDK supports developing for nRF52810 on the PCA10040 board. See Developing for nRF52810 for details.

This SDK supports developing for nRF52811 on the PCA10056 board. See Developing for nRF52811 for details.

To download a copy of the SDK documentation for offline use, go to

SDK Release Notes:

nRF5 SDK v15.3.0
Release Date: Week 7, 2019


- Added support for a new chip - nRF52811.
- Added support for two new ANT SoftDevices: S312 targeting nRF52810 and nRF52832, and S340 targeting nRF52840.
- Added back support for the ANT SoftDevice S332 v6.1.1, as well as updated the latest SoftDevices S112, S132, S140 and S212 v6.1.1.
- Updated the SDFU solution with ANT transport layer.
- Updated DTM to support nRF52811, and updated the existing code to correctly handle Anomaly 172.

The following toolchains/devices have been used for testing and verification:

 - ARM: MDK-ARM version 5.25
 - GCC: GCC ARM Embedded 7.2018q2.update
 - IAR: IAR Workbench 7.80.4
 - SES: SES 4.12
Note: The selected GCC version has shown instabilities when using the Link Time Optimization feature, and using the feature is not recommended.

Note for IAR 8 users:
(Libraries for IAR 8 require wchar_t to be of size 32 bits while IAR 7 requires 16 bits).
To run a project using IAR 8, follow these intructions:
 - Open the IAR project in IAR 8. The IAR workbench will automatically generate an IAR 8 compatible project file.
 - If the project contains one of the precompiled libraries listed below, replace it with the IAR 8 compatible alternative
   (there are no projects targeting nRF51 in this SDK).
 - Save the project.
 - When building the project, you might get the warning: "The header file 'cmsis_iar.h' is obsolete and should not be used. [...]".
    - The problem is described in DevZone post:
      The solution is to remove all occurrences of #include <cmsis_iar.h>.
The affected libraries are:
 - micro-ecc crypto:
    - IAR7: Includes library located in the folder named “…_iar\…”.
    - IAR8: Switch to using the library from the folder named “…_armgcc\…”.
 - nrf_cc310, nrf_cc310_bl, and nrf_oberon:
    - IAR7: Link to a library where “short_wchar” is part of the folder name.
    - IAR8: Link to a library without “short_wchar” in part of the folder name.
 - Gazell, NFC Tag, and 802.15.4:
    - IAR7: Includes the library where the file name ends with “_iar”.
    - IAR8: Switch to using the library with similar file name that ends with “_gcc”.

Supported SoftDevices:
 - S112 v6.1.x
 - S132 v6.1.x
 - S140 v6.1.x
 - S212 v6.1.x
 - S312 v6.1.x
 - S332 v6.1.x
 - S340 v6.1.x
Supported boards:
 - PCA10040
 - PCA10040E (nRF52810 emulation on PCA10040)
 - PCA10056
 - PCA10056E (nRF52811 emulation on PCA10056)
 - PCA10059 (support in selected examples)
 - D52DK1 from Garmin Canada (only for ANT examples)

For other devices and boards, see the SDK documentation, section "Using
the SDK with other boards".

*** New features

** ANT **

- Added the new ANT Secure DFU Bootloader example.
  The example demonstrates how to use the new ANT transport with Secure DFU components
  (with support only for SES and GCC toolchains).
- Removed legacy ANT bootloader solution.

** Drivers and libraries **

- nrf_cli can now prompt and autocomplete both sorted and unsorted subcommands.
- nrf_libuarte and nrf_libuarte_async now support multiple instances.

** BLE**

- nrf_ble_lesc (part of the Peer Manager) now supports the LESC OOB pairing mode.
  The ble_nfc_pairing_reference_c example demonstrates how to pass the OOB data to the module.

** DFU **

- Added the option to perform signature validation of the application on each boot.
  This functionality requires nrfutil version 5.0.0 or higher.
- The DFU procedure can now mandate strictly increasing application versions.
- Added the option to send applications that will not be activated, but will remain in slot 1 ("external applications").
  This functionality requires nrfutil version 5.0.0 or higher.
- Added masking of GPREGRET and GPREGRET2 registers, enabling the upper 3 bytes of each register to be used by the application independently of the bootloader.

** Crypto **

- Added nrf_crypto backend support for Infineon OPTIGA™ Trust X devices (selected features).
- Added new example to showcase Infineon OPTIGA Trust X functionality: examples/crypto/ifx_optiga_custom_example.

*** Changes

** DFU **

- Turned off Link Time Optimization in all DFU projects due to instabilities in the supported GCC compiler.

** Drivers and libraries **

- nrf_cli: CLI will now automatically add the `\r` character before each printed `\n` character.
  This feature can be switched off in sdk_config using flag `NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF`.
- USB: A complete list of changes is available under this link:

** NFC **

- The NFC libraries (nfc_t2t_lib and nfc_t4t_lib) now use the NFCT driver instead of the NFC HAL modules (hal_nfc_t2t and hal_nfc_t4t). 
  The NFCT driver is a part of nrfx repository.
- Replaced hal_nfc_t2t and hal_nfc_t4t components with the nrfx_nfct driver.
- Added the NFC platform module (nfc_platform) to abstract runtime environment specific implementation from the driver.
  HFCLK activation, required for NFC to operate correctly, is managed in this module.
- Removed the nfc_fixes.h file with NFC workaround description. The content of this file was moved to nrfx_nfct.h.

** Crypto **

- nrf_oberon, nrf_cc310, and nrf_cc310_bl libraries have changed naming and placement compared to the previous release.
  They are now available in the following folder scheme:
  - GCC and IAR 8.x: lib/<arch>/hard-float/<lib_name>.a
  - IAR 7.80.x: lib/<arch>/hard-float/short-wchar/<lib_name>.a
  - Keil: lib/<arch>/hard-float/short-wchar/<lib_name>.lib
  Due to this naming convention change, updated nrf_cc310 and nrf_cc310_bl library version to 0.9.12.
  Due to this naming convention change, updated nrf_oberon library version to 2.0.7.
- Changed ECC Public Key Validation from "Full" to "Partial" in nrf_crypto backend for ARM CC310.
  This improves LESC pairing and ECDSA verify timing.

*** Bug fixes

** Drivers and libraries **

- nrf_cli: The module can now be used with terminals with no standard background color (for example, white).
- USB: Fixed a bug where USB IRQ was not cleared after unplugging the USB cable.
- Fixed an issue where NRF_LOG_INIT(timestamp, frequency) failed to compile if the logger was disabled.
- Fixed a compilation failure issue when using NRF_LOG_HEXDUMP_WARNING.
- Fixed a scenario where the emulated project delay function (nrfx_coredep_delay_us) did not work correctly.

** BLE **

- Peer Manager:
   - Slave Security Requests received during a pairing or encryption procedure will now be ignored (to align with the BLE specification).
   - Fixed a bug where Peer Manager would misinterpret a peer central's ability to resolve resolvable addresses in directed advertisements.
   - Fixed a bug where Peer Manager would sometimes give a fatal error if the link disconnected during a pairing procedure.
   - Fixed a bug where flash could be full but no Peer Manager event was sent.
   - Fixed a bug where Peer Manager would silently drop Service Changed indications if an ATT MTU exchange was happening at the same time.
- Eddystone:
   - Fixed a bug where EID was not correctly updated.
   - Fixed bug where factory reset would not work correctly when followed by an immediate disconnect.

** DFU **

- Various security improvements and fixes.
- Fixed various bugs in background DFU.
- Fixed bugs that appeared when combining transports (for example, UART + BLE).

** DTM **

- Fixed a bug which made the workaround for nRF52840 Anomaly 172 non-functional.

** Serialization **

- Fixed an issue with HCI transport sending redundant bytes on certain packet payloads containing escape codes.
- Fixes in serialization codecs.

*** Known Issues

** General **

- Programming and debugging the nRF52811 chip may require an update of the J-Link firmware in order to recognize the new chip.
- The workaround for Anomaly 198 for nRF52840 SPIM3 peripheral that has been implemented in nrfx_spim cannot be used with a SoftDevice.
  Flag NRFX_SPIM3_NRF52840_ANOMALY_198_WORKAROUND_ENABLED must be set to zero.
  The workaround based on a dedicated RAM block for SPIM3 must be used instead.

** BLE **

- GATTC: the ble_gattc_service_t::uuid field is incorrectly populated in the BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP event
  if the sd_ble_gattc_primary_services_discover() or sd_ble_gattc_read() are called when a Primary Service Discovery by Service UUID is already ongoing.
  When the application has called sd_ble_gattc_primary_services_discover(), it should wait for the BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP event before calling sd_ble_gattc_primary_services_discover() or sd_ble_gattc_read().
- The TFTP Background DFU example has known instabilities.

** Drivers and libraries **

- The SAADC driver does not handle detection limits 'high' and 'low' correctly if SAADC resolution is greater than 10 bits.
- USBD: 
  - The library may handle Remote Wakeup incorrectly.
  - Issuing a SET_ADDRESS(0) request does not cause the device to change its state to default.
  - The device does not STALL when a DATA transaction is received outside of SETUP. It ACKs instead.

** IoT **

- For Linux kernels >= 4.12, The BLE_6LOWPAN_LEGACY_MODE configuration parameter must be set to 0 (the default is 1).
  The default value must be kept for Linux kernels < 4.12.
  With this configuration set up incorrectly, the examples do not work and are difficult to debug.