nRF5 SDK for Thread and Zigbee v4.0.0
Introduction

The nRF5 Software Development Kit for Thread and Zigbee helps you when developing products for these protocols with Nordic Semiconductor's advanced nRF52 devices.

Both the Zigbee stack and the Thread stack and examples are production level.

Note
When developing products using the Zigbee stack, in several .h files you will come across references to snippets. The files containing these snippets are not included in the SDK package. Check the API reference for the related .h file to see the snippet code usage.

Release Notes:

nRF5 SDK for Thread and Zigbee v4.0.0
-------------------------------------
Release Date: Week 1, 2020

This release is the production-ready release of the Thread features available on the nRF52840
and nRF52811 devices. It also includes an experimental release of the Thread features available
on the nRF52833 device, as it has not been run for internal or external certification tests.

This release is the production-ready release of the Zigbee features available on the nRF52840
and nRF52833 devices. The Zigbee stack is based on the ZBOSS stack v3.3 and conforms
to Zigbee PRO R22 and Green Power Proxy Basic specifications.

The Zigbee stack provided by the release has been successfully tested in Zigbee Alliance Authorized
Test Laboratory and is pending a formal approval from Zigbee Alliance as a Zigbee Compliant Platform.

The Nordic Zigbee software solution released as part of the nRF5 SDK for Thread and Zigbee
incorporates the Base Device Behavior specification (ver. 1.0) and the ZCL specification (ver. 7).
This enables to build, certify, and ship commercial Zigbee 3.0 Certified Products.

Software components and application examples for MDK, peripherals, BLE, and NFC
have been inherited from the nRF5 SDK v16.0.0. Minor changes to the SDK v16.0.0 are
summarized in the following section.

*** Changes to nRF5 SDK v16.0.0
*******************************
- Eddystone advertising parameters were adjusted for multiprotocol examples, so the delay caused
  by timeslot assignment does not affect intervals between BLE advertisements.
- nRF CLI over USB CDC backend was extended to handle the USB port close event.
- USB CDC drivers were extended by Thread and Zigbee device VIDs and PIDs.
- nRF Oberon libraries were updated from revision 3.0.1 to revision 3.0.3.
- nRF DFU API was extended by a function to restart the DFU image download.
- Added support for the Arduino joystick shield.


****** Multiprotocol limitations ******
- Interrupts with IRQ priority 2 and 3 must not be used for multiprotocol examples.
- Because of limitations of simultaneous operation of the SoftDevice frontend
  and the 802.15.4 frontend:
  - Do not use the PPI channels reserved by the SoftDevice (17, 18, 19).
  - The SoftDevice and the 802.15.4 driver must use separate sets of PPI channels,
    for example (1, 2) and (3, 4).
  - The SoftDevice and the 802.15.4 driver must use separate sets of GPIOTE channels,
    for example 4 and (5, 6, 7).
- Due to a limitation of the SoftDevice, depending on the configured timeslot timeout
  of the nRF IEEE 802.15.4 radio driver, BLE activity may cause 100% CPU utilization
  or increase switching times. The details are presented in the official documentation
  in the Multiprotocol considerations section, available in Thread and Zigbee shared features
  > Multiprotocol support with BLE/Bluetooth > Dynamic multiprotocol.
- Three-pin Front End Module is not supported due to SoftDevice limitations.


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


****** Release highlights ******
- Added support for nRF52833 and the related examples.
- Added support for the nRF21540 Front End Module with examples for the nRF21540 Development Kit (PCA10112).
- Updated SDK base to the nRF5 SDK 16.0.0 (including SoftDevice S140 7.0.1).
- Thread:
  - Integrated nrf_security in OpenThread for nRF52840 (https://github.com/NordicPlayground/nrfxlib/tree/master/nrf_security).
  - Added support for DHCPv6 Client and DHCPv6 Server.
- Zigbee:
  - Added support for Zigbee PRO R22 specification.
  - Added experimental support for Work With All Hubs (WWAH) cluster and extensions in the stack.


****** Thread and Zigbee common features ******
- Added initial support for nRF21540 Front End Module. The SDK includes out-of-the-box support
  for the GPIO handling. Control over SPI will be added in the future.


****** Thread ******
The Thread examples in this SDK are built on top of the OpenThread stack: https://github.com/openthread/openthread.

*** New features
****************
- Added support for nRF52833, with examples.
- Integrate nrf_security for nRF52840 (https://github.com/NordicPlayground/nrfxlib/tree/master/nrf_security)
- Added support for DHCPv6 Client and DHCPv6 Server.

*** Changes
***********
- Updated OpenThread libraries in the SDK.
- Updated OpenThread and wpantund components in the Nordic OpenThread Border Router.
- Updated examples to align with API changes in the new OpenThread stack.
- OpenThread libraries have been built with External Heap option (EXTERNAL_HEAP=1).
  All bare-metal examples in the SDK use nrf_mem_manager for heap allocation.
  Examples with FreeRTOS use the internal FreeRTOS heap implementation instead.
- Removed a set of certification libraries. Now the same set of the OpenThread libraries is used
  for examples and internal certification tests.
- Removed a set of OpenThread thread-safe libraries with concurrent access
  to cryptographic functions for RTOS environments (due to the introduction of nrf_security).

*** Limitations
***************
- Thread initialization must be done outside of the FreeRTOS thread,
  that is before the FreeRTOS thread is created.
- The nrf_security with hardware acceleration for cryptographic operations is not supported
  on Keil compiler.
- Due to flash size restrictions, BLE HRS and Thread CoAP Server with FreeRTOS Example
  and BLE Proximity and Thread CoAP Server Example are supported only on nRF52840.
- OTA DFU: Migration from the nRF5 SDK for Thread and Zigbee version
  earlier than v4.0.0 is not supported for multiprotocol applications. Migration from the
  nRF5 SDK for Thread and Zigbee version earlier than v4.0.0 for Thread only applications
  is supported, however has not been tested.

*** Known issues
****************
- Nordic OpenThread Border Router occasionally fails to initialize the access point service.
  Currently, a reboot is required in such situations.
- To use Ethernet connection on Nordic OpenThread Border Router, the Ethernet cable must be
  plugged in before the boot.
- Re-initialization of the OpenThread stack and platform can be done only
  for single PHY configuration. For multiprotocol configuration, the full reset of the MCU is needed.
- The NFC Commissiond daemon on Nordic OpenThread Border Router does not turn on automatically
  after the boot. The daemon starts when wpantund indicates that NCP is in the "associated" state.
  Due to the bug, the first state notification from wpantund is missed.
  As a workaround, either push physical reset button on NCP after Nordic OpenThread Border Router
  has booted, or run the following commands manually:
    systemctl stop nfccommissiond
    systemctl restart nfccommissioner
    systemctl start nfccommissiond
- The nrf_security library used in nRF52840 does not clean CryptoCell pending IRQ bit
  in NVIC register. Clearing it is necessary to put MCU into the sleep mode in multiprotocol
  examples. A workaround for this issue has been implemented in the thread_sleep function.

*** Compatible tools
********************
- nrfutil-5.1.0 (available from https://github.com/NordicSemiconductor/pc-nrfutil)
- nRF Thread Topology Monitor (nRF TTM) v0.12.0-1.alpha
- RaspPi_OT_Border_Router_Demo_v4.0.0-1.alpha.img

These tools are available from https://www.nordicsemi.com/thread#Downloads and https://www.nordicsemi.com/eng/Products/nRF-Thread-Topology-monitor#Downloads

The following OpenThread commit has been used to generate pre-built Thread stack libraries,
and for testing and verification:
- https://github.com/openthread/openthread/commit/8a1992e2e42fb707babe9491a6a1456e553490e8

The following nRF IEEE 802.15.4 radio driver has been included in the pre-built Thread stack
libraries, and used for testing and verification:
- https://github.com/NordicSemiconductor/nRF-IEEE-802.15.4-radio-driver/commit/58c95b28cb2f3cf0f6585b3dfbddbd35516f54e6 (v1.6.1)

The following wpantund and Border Router commits have been used as part of the
Nordic OpenThread Border Router solution, and for testing and verification:
- https://github.com/openthread/wpantund/commit/87c90eedce0c75cb68a1cbc34ff36223400862f1
- https://github.com/openthread/ot-br-posix/commit/a4dd306bf1ee6229c3d2bd329a243224e9d61723
- https://github.com/openthread/openthread/commit/8a1992e2e42fb707babe9491a6a1456e553490e8

The following nRF Sniffer for 802.15.4 commit has been used as part of the
nRF Sniffer for 802.15.4 solution, and for testing and verification:
- https://github.com/NordicSemiconductor/nRF-Sniffer-for-802.15.4/commit/dff6c8d7170a034b09ce2ece361af77c72be4f37

*** Certification
*****************
The nRF52840 device has been officially certified with a previous version of the OpenThread stack
as Thread Group Certified Component. When developing a product with the current version
of OpenThread, you need to apply for product certification.

The included stack was internally tested using Thread V1.1 Test Harness 1.4.0 R49.3 and the complete
Thread Test Bed.

The DUT device in the SoC architecture has been tested in the following combinations:
- PCA10056 v1.0.0 - GCC libraries

All 158 out of 158 tests passed.

The test Router_5_6_3 occasionally fails due to the incorrect test result. This problem was resolved
by the Thread Group: https://threadgroup.atlassian.net/browse/TSTBED-108. For internal certification,
the test script for Router_5_6_3 was replaced with the one attached in the link above.

*** Environment
***************
The following toolchains have been used for testing and verification of the examples:
- GCC: GCC ARM Embedded 7.2018 q2 update
- IAR: IAR Workbench 7.80.4
- SES: SES 4.18
- ARM: MDK-ARM version 5.25
- nRF Command Line Tools 10.3.0
- J-Link: 6.44e

Supported SoftDevices for multiprotocol support:
- S140 v7.0.1

Supported boards:
- PCA10056 (from version 1.0.0)
- PCA10056e
- PCA10059
- PCA10068
- PCA10100
- PCA10112


****** Zigbee ******
This is a production-ready release of the Zigbee features available on the nRF52840
and nRF52833 devices.

*** New features
****************
- Added support for Zigbee PRO R22 specification.
- Added support for nRF52833, with examples.
- Added implementation of the default signal handler.

*** Changes
***********
- Updated examples to align with API changes in the ZBOSS stack v3.3.

*** Limitations
***************
- Dynamic Memory Config (KRKNWK-3282): Binding table entry number with unique source address,
  endpoint, and cluster ID is limited to 32.
- ZB KERNEL (KRKNWK-3263): Zigbee performance might be affected by heavy flash operations.
  Zigbee stack subsystem periodically runs migration process. As flash operations block the CPU,
  this may affect Zigbee time-critical processes (Association, Rejoin, Leave,
  GreenPower Commissioning, etc.) if it occurs at the same time with such processes.
  The likelihood of this happening is low, but this may occur if the Parent device is joining 20+
  devices one-by-one without delays, or in other cases of mass NVRAM operations in intersection
  with mass radio operations. This issue does not affect steady state operation.
- OTA DFU: Migration from the nRF5 SDK for Thread and Zigbee version
  earlier than v4.0.0 is not supported.

*** Known issues
****************
- ZB KERNEL (KRKNWK-3317): It may happen that an incoming massage will be acknowledged by a node
  with APS ACK transmission, but the message will not be delivered to the application layer.
- OTA DFU (KRKNWK-3315): In case of a MCU reset between completion of the OTA image transfer
  and postponed firmware upgrade, the upgrade will be applied immediately.
- OTA DFU (KRKNWK-3255): It is impossible to cancel the OTA upgrade by sending Default Response
  with code ABORT in response to OTA Upgrade End Request sent by the client.
- ZB KERNEL (KRKNWK-4666): Under high-load conditions, it is possible that the Sleepy End Device
  will enter ZB_ABORT() after loosing connectivity with its parent.

*** Compatible tools
********************
- nrfutil-5.0.0 or newer (available from https://github.com/NordicSemiconductor/pc-nrfutil)

*** Environment
***************
The following toolchains have been used for testing and verification of the examples:
- GCC: GCC ARM Embedded 7.2018 q2 update
- IAR: IAR Workbench 7.80.4
- SES: SES 4.18
- ARM: MDK-ARM version 5.25
- nRF Command Line Tools 10.3.0
- J-Link: 6.44e

Supported SoftDevices for multiprotocol support:
- S140 v7.0.1

Supported boards:
- PCA10056 (from version 1.0.0)
- PCA10059
- PCA10100
- PCA10112


****** ZBOSS (Zigbee stack) ******

The nRF5 SDK for Thread and Zigbee v4.0.0 includes the production release for the ZBOSS stack,
based on the R22 ZBOSS SDKs for GCC, IAR, and Keil. The release has been certified
for Zigbee PRO+GPPB, for nRF52833 and nRF52840.

For detailed information about the new features of the stack and migration guide,
see the Zigbee stack new features page.

*** Changes
***********
- Added ZBOSS libraries and sample binaries for nRF52833.
- Added experimental support for Work With All Hubs (WWAH).
- zb_set_installcode_policy is now avaliable for all Zigbee roles (ZB-97).
- Applied modifications to the HA samples for the full ZTT requirement support.
  Passed ZCL 7.0 cluster testing against ZTT.
- Updated the SDK samples to use the new buffer and scheduler API.
- Added support for the new nRF radio driver FEM API (ZB-87).
- Changed FEM type to three-pin-gpio (ZB-103).
- Updated OSIF files for RNG peripheral init and Zigbee NVRAM config page size (ZB-92).
- Moved MAC source matching algorithm to the radio driver.
- Removed the following error codes:
 - RET_INCOMPATIBLE_TYPES_IN_COMPARE
 - RET_INCOMPATIBLE_TYPES_IN_ASSIGNMENT
 - RET_INCOMPATIBLE_TYPES_IN_EXPRESSION
 - RET_ILLEGAL_COMPARE_OPERATION
 - RET_DOES_NOT_EXIST
 - RET_CANCELLED_BY_USER
 - RET_FILE_WRITE_ERROR
 - RET_FILE_READ_ERROR
 - RET_FILE_PARTIAL_WRITE
 - RET_TOO_MANY_OPEN_FILES
 - RET_INVALID_BINDING
 - RET_NO_ACK
 - RET_ACK_OK
 - RET_NO_BOUND_DEVICE
- Renamed RET_COULD_NOT_OPEN_FILE to RET_INVALID_FORMAT.

*** API
*******
- See the migration guide page for detailed description of API changes.

*** Bugfixes
************
- Fixed BDB initialization. Now permit_join_request is not sent after the rejoin (ZB-98).
- Fixed Window Covering Device ID (ZB-90).
- Fixed communication with devices that does not include the extended source address
  into the Network payload (ZB-102).
- Fixed several bugs in documentation.
- Fixed RADIO_STATE_TX_ACK mode. (ZB-94).

*** Environment
***************
- Tested with the radio driver v1.6.1 from the master branch
  https://github.com/NordicSemiconductor/nRF-IEEE-802.15.4-radio-driver/releases/tag/1.6.1
  SHA: 61bc74d7fb420779e58795581c0b53a0531c89c1
- Tested with the nRF5 SDK nRF5_SDK_16.0.0_21de520.zip (Release Date: Week 32, 2019).
- Tested with Softdevice version: s140_nrf52_7.0.1_softdevice.hex

Documentation feedback | Developer Zone | Subscribe | Updated