Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/architectures.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ System-on-Chip designs

The single-chip solution has a combined RFIC (the IEEE 802.15.4 in case of Zigbee) and processor.
Both the Zigbee stack and the application layer run on the local processor.
The ZBOSS stack uses the nRF 802.15.4 radio driver directly; no Zephyr networking (L2) layer is used for the radio path.

This design has the following advantages:

Expand Down
57 changes: 51 additions & 6 deletions docs/configuring.rst
Original file line number Diff line number Diff line change
Expand Up @@ -95,24 +95,69 @@ You can enable one of the following alternative options to select the channel on
IEEE 802.15.4 EUI-64 configuration
==================================

The Zigbee stack uses the EUI-64 address that is configured in the IEEE 802.15.4 shim layer.
By default, it uses an address from Nordic Semiconductor's pool.
An IEEE EUI-64 address consists of two parts:

If your devices should use a different address, you can change the address according to your company's addressing scheme.
* **Company ID** – a 24-bit MA-L (MAC Address Block Large), formerly called OUI (Organizationally Unique Identifier)
* **Extension identifier** – a 40-bit device unique identifier

.. include:: includes/ieee802154_eui64_conf_nrf54l.txt
You can configure the EUI-64 for a Zigbee device in the following ways:

Use the default
By default, the company ID is set to Nordic Semiconductor's MA-L (``f4-ce-36``) via ``CONFIG_ZIGBEE_VENDOR_OUI``.
The extension identifier is set to the DEVICEID from the factory information configuration registers (FICR).

Replace the company ID
Change the ``CONFIG_ZIGBEE_VENDOR_OUI`` Kconfig option to your company's MA-L value (24-bit, in hex).
The extension identifier remains the DEVICEID from FICR.

Replace the full EUI-64
You can provide the full EUI-64 value by programming certain user information configuration registers (UICR).
nRF52 Series and nRF53 Series devices use the CUSTOMER registers block; nRF53 (Application Core) and nRF54L Series use the OTP registers block.

To use the EUI-64 value from the UICR:

1. Enable the ``CONFIG_ZIGBEE_UICR_EUI64_ENABLE`` Kconfig option.
2. Set ``CONFIG_ZIGBEE_UICR_EUI64_REG`` to the base index of the two consecutive UICR registers that will contain your EUI-64 value.

The following example shows how to replace the full EUI-64 on the nRF52840 device:

1. Enable the ``CONFIG_ZIGBEE_UICR_EUI64_ENABLE`` Kconfig option.

2. Set ``CONFIG_ZIGBEE_UICR_EUI64_REG`` to the UICR offset.
For UICR->CUSTOMER[0] and UICR->CUSTOMER[1], use the default value ``0``.

3. Build and program your application, erasing the whole memory.
Replace *serial_number* with the serial number of your debugger:

.. parsed-literal::
:class: highlight

west build -b nrf52840dk/nrf52840 -p always
west flash --snr *serial_number* --erase

4. Program the two consecutive UICR registers with your EUI-64 value (replace *serial_number* with the serial number of your debugger).
For nRF52840 with default ``CONFIG_ZIGBEE_UICR_EUI64_REG`` (0), the CUSTOMER base address is ``0x10001080``:

.. parsed-literal::
:class: highlight

nrfutil device x-write --serial-number *serial_number* --address 0x10001080 --value 0x11223344
nrfutil device x-write --serial-number *serial_number* --address 0x10001084 --value 0x55667788
nrfutil device reset --reset-kind=RESET_PIN

If you set ``CONFIG_ZIGBEE_UICR_EUI64_REG`` to a different value, use the corresponding register addresses for your SoC.

At the end of the configuration process, you can check the EUI-64 value using :ref:`lib_zigbee_shell`:

.. code-block:: console

> zdo eui64
uart:~$ zdo eui64
8877665544332211
Done

.. note::
Alternatively, you may use the Production Configuration feature to change the address.
The Production Configuration takes precedence over the shim's configuration.
The Production Configuration takes precedence over the OSIF configuration.

ZBOSS stack start options
=========================
Expand Down
12 changes: 1 addition & 11 deletions docs/images/zigbee_platform_design_multi.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 5 additions & 15 deletions docs/images/zigbee_platform_design_nRF53.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 7 additions & 17 deletions docs/images/zigbee_platform_design_nRF5340_multi.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 1 addition & 11 deletions docs/images/zigbee_platform_design_ncp.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 3 additions & 13 deletions docs/images/zigbee_platform_design_soc.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 5 additions & 1 deletion docs/lib/osif.rst
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.. _lib_zigbee_osif:
.. _lib_zigbee_osif:

Zigbee ZBOSS OSIF
#################
Expand Down Expand Up @@ -50,6 +50,10 @@ You can also configure the following OSIF-related Kconfig options:
This option is used only if the device does not have NVRAM storage.
* ``CONFIG_ZIGBEE_TIME_COUNTER`` - Configures the ZBOSS OSIF layer to use a dedicated timer-based counter as the Zigbee time source.
* ``CONFIG_ZIGBEE_TIME_KTIMER`` - Configures the ZBOSS OSIF layer to use Zephyr's system time as the Zigbee time source.
* ``CONFIG_ZBOSS_RADIO_INIT_PRIORITY`` - Initialization priority for the nRF 802.15.4 radio driver.
Must be lower than ``CONFIG_ZBOSS_INIT_PRIORITY`` so the radio is ready before ZBOSS starts.
* ``CONFIG_ZBOSS_INIT_PRIORITY`` - Initialization priority for the ZBOSS stack.
Must be higher than ``CONFIG_ZBOSS_RADIO_INIT_PRIORITY``.

Additionally, the following Kconfig option is available when setting :ref:`zigbee_ug_logging_logger_options`:

Expand Down
56 changes: 47 additions & 9 deletions subsys/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ menuconfig ZIGBEE_ADD_ON
imply FPU
select APP_LINK_WITH_ZBOSS
select PM_SINGLE_IMAGE
select NET_L2_ZIGBEE
select NETWORKING
select NET_PKT_TXTIME
select REBOOT
select MPSL if !SOC_NRF5340_CPUAPP
select NRF_802154_RADIO_DRIVER if !SOC_NRF5340_CPUAPP
select NRF_802154_SER_HOST if SOC_NRF5340_CPUAPP
select PSA_WANT_ALG_ECB_NO_PADDING if NRF_SECURITY
select PSA_WANT_ALG_ECDH if NRF_SECURITY
select PSA_WANT_KEY_TYPE_AES if NRF_SECURITY
Expand Down Expand Up @@ -45,12 +45,34 @@ choice LIBC_IMPLEMENTATION
Use minimal libc implementation with Zigbee.
endchoice

config NET_L2_ZIGBEE
bool "Zigbee L2"
depends on NETWORKING
select NET_L2_CUSTOM_IEEE802154
select NET_PKT_TIMESTAMP
select IEEE802154_L2_PKT_INCL_FCS
config ZIGBEE_VENDOR_OUI
hex "A value that represents MAC Address Block Large"
default 0xf4ce36
help
A value that represents MAC Address Block Large (MA-L, formerly called Organizationally Unique Identifier,
or OUI), a part of the device's EUI-64 address.
By default, use Nordic Semiconductor's MA-L block (f4-ce-36), assigned by the IEEE Registration Authority.

config ZIGBEE_UICR_EUI64_ENABLE
bool "Use EUI64 from UICR registers"
depends on SOC_SERIES_NRF52X || SOC_SERIES_NRF53X || SOC_SERIES_NRF54LX
help
Use a custom EUI64 stored in User Information Configuration Registers (UICR)
instead of deriving it from FICR and ZIGBEE_VENDOR_OUI.

if ZIGBEE_UICR_EUI64_ENABLE

config ZIGBEE_UICR_EUI64_REG
int "UICR base register index for EUI64"
range 0 30 if SOC_SERIES_NRF52X
range 0 190 if SOC_SERIES_NRF53X
range 0 318 if SOC_SERIES_NRF54LX
default 0
help
Base index of the two consecutive UICR registers (customer or OTP section)
where the 64-bit EUI64 is stored.

endif # ZIGBEE_UICR_EUI64_ENABLE

choice ZIGBEE_CHANNEL_SELECTION_MODE
prompt "Zigbee channel selection mode"
Expand Down Expand Up @@ -404,6 +426,22 @@ config ZIGBEE_TIME_KTIMER

endchoice

config ZBOSS_RADIO_INIT_PRIORITY
int "nRF 802.15.4 radio driver initialization priority"
default 80
range 0 99
help
Initialization priority for the nRF 802.15.4 radio driver in POST_KERNEL phase.
Must be lower than ZBOSS_INIT_PRIORITY to ensure radio is ready before ZBOSS.

config ZBOSS_INIT_PRIORITY
int "ZBOSS stack initialization priority"
default 90
range 1 99
help
Initialization priority for the ZBOSS stack in POST_KERNEL phase.
Must be higher than ZBOSS_RADIO_INIT_PRIORITY to ensure proper initialization order.

endmenu #menu "ZBOSS osif configuration"

config APP_LINK_WITH_ZIGBEE
Expand Down
Loading