blob: 53f46d1220208ccbddd40787b7583fef5e8d244a [file] [log] [blame] [view]
Sergei Lissianoi510069d2022-03-14 17:12:04 -04001# Matter Software Update with EFR32 example applications
2
3The Over The Air (OTA) Software Update functionality can be added to any of the
4EFR32 example applications by passing the `chip_enable_ota_requestor=true`
5option to the build script. This option is supposed to be enabled by default for
6all of the EFR32 example applications.
7
8## Running the OTA Download scenario
9
10- For Matter with OpenThread: Bring up the OpenThread Border Router as
11 discussed in examples/lighting-app/efr32/README.md and get its operational
12 dataset.
13
14- On a Linux or Darwin platform build the chip-tool and the ota-provider-app
15 as follows:
16
Andrei Litvina76f75e2022-04-13 08:34:42 -100017 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040018 scripts/examples/gn_build_example.sh examples/chip-tool out/
19 scripts/examples/gn_build_example.sh examples/ota-provider-app/linux out/debug chip_config_network_layer_ble=false
Andrei Litvina76f75e2022-04-13 08:34:42 -100020 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040021
22- Build or download the Gecko Bootloader binary. Bootloader should be built
Sergei Lissianoi94e81972022-04-13 11:35:18 -040023 with the Gecko SDK version 3.2.1 or earlier. For the bootloader using the
24 external flash select the "external SPI" bootloader type configured with a
25 single slot of at least 1000 KB. For the bootloader using the internal flash
26 (supported on MG24 boards only) select the "internal storage" bootloader
27 type. Follow the instructions in "UG266: Silicon Labs Gecko Bootloader
28 User’s Guide". Pre-built binaries for some configurations should be
Sergei Lissianoi510069d2022-03-14 17:12:04 -040029 available in
30
Andrei Litvina76f75e2022-04-13 08:34:42 -100031 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040032 third_party/efr32_sdk/repo/platform/bootloader/sample-apps/bootloader-storage-spiflash-single
Andrei Litvina76f75e2022-04-13 08:34:42 -100033 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040034
35- Using the commander tool upload the bootloader to the device running the
36 application.
37
38- Create a bootable image file (using the Lighting application image as an
39 example):
40
Andrei Litvina76f75e2022-04-13 08:34:42 -100041 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040042 commander gbl create chip-efr32-lighting-example.gbl --app chip-efr32-lighting-example.s37
Andrei Litvina76f75e2022-04-13 08:34:42 -100043 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040044
45- Create the Matter OTA file from the bootable image file:
46
Andrei Litvina76f75e2022-04-13 08:34:42 -100047 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040048 ./src/app/ota_image_tool.py create -v 0xFFF1 -p 0x8005 -vn 1 -vs "1.0" -da sha256 chip-efr32-lighting-example.gbl chip-efr32-lighting-example.ota
Andrei Litvina76f75e2022-04-13 08:34:42 -100049 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040050
51- In a terminal start the Provider app passing to it the path to the Matter
52 OTA file created in the previous step:
53
Andrei Litvina76f75e2022-04-13 08:34:42 -100054 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040055 rm -r /tmp/chip_*
56 ./out/debug/chip-ota-provider-app -f chip-efr32-lighting-example.ota
Andrei Litvina76f75e2022-04-13 08:34:42 -100057 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040058
59- In a separate terminal run the chip-tool commands to provision the Provider:
60
Andrei Litvina76f75e2022-04-13 08:34:42 -100061 ```
62 ./out/chip-tool pairing onnetwork 1 20202021
63 ./out/chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode": 2, "subjects": [112233], "targets": null}, {"fabricIndex": 1, "privilege": 3, "authMode": 2, "subjects": null, "targets": null}]' 1 0
64 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040065
66- If the application device had been previously commissioned hold Button 0 for
67 six seconds to factory-reset the device.
68
69- In the chip-tool terminal enter:
70
Andrei Litvina76f75e2022-04-13 08:34:42 -100071 ```
72 ./out/chip-tool pairing ble-thread 2 hex:<operationalDataset> 20202021 3840
73 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040074
75where operationalDataset is obtained from the OpenThread Border Router.
76
77- Once the commissioning process completes enter:
78
Andrei Litvina76f75e2022-04-13 08:34:42 -100079 ```
80 ./out/chip-tool otasoftwareupdaterequestor announce-ota-provider 1 0 0 0 2 0
81 ```
Sergei Lissianoi510069d2022-03-14 17:12:04 -040082
83- The application device will connect to the Provider and start the image
84 download. Once the image is downloaded the device will reboot into the
85 downloaded image.
86
87## Managing the Software Version, Vendor and Product ID
88
89Starting the ota-provider-app with the --otaImageList command line option allows
90the user to supply a JSON file specifying the Software Version, Vendor and
91Product ID that identify the image served by the Provider, see
92[ota-provider-app](../../examples/ota-provider-app/linux/README.md)
93
94Example provider configuration file:
95
96```
97{ "foo": 1, // ignored by parser
98 "deviceSoftwareVersionModel":
99 [
100 { "vendorId": 65521, "productId": 32773, "softwareVersion": 1, "softwareVersionString": "1.0.0", "cDVersionNumber": 18, "softwareVersionValid": true, "minApplicableSoftwareVersion": 0, "maxApplicableSoftwareVersion": 100, "otaURL": "chip-efr32-lighting-example.ota" }
101 ]
102}
103```
104
105In order for the Provider to successfully serve the image to a device during the
106OTA Software Update process the softwareVersion parameter in the Provider config
107file must be greater than the CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION
108parameter set in the application's CHIPProjectConfig.h file.