nRF5 SDK for Thread and Zigbee v3.2.0
Introduction

The nRF5 Software Development Kit for Thread and Zigbee helps you when developing products for these protocols with Nordic Semiconductor's advanced nRF52840 System on Chip (SoC).

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 in .c files. These .c files 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 v3.2.0
-------------------------------------
Release Date: Week 37, 2019

****** Release highlights ******
- Zigbee: Added API for raw APS access, changing security level inside NIB, and controlling inclusion policy of destination long address in NWK frames.
- Thread has not been updated for this release.

For detailed release notes, see below.

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

This release is the production-ready release of the Thread and Zigbee features available on the nRF52840 chip.
- The nRF52840 running the OpenThread stack is Thread 1.1 Certified (https://www.threadgroup.org/What-is-Thread#certifiedproducts).
- The nRF52840 running the Zigbee stack conforms to Zigbee PRO R21 + Green Power Proxy specifications.

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

The Nordic Zigbee software solution released as part of nRF5 SDK for Thread and Zigbee incorporates
the Base Device Behavior specification and the latest of 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 nRF5 SDK v15.3.0. No changes were made to the SDK v15.3.0 content.

For information about the supported toolchains, SoftDevices and boards, see the Getting Started with Thread and Zigbee page.

****** Multiprotocol limitations ******
- Interrupts with IRQ priority 2 and 3 must not be used for multiprotocol examples.
- 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 (6, 7).
- Due to a limitation of the SoftDevice, depending on the configured timeslot timeout of 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.

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

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

For information about the certification, see the OpenThread certification page in the Thread section.

*** Changes
***********
- The Thread protocol and the Thread example code has not been updated for this release.

*** Documentation
*****************
- Added a new page about performance measurements of NCP.
- Added a new documentation page about NCP architecture details, for example data handling.
- Added more details about the SPINEL protocol, UART, and SPI on the new NCP details page.
- Updated the OpenThread stack ROM memory layout diagram on the OpenThread memory layout page.
- Updated the Thread Local CoAP Examples page.
- Updated the Thread platform designs page with advantages and disadvantages of each platform design.
- Updated the OpenThread libraries page with the information about the correct configuration file and includes required for the cryptographic library.
- Fixed a download link on the Thread Topology Monitor page.

*** Limitations
***************
- Thread initialization must be done outside of the FreeRTOS thread, that is before the FreeRTOS thread is created.
- The Thread FreeRTOS examples with libmedcrypto-threadsafe are not delivered for Keil compiler.

*** Known issues
****************
- Nordic OpenThread Border Router occasionally fails to initialize the access point service. Currently, a reboot is required in such situations.
- Nordic OpenThread Border Router using SPI polling configuration is not stable, it is advised to use the SPI with the INT pin configured.
- To use Ethernet connection on Nordic OpenThread Border Router, the Ethernet cable must be plugged in prior to 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.
- External commissioning example with the RCP connected to the Nordic OpenThread Border Router does not work. The current workaround is to use the NCP instead.
- In the mbedTLS thread-safe variant of libraries, a non-reentrant heap is used for mbedTLS. The reentrant version of calloc and free can be provided using mbedtls_platform_set_calloc_free() right after a call to otInstanceInitSingle().

*** 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_v3.1.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/2279ef610eef80597bd789611d6931b95e08bf48

The following nRF IEEE 802.15.4 radio driver has been included in pre-built Thread stack libraries, and used for testing
and verification:
- https://github.com/NordicSemiconductor/nRF-IEEE-802.15.4-radio-driver/commit/652a35c8718125ae7ef615df1155c5c412780b17

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/f5de4e639b5e2a2ea65ab5da4e8264083b594650
- https://github.com/openthread/ot-br-posix/commit/a4dd306bf1ee6229c3d2bd329a243224e9d61723
- https://github.com/openthread/openthread/commit/2279ef610eef80597bd789611d6931b95e08bf48

The following wpantund and Border Router commits have 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



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

*** Changes
***********
- Added support for the following CLI request: zdo mgmt_lqi.
- Added API for raw APS access.
- Added API to change security level inside NIB.
- Added API to control inclusion policy of destination long address in NWK frames.

*** Documentation
*****************
- Added information that memory configuration must not be changed when upgrading using OTA.
- Updated the documentation pages for Programming principles and Zigbee stack features.
- Added a note about OTA upgrade issue on the OTA example page.
- Added information about the eui64 address for the bdb ic command. You need to use the eui64 address of the joining device.
- Added a documentation page that describes Zigbee platform designs with their advantages and disadvantages.
            
*** Limitations
***************
- Dynamic Memory Configuration: Binding table entries number with unique source address, endpoint, and cluster id is limited to 32.
- ZB KERNEL/Core: Binding table response may not be propagated to the application layer.
- ZB KERNEL: 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 is low, but may occur if 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.
- It is not advised to change values of parameters defined in memory configuration feature between firmwares, while performing OTA firmware upgrade.

*** Bugfixes
************
- Fixed a bug that caused a high sleep current consumption in Zigbee multiprotocol examples.
- Fixed a bug that caused the Zigbee stack to get stuck due to unfinished commissioning.

*** Known issues
****************
- Multiprotocol: Match Descriptor Response message might not be propagated to the application layer.
- OTA DFU: In case of MCU reset between completion of OTA image transfer and postponed firmware upgrade, the upgrade will be applied immediately.
- For a device that upgrades from the SDK v3.0.0 (66th version of ZBOSS) to the SDK v3.1.0 (67th-bis version of ZBOSS), the migration may randomly fail, leading to a corrupted binding table that requires a factory reset of the device if the relation between the number of source/destination binding table entries equals:
-- for end devices: src = 37 - 2 * dst
-- for routers/coordinator: src = 73 - 2 * dst

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


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

*** Changes
***********
- Added a check to make sure zb_zdo_device_is_unreachable() is not called for the parent entry when the device works in the ZED role. Use the parent link failure instead.
- Removed the unsecure_frame_attempt check from zb_secur_nwk_status().
- Added the fast polling mode for retrieving the Trust Center Link Key.
- Added protection from running two parallel TCLK procedures. The TCLK processing now finishes properly on CONFIRM_KEY with SECURITY_FAIL.

*** API
*******
- Updated the zb_zcl_add_cluster_handlers documentation.
- Added the aps_user_payload API group.
- Added the zb_nwk_set_dst_ieee_policy() function that disables and enables Destination IEEE field in NWK header.
- Made additional changes to functions that disable or enable the NWK security.
-- Renamed zb_aps_set_cb_to_send_user_payload() to zb_aps_set_user_data_tx_cb().
-- Changed zb_aps_get_aps_payload() to zb_uint8_t *zb_aps_get_aps_payload(zb_uint8_t param, zb_uint8_t*aps_payload_size) to assess the APS payload size.
-- zb_aps_get_aps_payload() can now be used both on the TX (user_data_tx_cb) and the RX (data_indication) side to get access to the APS payload. See light_sample_aps_user_payload.
-- The buffer identifier parameter does not change between zb_aps_send_user_payload()and user_data_tx_cb(), so it can be used as a unique packet ID to distinguish the TX results for several packets.
-- The function returns the correct TX status in case no APS acknowledgements are received.
-- Added an enumeration with the TX status constants (zb_aps_custom_payload_cb_status_t).
-- Note: To avoid parallel packet processing, it is up to the application logic to reuse or free the buffer returned in the user_data_tx_cb. The stack core will not process this packet, so if the application will not free or reuse this buffer, it will cause memory leakage.

*** Bugfixes
************

- Fixed a bug with the incorrect payload of MAC Coordinator Realignment command frame by removing Channel Page from the packet.
- Fixed an assert in case of missed association response.
- Fixed a bug related to initiating the first attribute report with default reporting configuration. Now the attribute reporting will start immediately even if no reporting configuration set by the parent.
- Fixed an Unbind command handler issue caused by the corrupted aps.binding.dst_table in several bind records.
- Fixed the MAX ZCL payload size.
- Fixed the Node Descriptor Server Mask comparison.
- Fixed a bug that caused attribute reports not to be generated if the Configure Reporting command is received before the Bind Request.
- Fixed a bug that caused the reporting configuration to fall back to default values after the device reboot.
- Fixed a bug that would cause rejoin failure due to unmatched Long/Short Address pair inside the neighbor table.
- Fixed a but that would cause a fail when reading more than one ZCL attribute at once.


*** Environment
***************
- ZBOSS trace configuration used to build debug libraries:
ZB_TRACE_LEVEL=4; ZB_TRACE_MASK=0x0858
- Tested with the radio driver v1.3.0 from the master branch
https://github.com/NordicSemiconductor/nRF-IEEE-802.15.4-radio-driver,
SHA: 652a35c8718125ae7ef615df1155c5c412780b17.

Documentation feedback | Developer Zone | Subscribe | Updated