You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
doc: openthread: Describe nRF radio implementation
Updated the architectures and configuration pages in nrf
documentation to describe the new OpenThread radio platform
implementation which does not use Zephyr L2 networking layer.
Updated OpenThread samples README files to mention both
configuration and new snippets.
Signed-off-by: Arkadiusz Balys <[email protected]>
@@ -36,10 +36,21 @@ Thread requires the following Zephyr modules to properly operate in the |NCS|:
36
36
Enable OpenThread in the |NCS|
37
37
==============================
38
38
39
-
To use the Thread protocol in the |NCS|, set the following Kconfig options:
39
+
You can use the Thread protocol in the |NCS| in two ways: by utilizing the Zephyr networking layer, or by passing Thread frames directly to the nRF 802.15.4 radio driver.
40
+
41
+
* To use the Thread protocol with Zephyr networking layer, enable the following Kconfig options:
42
+
43
+
* :kconfig:option:`CONFIG_NETWORKING` - This option enables a generic link layer and the IP networking support.
44
+
* :kconfig:option:`CONFIG_NET_L2_OPENTHREAD` - This option enables the OpenThread stack required for operating the Thread protocol effectively.
45
+
46
+
* To use the Thread protocol and nRF 802.15.4 radio directly, disable the previous Kconfig options, and enable the following:
47
+
48
+
* :kconfig:option:`CONFIG_OPENTHREAD` - This option enables the OpenThread stack, allowing the direct use of the nRF 802.15.4 radio.
49
+
50
+
To learn more about available architectures, see the :ref:`openthread_stack_architecture` user guide.
51
+
52
+
Additionally, you can set the following Kconfig options:
40
53
41
-
* :kconfig:option:`CONFIG_NETWORKING` - This option enables the generic link layer and the IP networking support.
42
-
* :kconfig:option:`CONFIG_NET_L2_OPENTHREAD` - This option enables the OpenThread stack required for the correct operation of the Thread protocol and allows you to use it.
43
54
* :kconfig:option:`CONFIG_MPSL` - This option enables the :ref:`nrfxlib:mpsl` (MPSL) implementation, which provides services for both :ref:`single-protocol and multi-protocol implementations <ug_thread_architectures>`.
44
55
This is automatically set for all samples in the |NCS| that use the :ref:`zephyr:ieee802154_interface` radio driver.
45
56
@@ -81,6 +92,7 @@ Depending on your configuration needs, you can also set the following options:
81
92
82
93
* :kconfig:option:`CONFIG_NET_SOCKETS` - This option enables API similar to BSD Sockets on top of the native Zephyr networking API.
83
94
This configuration is needed for managing networking protocols.
95
+
This configuration is available only if Zephyr networking layer is enabled.
84
96
* :kconfig:option:`CONFIG_OPENTHREAD_SHELL` - This option enables OpenThread CLI (see `OpenThread CLI Reference`_).
85
97
* :kconfig:option:`CONFIG_COAP` - This option enables Zephyr's :ref:`zephyr:coap_sock_interface` support.
86
98
* :kconfig:option:`CONFIG_COAP_UTILS` - This option enables the :ref:`CoAP utils library <coap_utils_readme>`.
@@ -94,6 +106,7 @@ See the following files for more options that you might want to change:
You can find the default configuration for all :ref:`openthread_samples` in the :file:`nrf/subsys/net/openthread/Kconfig.defconfig` file.
@@ -158,56 +171,116 @@ An IEEE EUI-64 address consists of two parts:
158
171
* Company ID - a 24-bit MA-L (MAC Address Block Large), formerly called OUI (Organizationally Unique Identifier)
159
172
* Extension identifier - a 40-bit device unique identifier
160
173
161
-
You can configure the EUI-64 for a device in the following ways:
174
+
You can configure the EUI-64 for a device in the following ways depending on chosen architecture:
175
+
176
+
.. tabs::
177
+
178
+
.. tab:: Zephyr networking layer enabled
179
+
180
+
Use the default
181
+
By default, the company ID is set to Nordic Semiconductor's MA-L (``f4-ce-36``).
182
+
The extension identifier is set to the DEVICEID from the factory information configuration registers (FICR).
183
+
184
+
Replace the company ID
185
+
You can enable the :kconfig:option:`CONFIG_IEEE802154_VENDOR_OUI_ENABLE` Kconfig option to replace Nordic Semiconductor's company ID with your own company ID.
186
+
Specify your company ID in :kconfig:option:`CONFIG_IEEE802154_VENDOR_OUI`.
187
+
188
+
The extension identifier is set to the default, namely the DEVICEID from FICR.
189
+
190
+
Replace the full EUI-64
191
+
You can provide the full EUI-64 value by programming certain user information configuration registers (UICR).
192
+
nRF52 Series devices use the CUSTOMER registers block, while nRF53 Series devices use the OTP registers block
193
+
194
+
To use the EUI-64 value from the UICR, enable the :kconfig:option:`CONFIG_NRF5_UICR_EUI64_ENABLE` Kconfig option and set :kconfig:option:`CONFIG_NRF5_UICR_EUI64_REG` to the base of the two consecutive registers that contain your EUI-64 value.
195
+
196
+
The following example shows how to replace the full EUI-64 on the nRF52840 device:
197
+
198
+
1. Enable the :kconfig:option:`CONFIG_IEEE802154_NRF5_UICR_EUI64_ENABLE` Kconfig option.
199
+
200
+
#. Specify the offset for the UICR registers in :kconfig:option:`CONFIG_IEEE802154_NRF5_UICR_EUI64_REG`.
201
+
This example uses UICR->CUSTOMER[0] and UICR->CUSTOMER[1], which means that you can keep the default value ``0``.
202
+
203
+
#. Build and program your application erasing the whole memory.
204
+
Make sure to replace *serial_number* with the serial number of your debugger:
205
+
206
+
.. parsed-literal::
207
+
:class: highlight
208
+
209
+
west build -b nrf52840dk/nrf52840 -p always
210
+
west flash --snr *serial_number* --erase
211
+
212
+
#. Program the registers UICR->CUSTOMER[0] and UICR->CUSTOMER[1] with your EUI-64 value (replace *serial_number* with the serial number of your debugger):
If you used a different value for :kconfig:option:`CONFIG_IEEE802154_NRF5_UICR_EUI64_REG`, you must use different register addresses.
222
+
223
+
At the end of the configuration process, you can check the EUI-64 value using OpenThread CLI:
224
+
225
+
.. code-block:: console
226
+
227
+
uart:~$ ot eui64
228
+
8877665544332211
229
+
Done
230
+
231
+
.. tab:: Zephyr networking layer disabled
232
+
233
+
Use the default
234
+
By default, the company ID is set to Nordic Semiconductor's MA-L (``f4-ce-36``).
235
+
The extension identifier is set to the DEVICEID from the factory information configuration registers (FICR).
236
+
237
+
Replace the company ID
238
+
You can enable the :kconfig:option:`CONFIG_IEEE802154_VENDOR_OUI_ENABLE` Kconfig option to replace Nordic Semiconductor's company ID with your own company ID.
239
+
Specify your company ID in :kconfig:option:`CONFIG_NRF5_VENDOR_OUI`.
240
+
241
+
The extension identifier is set to the default, namely the DEVICEID from FICR.
162
242
163
-
Use the default
164
-
By default, the company ID is set to Nordic Semiconductor's MA-L (``f4-ce-36``).
165
-
The extension identifier is set to the DEVICEID from the factory information configuration registers (FICR).
243
+
Replace the full EUI-64
244
+
You can provide the full EUI-64 value by programming certain user information configuration registers (UICR).
245
+
nRF52 Series devices use the CUSTOMER registers block, while nRF53 Series devices use the OTP registers block.
166
246
167
-
Replace the company ID
168
-
You can enable :kconfig:option:`CONFIG_IEEE802154_VENDOR_OUI_ENABLE` to replace Nordic Semiconductor's company ID with your own company ID.
169
-
Specify your company ID in :kconfig:option:`CONFIG_IEEE802154_VENDOR_OUI`.
247
+
To use the EUI-64 value from the UICR, enable the :kconfig:option:`CONFIG_NRF5_UICR_EUI64_ENABLE` Kconfig option and set :kconfig:option:`CONFIG_NRF5_UICR_EUI64_REG` to the base of the two consecutive registers that contain your EUI-64 value.
170
248
171
-
The extension identifier is set to the default, namely the DEVICEID from FICR.
249
+
The following example shows how to replace the full EUI-64 on the nRF52840 device:
172
250
173
-
Replace the full EUI-64
174
-
You can provide the full EUI-64 value by programming certain user information configuration registers (UICR).
175
-
For nRF52 Series devices, the CUSTOMER registers block is used.
176
-
For nRF53 Series devices, the OTP registers block is used.
251
+
1. Enable the :kconfig:option:`CONFIG_NRF5_UICR_EUI64_ENABLE` Kconfig option.
177
252
178
-
To use the EUI-64 value from the UICR, enable :kconfig:option:`CONFIG_IEEE802154_NRF5_UICR_EUI64_ENABLE` and set :kconfig:option:`CONFIG_IEEE802154_NRF5_UICR_EUI64_REG` to the base of the two consecutive registers that contain your EUI-64 value.
253
+
#. Specify the offset for the UICR registers in :kconfig:option:`CONFIG_NRF5_UICR_EUI64_REG`.
254
+
This example uses UICR->CUSTOMER[0] and UICR->CUSTOMER[1], which means that you can keep the default value ``0``.
179
255
180
-
The following example shows how to replace the full EUI-64 on an nRF52840 device:
256
+
#. Build and program your application erasing the whole memory.
257
+
Make sure to replace *serial_number* with the serial number of your debugger:
#. Specify the offset for the UICR registers in :kconfig:option:`CONFIG_IEEE802154_NRF5_UICR_EUI64_REG`.
184
-
This example uses UICR->CUSTOMER[0] and UICR->CUSTOMER[1], which means that you can keep the default value ``0``.
185
-
#. Build and program your application erasing the whole memory (replace *serial_number* with the serial number of your debugger):
259
+
.. parsed-literal::
260
+
:class: highlight
186
261
187
-
.. parsed-literal::
188
-
:class: highlight
262
+
west build -b nrf52840dk/nrf52840 -p always
263
+
west flash --snr *serial_number* --erase
189
264
190
-
west build -b nrf52840dk/nrf52840 -p always
191
-
west flash --snr *serial_number* --erase
265
+
#. Program the registers UICR->CUSTOMER[0] and UICR->CUSTOMER[1] with your EUI-64 value (replace *serial_number* with the serial number of your debugger):
192
266
193
-
#. Program the registers UICR->CUSTOMER[0] and UICR->CUSTOMER[1] with your EUI-64 value (replace *serial_number* with the serial number of your debugger):
@@ -178,10 +257,23 @@ It has the following disadvantages:
178
257
* The host processor must be woken up on each received frame, even if a frame must be forwarded to the neighboring device.
179
258
* The RCP solution can be less responsive than the NCP solution, due to the fact that each frame or command must be communicated to the host processor over the serial link.
180
259
181
-
.. figure:: images/thread_platform_design_rcp.svg
182
-
:alt:Radio co-processor architecture
260
+
Depending on integration with the Zephyr networking layer, there are two different designs:
261
+
262
+
.. tabs::
263
+
264
+
.. group-tab:: Integration with Zephyr networking layer
265
+
266
+
.. figure:: images/thread_platform_design_rcp.svg
267
+
:alt:Radio co-processor architecture
268
+
269
+
Radio co-processor architecture
270
+
271
+
.. group-tab:: Direct IEEE 802.15.4 radio integration with OpenThread stack
0 commit comments