blob: bdec2c5895627405ea7b8446b8c6ae25ef186e53 [file] [log] [blame] [view]
# CHIP RW61x All-clusters Application
The all-clusters example implements a server which can be accessed by a CHIP
controller and can accept basic cluster commands.
The example is based on
[Project CHIP](https://github.com/project-chip/connectedhomeip) and the NXP
RW612 SDK, and provides a prototype application that demonstrates device
commissioning and different cluster control.
<hr>
- [Introduction](#introduction)
- [Building](#building)
- [Flashing and debugging](#flashing-and-debugging)
- [Testing the example](#testing-the-example)
- [Matter Shell](#testing-the-all-clusters-application-with-matter-cli-enabled)
- [OTA Software Update](#ota-software-update)
<hr>
<a name="introduction"></a>
## Introduction
The RW61x all-cluster application provides a working demonstration of the
RW610/RW612 board integration, built using the Project CHIP codebase and the NXP
RW612 SDK.
The example supports:
- Matter over Wi-Fi
- Matter over Openthread
- Matter over Wi-Fi with OpenThread Border Router support.
### Hardware requirements
For Matter over Thread configuration :
- [`NXP RD-RW612-BGA`] board
- BLE/15.4 antenna (to plug in Ant1)
For Matter over WiFi configuration :
- [`NXP RD-RW612-BGA`] or [`NXP RD-RW610-BGA`] board
- BLE antenna (to plug in Ant1)
- Wi-Fi antenna (to plug in Ant2)
For Matter over Wi-Fi with OpenThread Border Router :
- [`NXP RD-RW612-BGA`] board
- BLE/15.4 antenna (to plug in Ant1)
- Wi-Fi antenna (to plug in Ant2)
<a name="building"></a>
## Building
In order to build the Project CHIP example, we recommend using a Linux
distribution (the demo-application was compiled on Ubuntu 20.04).
- Follow instruction in [BUILDING.md](../../../../../docs/guides/BUILDING.md)
to setup the environment to be able to build Matter.
- Download
[RD-RW612 SDK for Project CHIP](https://mcuxpresso.nxp.com/en/select).
Creating an nxp.com account is required before being able to download the
SDK. Once the account is created, login and follow the steps for downloading
SDK. The SDK Builder UI selection should be similar with the one from the
image below.
![MCUXpresso SDK Download](../../../../platform/nxp/rt/rw61x/doc/images/mcux-sdk-download.PNG)
(Note: All SDK components should be selected. If size is an issue Azure RTOS
component can be omitted.)
Please refer to Matter release notes for getting the latest released SDK.
- Start building the application.
```
user@ubuntu:~/Desktop/git/connectedhomeip$ export NXP_SDK_ROOT=/home/user/Desktop/SDK_RW612/
user@ubuntu:~/Desktop/git/connectedhomeip$ scripts/checkout_submodules.py --shallow --platform nxp --recursive
user@ubuntu:~/Desktop/git/connectedhomeip$ source ./scripts/bootstrap.sh
user@ubuntu:~/Desktop/git/connectedhomeip$ source ./scripts/activate.sh
user@ubuntu:~/Desktop/git/connectedhomeip$ cd examples/all-clusters-app/nxp/rt/rw61x/
```
#### Building with Matter over Wifi configuration on RW61x
- Build Matter-over-Wifi configuration with BLE commissioning (ble-wifi) :
```
user@ubuntu:~/Desktop/git/connectedhomeip/examples/all-clusters-app/nxp/rt/rw61x$ gn gen --args="chip_enable_wifi=true is_sdk_package=true" out/debug
user@ubuntu:~/Desktop/git/connectedhomeip/examples/all-clusters-app/nxp/rt/rw61x$ ninja -C out/debug
```
#### Building with Matter over Thread configuration on RW612
- Build Matter-over-Thread configuration with BLE commissioning.
```
user@ubuntu:~/Desktop/git/connectedhomeip/examples/all-clusters-app/nxp/rt/rw61x$ gn gen --args="chip_enable_openthread=true chip_inet_config_enable_ipv4=false chip_config_network_layer_ble=true is_sdk_package=true" out/debug
user@ubuntu:~/Desktop/git/connectedhomeip/examples/all-clusters-app/nxp/rt/rw61x$ ninja -C out/debug
```
#### Building with Matter over Wifi + OpenThread Border Router configuration on RW612
This configuration requires enabling the Matter CLI in order to control the
Thread network on the Border Router.
- Build Matter with Border Router configuration with BLE commissioning
(ble-wifi) :
```
user@ubuntu:~/Desktop/git/connectedhomeip/examples/all-clusters-app/nxp/rt/rw610$ gn gen --args="chip_enable_wifi=true chip_enable_openthread=true chip_enable_matter_cli=true is_sdk_package=true openthread_root=\"//third_party/connectedhomeip/third_party/openthread/ot-nxp/openthread-br\"" out/debug
user@ubuntu:~/Desktop/git/connectedhomeip/examples/all-clusters-app/nxp/rt/rw610$ ninja -C out/debug
```
#### General information
The resulting output file can be found in
out/debug/chip-rw61x-all-cluster-example.
Optional GN options that can be added when building an application:
- To enable the
[matter CLI](README.md#testing-the-all-clusters-application-with-matter-cli-enabled),
the argument `chip_enable_matter_cli=true` must be added to the _gn gen_
command.
- To switch the SDK type used, the argument `is_<sdk_type>=true` must be added
to the _gn gen_ command (with <sdk_type> being either sdk_package or
sdk_internal).
- By default, the RW612 A1 board revision will be chosen. To switch to an A2
revision, the argument `board_version=\"A2\"` must be added to the _gn gen_
command.
- To build the application in debug mode, the argument
`is_debug=true optimize_debug=false` must be added to the _gn gen_ command.
- To build with the option to have Matter certificates/keys pre-loaded in a
specific flash area the argument `chip_with_factory_data=1` must be added to
the _gn gen_ command. (for more information see
[Guide for writing manufacturing data on NXP devices](../../../../../docs/guides/nxp/nxp_manufacturing_flow.md).
- To build the application with the OTA Requestor enabled, the arguments
`chip_enable_ota_requestor=true no_mcuboot=false` must be added to the _gn
gen_ command. (More information about the OTA Requestor feature in
[OTA Requestor README](../../../../../docs/guides/nxp/nxp_rw61x_ota_software_update.md)
## Manufacturing data
See
[Guide for writing manufacturing data on NXP devices](../../../../../docs/guides/nxp/nxp_manufacturing_flow.md)
Other comments:
The all cluster app demonstrates the usage of encrypted Matter manufacturing
data storage. Matter manufacturing data should be encrypted using an AES 128
software key before flashing them to the device flash.
Using DAC private key secure usage: Experimental feature, contain some
limitation: potential concurrent access issue during sign with dac key operation
due to the lack of protection between multiple access to `ELS` crypto module.
The argument `chip_enable_secure_dac_private_key_storage=1` must be added to the
_gn gen_ command to enable secure private DAC key usage with S50.
`chip_with_factory_data=1` must have been added to the _gn gen_ command
DAC private key generation: The argument `chip_convert_dac_private_key=1` must
be added to the _gn gen_ command to enable DAC private plain key conversion to
blob with S50. `chip_enable_secure_dac_private_key_storage=1` must have been
added to the _gn gen_ command
`ELS` contain concurrent access risks. They must be fixed before enabling it by
default.
<a name="flashing-and-debugging"></a>
## Flashing and debugging
### Flashing the All-Clusters application
In order to flash the application we recommend using
[MCUXpresso IDE (version >= 11.6.0)](https://www.nxp.com/design/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE).
- Import the previously downloaded NXP SDK into MCUXpresso IDE.
Right click the empty space in the MCUXpresso IDE "Installed SDKs" tab to show
the menu, select the "Import archive" (or "Import folder" if a folder is used)
menu item.
- Import the connectedhomeip repo in MCUXpresso IDE as Makefile Project. Use
_none_ as _Toolchain for Indexer Settings_:
```
File -> Import -> C/C++ -> Existing Code as Makefile Project
```
- Configure MCU Settings:
```
Right click on the Project -> Properties -> C/C++ Build -> MCU Settings -> Select RW612 -> Apply & Close
```
![MCU_Set](../../../../platform/nxp/rt/rw61x/doc/images/mcu-set.PNG)
- Configure the toolchain editor:
```
Right click on the Project -> C/C++ Build-> Tool Chain Editor -> NXP MCU Tools -> Apply & Close
```
![toolchain](../../../../platform/nxp/rt/rw61x/doc/images/toolchain.JPG)
- Create a debug configuration :
```
Right click on the Project -> Debug -> As->SEGGER JLink probes -> OK -> Select elf file
```
(Note : if SDK package is used, a simpler way could be duplicating the debug
configuration from the SDK Hello World example after importing it.)
- Debug using the newly created configuration file.
<a name="testing-the-example"></a>
## Testing the example
CHIP Tool is a Matter controller which can be used to commission a Matter device
into the network. For more information regarding how to use the CHIP Tool
controller, please refer to the
[CHIP Tool guide](../../../../../docs/guides/chip_tool_guide.md).
To know how to commission a device over BLE, follow the instructions from
[chip-tool's README.md 'Commission a device over
BLE'][readme_ble_commissioning_section].
[readme_ble_commissioning_section]:
../../../../chip-tool/README.md#commission-a-device-over-ble
To know how to commissioning a device over IP, follow the instructions from
[chip-tool's README.md 'Pair a device over
IP'][readme_pair_ip_commissioning_section]
[readme_pair_ip_commissioning_section]:
../../../../chip-tool/README.md#pair-a-device-over-ip
#### Matter over wifi configuration :
The "ble-wifi" pairing method can be used in order to commission the device.
#### Matter over thread configuration :
The "ble-thread" pairing method can be used in order to commission the device.
#### Matter over wifi with openthread border router configuration :
In order to create or join a Thread network on the Matter Border Router, the
`otcli` commands from the matter CLI can be used. For more information about
using the matter shell, follow instructions from
['Testing the all-clusters application with Matter CLI'](#testing-the-all-clusters-application-with-matter-cli-enabled).
In this configuration, the device can be commissioned over Wi-Fi with the
'ble-wifi' pairing method.
### Testing the all-clusters application without Matter CLI:
1. Prepare the board with the flashed `All-cluster application` (as shown
above).
2. The All-cluster example uses UART1 (`FlexComm3`) to print logs while running
the server. To view raw UART output, start a terminal emulator like PuTTY and
connect to the used COM port with the following UART settings:
- Baud rate: 115200
- 8 data bits
- 1 stop bit
- No parity
- No flow control
3. Open a terminal connection on the board and watch the printed logs.
4. On the client side, start sending commands using the chip-tool application as
it is described
[here](../../../../chip-tool/README.md#using-the-client-to-send-matter-commands).
<a name="testing-the-all-clusters-application-with-matter-cli-enabled"></a>
### Testing the all-clusters application with Matter CLI enabled:
The Matter CLI can be enabled with the all-clusters application.
For more information about the Matter CLI default commands, you can refer to the
dedicated [ReadMe](../../../../shell/README.md).
The All-clusters application supports additional commands :
```
> help
[...]
mattercommissioning Open/close the commissioning window. Usage : mattercommissioning [on|off]
matterfactoryreset Perform a factory reset on the device
matterreset Reset the device
```
- `matterfactoryreset` command erases the file system completely (all Matter
settings are erased).
- `matterreset` enables the device to reboot without erasing the settings.
Here are described steps to use the all-cluster-app with the Matter CLI enabled
1. Prepare the board with the flashed `All-cluster application` (as shown
above).
2. The matter CLI is accessible in UART1. For that, start a terminal emulator
like PuTTY and connect to the used COM port with the following UART settings:
- Baud rate: 115200
- 8 data bits
- 1 stop bit
- No parity
- No flow control
3. The All-cluster example uses UART2 (`FlexComm0`) to print logs while running
the server. To view raw UART output, a pin should be plugged to an USB to
UART adapter (connector `HD2 pin 03`), then start a terminal emulator like
PuTTY and connect to the used COM port with the following UART settings:
- Baud rate: 115200
- 8 data bits
- 1 stop bit
- No parity
- No flow control
4. On the client side, start sending commands using the chip-tool application as
it is described
[here](../../../../chip-tool/README.md#using-the-client-to-send-matter-commands).
For Matter with OpenThread Border Router support, the matter CLI can be used to
start/join the Thread network, using the following ot-cli commands. (Note that
setting channel, panid, and network key is not enough anymore because of an Open
Thread stack update. We first need to initialize a new dataset.)
```
> otcli dataset init new
Done
> otcli dataset
Active Timestamp: 1
Channel: 25
Channel Mask: 0x07fff800
Ext PAN ID: 42af793f623aab54
Mesh Local Prefix: fd6e:c358:7078:5a8d::/64
Network Key: f824658f79d8ca033fbb85ecc3ca91cc
Network Name: OpenThread-b870
PAN ID: 0xb870
PSKc: f438a194a5e968cc43cc4b3a6f560ca4
Security Policy: 672 onrc 0
Done
> otcli dataset panid 0xabcd
Done
> otcli dataset channel 25
Done
> otcli dataset commit active
Done
> otcli ifconfig up
Done
> otcli thread start
Done
> otcli state
leader
Done
```
<a name="ota-software-update"></a>
## OTA Software Update
Over-The-Air software updates are supported with the RW61x all-clusters example.
The process to follow in order to perform a software update is described in the
dedicated guide
['Matter Over-The-Air Software Update with NXP RW61x example applications'](../../../../../docs/guides/nxp/nxp_rw61x_ota_software_update.md).