nRF5 SDK

nRF5 SDK v17.1.1

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.

Note: The nRF5 SDK is in maintenance mode . For more information, see the nRF Connect SDK and nRF5 SDK statement . For new projects, we recommend the nRF Connect SDK .

This version of the SDK supports the following SoftDevices:

This SDK supports developing for nRF52810 on the nRF52 DK. See Developing for nRF52810 for details.

This SDK supports developing for nRF52811 on the nRF52840 DK. See Developing for nRF52811 for details.

This SDK supports developing for nRF52820 on the nRF52833 DK. See Developing for nRF52820 for details.

You can download the nRF5 SDK v17.1.1 from this Artifactory folder . The folder also contains a documentation zip package for offline use.

SDK Release Notes:

nRF5 SDK v17.1.1
------------------------
Release Date: March, 2025
 
Highlights:
 
- Fixed potential security vulnerabilities in the NFC Type 4 Tag library.

The following toolchains/devices have been used for testing and verification:
 
 - ARM: MDK-ARM version 5.25   
 - GCC: GCC ARM Embedded 9.2020-q2.major
 - IAR: IAR Workbench 7.80.4
 - SES: SES 5.42a


*****
Note for SEGGER Embedded Studio (SES) users:

Compatibility of SES projects:

Updates and fixes in the MDK used by SES break backwards compatibility
with old SES project files.
To use old projects in combination with this version of the SDK (MDK),
make the following updates:

1. In the flash_placement.xml file:
   MemorySegment name must be changed from "RAM" to "RAM1":
   <MemorySegment name="RAM1" start="$(RAM_PH_START)" size="$(RAM_PH_SIZE)">

2. In the .emProject file:
   In "linker_section_placements_segments" you must refer to "RAM1", replacing "RAM":
   linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM1 RWX 0x20000000 0x40000"

------------------

Observation of unaligned memory layout:
Certain SES projects that use section variables have been observed
to create memory sections that do not end on a word-aligned address.
This has caused issues when the hex file has been processed by a hex file utility tool
like mergehex.exe, which can produce a corrupted hex file.
The issue has been fixed in the SES section-placement file (flash_placement.xml)
by setting the memory section size attribute to 4.

*****
Note for IAR 8 users:

When using IAR 8, you must apply the following workaround in the MDK:

- Apply a patch to modules/nrfx/mdk/compiler_abstraction.h at line 140
 (fix the '__ALIGN()' macro definition): use the argument 'n' in the macro expansion instead of 'x'.

-------------------

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 instructions:
 1. Open the IAR project in IAR 8. The IAR workbench will automatically generate an IAR 8 compatible project file.
 2. 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).
 3. Save the project.
 4. 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: https://devzone.nordicsemi.com/f/nordic-q-a/31123/iar-ewarm-8-22-1-complains-about-cmsis_iar-h
      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 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 v7.2.x
 - S113 v7.2.x
 - S122 v8.x.x
 - S132 v7.2.x
 - S140 v7.2.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)
- PCA10100 (support in selected examples)
- PCA10100E (nRF52820 emulation on PCA10100)
- PCA10059 (support in selected examples)
- D52DK1 from Garmin Canada (only for ANT examples)
- PCA10112 (nRF52840 with the nRF2140 front-end chip)
  
For other devices and boards, see the SDK documentation, section "Using
the SDK with other boards".

*** Bug fixes
****************

- Added protection in the Type 4 Tag library against a possible memory overwrite through a malformed "Update Binary" command.
- Added protection in the Type 4 Tag library against a possible memory leakage when a reader sends the "Read Binary" command before selecting the NDEF application or any file.

*** Known Issues
****************
 
** General **
 
- 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.
   
- usbd_msc example has a limitation. With setting "APP_USBD_CONFIG_EVENT_QUEUE_ENABLE = 0", when USB
  cable is unplugged and re-plugged, the application goes into an endless loop.
  This is due to an issue in the unsupported block device library.
   
** Bluetooth Low Energy **

- 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.
- BLE Interactive CLI example: the command to set a custom ATT MTU only takes
  effect on the subsequent connection and the updated MTU parameter is not
  maintained in further connections with the same peer, even when bonded.
- ANT Shared Channels example: when testing BLE connection with an Android device,
  the link might be terminated by Android due to unhandled LL requests.
- Bluetooth ANCS example: when connected from iPhone and pressing DK buttons,
  the example may assert before the BLE link is authenticated.

** Bluetooth Low Energy examples **

- NRFFOSDK-13653: Using the Bluetooth LE privacy feature is recommended in the following ways:
    - In the Scanner role:
      In active scanning do not use accept list (whitelist) or only use passive scanning.
    - In the Advertiser role:
      Only use non-scannable advertising or limit to minimum the duration 
	  of connectable and scannable advertising (e.g. just for establishing the connection).
- NRFFOSDK-13685: The examples do not check the security requirements on notifications
  received before encryption is established, as is mandated in the
  Bluetooth Core Spec 5.3 3.C.10.3.1.1.
- NRFFOSDK-13686: When reconnecting to a bonded peer, the examples do not check whether
  encryption is enabled before sending notifications/indications on a protected characteristic,
  as is mandated in the Bluetooth Core Spec 5.3 3.C.10.3.1.1.
- NRFFOSDK-13697: Example ble_app_buttonless_dfu fails when booting up when built targeting
  PCA10040E running on nRF52832 Revision 3.
  Workaround: Run the example on a DK with nRF52832 Revision 2.
- NRFFOSDK-13713: The serialized target of the Heart Rate example for the S112 SoftDevice
  and the HCI transport (ble_app_hrs/pca10040/ser_s112_hci) asserts when trying to
  establish a Bluetooth Low Energy connection with it.

** ANT **

- NRFFOSDK-13710: The Heart Rate Monitor Relay Application might disconnect the BLE link
  if long connection interval is used and an ANT channel reopens after a search timeout.

** DFU **

- NRFFOETT-2579: If the transfer is aborted when transferring a SoftDevice to a device
  with no SoftDevice present (using sd-req = 0), the device can erroneously think that the SoftDevice
  was transferred correctly. On smaller devices there could be no room
  to transfer the SoftDevice again.
  Workaround: Transfer any application with sd-req set to 0.
  The application must be at least 3 pages (0x3000 bytes) long.
  The application will overwrite the SoftDevice, allowing it to be retransferred.

** Crypto **
 
- The nrf_crypto CLI example may fail when using ecc private key converted
  from raw function for specific curve types.
 
 
** 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.
- LEDS_OFF, LEDS_ON, LED_IS_ON, LEDS_INVERT, LEDS_CONFIGURE macros defined in boards.h
  work only with pins on port 0