README.md 26.3 KB
Newer Older
Vincent Coubard's avatar
Vincent Coubard committed
1
2
# Introduction

3
[Arm IoT Total Solutions](https://www.arm.com/solutions/iot/total-solutions-iot) provides a complete solution designed for specific use-cases, leaving developers to focus on what really matters – innovation and differentiation across diverse and varied use cases. It has everything needed to simplify the design process and streamline product development, including hardware IP, software, real-time OS support, machine learning (ML) models, advanced tools such as the new Arm Virtual Hardware, application specific reference code and support from the world’s largest IoT ecosystem.
Vincent Coubard's avatar
Vincent Coubard committed
4

Vincent Coubard's avatar
Vincent Coubard committed
5
6
# Overview

7
This repo contains Arm's first [IoT Total Solution](https://www.arm.com/solutions/iot/total-solutions-iot), "Keyword Detection".  It provides general-purpose compute and ML workload use-cases, including an ML-based keyword recognition example that leverages the DS-CNN model from the [Arm Model Zoo](https://github.com/ARM-software/ML-zoo).
Vincent Coubard's avatar
Vincent Coubard committed
8

9
The software supports multiple configurations of the Arm Corstone™-300 subsystem, incorporating the Cortex-M55 processor and Arm Ethos™-U55 microNPU.  This total solution provides the complex, non differentiated secure platform software on behalf of the ecosystem, thus enabling you to focus on your next killer app.
Vincent Coubard's avatar
Vincent Coubard committed
10

11
## Keyword detection application
Vincent Coubard's avatar
Vincent Coubard committed
12

13
The keyword detection application runs the DS-CNN model on top of [AWS FreeRTOS](https://docs.aws.amazon.com/freertos/). It detects keywords and inform the user of which keyword has been spotted. The audio data to process are injected at run time using the [Arm Virtual Hardware](https://www.arm.com/virtual-hardware) audio driver.
Vincent Coubard's avatar
Vincent Coubard committed
14

Vincent Coubard's avatar
Vincent Coubard committed
15
The Keyword application connects to [AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html) cloud to publish recognised keywords. AWS IoT cloud is also used for OTA firmware updates. These firmware updates are securely applied using [Trusted Firmware-M](https://tf-m-user-guide.trustedfirmware.org/). For more information, refer to the keyword detection [Readme](./kws/README.md).
Vincent Coubard's avatar
Vincent Coubard committed
16
17
18

![Key word detection architecture overview](./resources/Keyword-detection-overview.png)

19
## Blinky application
Vincent Coubard's avatar
Vincent Coubard committed
20

21
The blinky application demonstrate blinking LEDs using Arm Virtual Hardware. AWS FreeRTOS and FreeRTOS are already included in the application to kickstart new developments.
Vincent Coubard's avatar
Vincent Coubard committed
22
23
24


# Quick Start
Vincent Coubard's avatar
Vincent Coubard committed
25
26
27
28
Follow these simple steps to use this code example's keyword detection application.

## Launch Arm Virtual Hardware Instance

29
### Launch Using AWS Web Console
Vincent Coubard's avatar
Vincent Coubard committed
30
31
To utilize the Arm Virtual Hardware, you will need to create an [AWS Account](https://aws.amazon.com/) if you don’t already have one.

32
33
34
#### Launching the instance in EC2 [(AWS on getting started)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)
1. Go to [EC2](https://console.aws.amazon.com/ec2/v2/) in the AWS Web Console.
1. Select **Launch Instances** which will take you to a wizard for launching the instance.
35

Vincent Coubard's avatar
Vincent Coubard committed
36
     1. **Step 1: Choose an [Amazon Machine Image (AMI)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)** - In the Search box, type `Arm Virtual Hardware` then find the item called "Arm Virtual Hardware" that is by Arm, and press Select for that item. This image contains all the software necessary to build and run the Arm IoT Total Solutions.
37
38
        This will raise a subscription page/pop-up titled, **Arm Virtual Hardware**. You will note that the subscription is free from Arm, but AWS does charge for the costs of the instances themselves according to the pricing chart provided.

Vincent Coubard's avatar
Vincent Coubard committed
39
        > Arm Virtual Hardware for Corstone-300 is available as a public beta on AWS Marketplace. To help you get started, AWS are offering more than 100 hours of free AWS EC2 CPU credits for the first 1,000 qualified users. Click here to find out more: https://www.arm.com/company/contact-us/virtual-hardware.
40

Vincent Coubard's avatar
Vincent Coubard committed
41
        You must select Continue if you want to move forward.
42

Vincent Coubard's avatar
Vincent Coubard committed
43
44
     1. **Step 2: Choose an Instance Type** - Select one of the instance types from the list. We recommend the **c5.large**. Keep in mind that there are charges that accrue while the instance is running.
        From here you may select **Review and Launch** to move directly to the launch page or select **Next: Configure Instance Details** if you need to set any custom settings for this instance.
Vincent Coubard's avatar
Vincent Coubard committed
45

46
47
#### Selecting the instance
Once you complete the wizard by initiating the instance launch you will see a page that allows you to navigate directly to the new instance. You may click this link or go back to your list of instances and find the instance through that method.
Vincent Coubard's avatar
Vincent Coubard committed
48

49
Whichever way you choose find your new instance and select its instance ID to open the page to manage the instance.
Vincent Coubard's avatar
Vincent Coubard committed
50

51
#### Connecting to the instance:
52
53
54
1. Select **Connect** to open an SSH terminal session to the instance in your browser.
1. Ensure the User name field is set to `ubuntu`.
1. Select the **Connect** button to open the session. This will put you in a browser window where you will have an SSH terminal window ready for your input.
Vincent Coubard's avatar
Vincent Coubard committed
55

Vincent Coubard's avatar
Vincent Coubard committed
56
57
### Launch Using a local terminal

58
1. Install [AWS CLI 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) on your machine.
Vincent Coubard's avatar
Vincent Coubard committed
59
2. [Configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) the access key, secret key and region that AWS CLI will use. If your organization uses AWS Single Sign-On, the [configuration process](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html) is slightly different. Make sure the region selected matches the region of the SSO service.
60
3. Create a new key pair.
Vincent Coubard's avatar
Vincent Coubard committed
61
62
63
64
65

```sh
aws ec2 create-key-pair --key-name MyKeyPair
```

66
4. When AWS CLI display the new key pair. Save the key material in a `.pem` file. The file permission must be set to `400`.
Vincent Coubard's avatar
Vincent Coubard committed
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

```sh
chmod 400 MyKeyPair.pem
```

5. Launch a new instance with the key pair created. The key pair can be reused to create new instances.

```sh
./scripts/vht_cli.py -k MyKeyPair start
```

#### Connecting to the instance:

1. Get the IP of the instance started

```sh
./scripts/vht_cli.py -k MyKeyPair status
```

86
2. Connect to the instance using SSH and the private key saved localy.
Vincent Coubard's avatar
Vincent Coubard committed
87
88
89
90
91

```sh
ssh -i "MyKeyPair.pem" ubuntu@<instance ip address>
```

Vincent Coubard's avatar
Vincent Coubard committed
92
93
## Build and execute the application

94
95
To update the application, a set of scripts is included to setup the environment,
build applications, run them and test them. These scripts must be executed in the AVH AMI.
Vincent Coubard's avatar
Vincent Coubard committed
96

97
98
### Connect

Vincent Coubard's avatar
Vincent Coubard committed
99
100
101
102
103
104
Open your favorite terminal program or linux shell application and connect to the AVH AMI instance:

```sh
ssh ubuntu@<your-ec2-instance>
```

105
106
### Prepare environment

107
Clone the repository in the AMI:
Vincent Coubard's avatar
Vincent Coubard committed
108
109

```sh
Evelyne Donnaes's avatar
Evelyne Donnaes committed
110
git clone <keyword repository> && cd <keyword repository>
Vincent Coubard's avatar
Vincent Coubard committed
111
112
113
114
115
```

Synchronize git submodules, setup ML and apply required patches:

```sh
Vincent Coubard's avatar
Vincent Coubard committed
116
./ats.sh bootstrap
Vincent Coubard's avatar
Vincent Coubard committed
117
118
119
120
121
```

Install additional python dependencies required to run tests and sign binaries:

```sh
122
sudo apt install python3.8-venv
123
124
```

125
126
127
```sh
python3.8 -m pip install imgtool cbor2
```
128
129

```sh
130
python3.9 -m pip install imgtool cffi intelhex cbor2 cbor pytest click
Vincent Coubard's avatar
Vincent Coubard committed
131
132
```

133
134
135
136
137
138
139
140
141
142
143
144
145
Make python user packages visible in the shell.

```sh
export PATH=$PATH:/home/ubuntu/.local/bin
```

### Build

There are currently two applications available: `blink` and `kws`.
The `ats.sh` scripts takes the command `bootstrap`, `build` or `run` as first  parameter.
The second parameter is the name of the application to build or run.
Below we use `kws` as the name of the application, replace it with `blinky` to build that instead.

Vincent Coubard's avatar
Vincent Coubard committed
146
147
148
Build the kws application:

```sh
Vincent Coubard's avatar
Vincent Coubard committed
149
./ats.sh build kws
Vincent Coubard's avatar
Vincent Coubard committed
150
151
```

152
153
154
155
156
157
158
159
160
161
162
163
This will by default build the application in the `build` directory for the `Corstone-300` target using the `FreeRTOS` OS. This is equivalent to:

```sh
./ats.sh build kws --target Corstone-300 --rtos FREERTOS --path build
```

To build for Corstone-310 use `--target Corstone-310`. To build using the RTX RTOS implementation use `--rtos RTX`.

You can have multiple builds with different parameters side by side by changing the `--path` parameter to something unique to each build configuration. This speed up the re-build process when working with multiple targets and RTOS.

### Run

Vincent Coubard's avatar
Vincent Coubard committed
164
Run the kws application:
165

Vincent Coubard's avatar
Vincent Coubard committed
166
```sh
Vincent Coubard's avatar
Vincent Coubard committed
167
./ats.sh run kws
Vincent Coubard's avatar
Vincent Coubard committed
168
169
```

170
171
172
173
174
175
176
177
178
The `run` command can take the `--path` switch to run a particular build. It uses `build` directory by default.
This is equivalent to:

```sh
./ats.sh run kws --path build
```

### Integration tests

Vincent Coubard's avatar
Vincent Coubard committed
179
180
Launch the kws integration tests:
```sh
Vincent Coubard's avatar
Vincent Coubard committed
181
pytest -s kws/tests/test_ml.py
Vincent Coubard's avatar
Vincent Coubard committed
182
183
184
185
```

## Updating audio data

186
187
The audio data streamed into the Arm Virtual Hardware is read from the file `test.wav` located at the root of the repository. It can be replaced with another audio file with the following configuration:
- Format: PCM
Vincent Coubard's avatar
Vincent Coubard committed
188
189
- Audio channels: Mono
- Sample rate: 16 bits
190
- Sample rate: 16kHz
Vincent Coubard's avatar
Vincent Coubard committed
191

192
# Continuous integration setup
Vincent Coubard's avatar
Vincent Coubard committed
193

Vincent Coubard's avatar
Vincent Coubard committed
194
Step by step instructions on how to setup a continuous integration pipeline in GitHub are provided in a mirror of this repository located at https://github.com/ARM-software/ATS-Keyword.
195
196
197
198


# Setting up AWS connectivity

Vincent Coubard's avatar
Vincent Coubard committed
199
The Keyword Detection application will attempt to connect to AWS IOT and report ML inference results through an MQTT connection. To connect to the AWS cloud service you will need to setup an IoT Thing and then set the AWS credentials of the IoT Thing within the Application. You will need to create an [AWS Account](https://aws.amazon.com/) if you don’t already have one.
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217

## AWS account IoT setup

### Create an IoT thing for your device

1. Login to your account and browse to the [AWS IoT console](https://console.aws.amazon.com/iotv2/).
2. In the left navigation pane, choose **Manage**, and then choose **Things**.
3. If you do not have any IoT things registered in your account, the **You don’t have any things yet** page is displayed. If you see this page, choose **Register** a thing.
4. On the **Creating AWS IoT things** page, choose **Create a single thing**.
5. On the **Add your device to the thing registry** page, type a name for your thing (for example `MyThing`), and then choose **Next**. You will need to add the name later to your C code.
6. On the **Add a certificate for your thing** page, under **One-click certificate creation**, choose **Create certificate**.
7. Download your private key and certificate by choosing the **Download** links for each. Make note of the certificate ID. You need it later to attach a policy to your certificate.
8. Choose **Activate** to activate your certificate. Certificates must be activated prior to use.

### Create a policy and attach it to your thing

1. In the navigation pane of the AWS IoT console, choose **Secure**, and then choose **Policies**.
2. On the **Policies** page, choose **Create** (top right corner).
Vincent Coubard's avatar
Vincent Coubard committed
218
3. On the **Create a policy** page, enter a name for the policy. In the **Action** box, enter **iot:Connect**, **iot:Publish**, **iot:Subscribe**, **iot:Receive**. The **Resource ARN** box will be auto-filled with your credentials. Replace the part after the last colon (`:`) with `*`. Under **Effect**, check the **Allow** box. Click on **Create**.
219
220
221
222
223
224
4. In the left navigation pane of the AWS IoT console, choose **Secure**, and then choose **Certificates**. You should see the certificate that you have created earlier.
5. Click on the three dots in the upper right corner of the certificate and choose **Attach policy**.
6. In the **Attach policies to certificate(s)** window, enable the policy that you have just created and click **Attach**.

## Configure the application to connect to your AWS account

Vincent Coubard's avatar
Vincent Coubard committed
225
Edit `bsp/default_credentials/aws_clientcredential.h` file and set values of specified user defines.
226
227
228
229
230
231
232
233
234

`clientcredentialMQTT_BROKER_ENDPOINT`

Set this to the endpoint name of your amazon account. To find this go to the navigation pane of the [AWS IoT console](https://console.aws.amazon.com/iotv2/), choose **Settings**. On the **Settings** page, and copy the name of your **Endpoint** (such as `a3xyzzyx.iot.us-east-2.amazonaws.com`).

`clientcredentialIOT_THING_NAME`

Set this to the name of the thing you set (e.g. MyThing).

Vincent Coubard's avatar
Vincent Coubard committed
235
Next insert the keys that are in the certificates you have downloaded when you created the thing. Edit the file `bsp/default_credentials/aws_clientcredential_keys.h` replacing the existing keys with yours.
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256

`keyCLIENT_CERTIFICATE_PEM`

Replace with contents from `<your-thing-certificate-unique-string>-certificate.pem.crt`.

`keyCLIENT_PRIVATE_KEY_PEM`

Replace with contents from `<your-thing-certificate-unique-string>-private.pem.key`.

`keyCLIENT_PUBLIC_KEY_PEM`

Replace with contents from `<your-thing-certificate-unique-string>-public.pem.key`.

## Observing MQTT connectivity

To see messages being sent by the application:
1. Login to your account and browse to the [AWS IoT console](https://console.aws.amazon.com/iotv2/).
2. In the left navigation panel, choose **Manage**, and then choose **Things**.
3. Select the thing you created, and open the **Activity** tab. This will show the application connecting and subscribing to a topic.
4. Click on the **MQTT test client** button. This will open a new tab.
5. The tab **Subscribe to a topic** should be already selected. Open the **Additional configuration** rollout.
Vincent Coubard's avatar
Vincent Coubard committed
257
6. In the topic filter field enter the topic name which is a concatenation of the name of your thing (set in `clientcredentialIOT_THING_NAME`) and `/ml/inference` (e.g. if you thing name is MyThing then it's `MyThing/ml/inference`)
258
259
260
7. In the **MQTT payload display** combo box select `Display payloads as strings (more accurate)`
8. Click the **Subscribe** button. The messages will be shown below.

Vincent Coubard's avatar
Vincent Coubard committed
261
262
# OTA firmware update

Vincent Coubard's avatar
Vincent Coubard committed
263
The application includes OTA update functionality. The application will check for updates from the AWS Cloud at boot time to check if there is an update pending.  If an update is available, the application will stop ML processing, download the new firmware, and then apply the new firmware if the version number indicates the image is newer. To make such a version available you need to prepare the update binary (this is part of the build process) and create an OTA job on AWS.
Vincent Coubard's avatar
Vincent Coubard committed
264

Vincent Coubard's avatar
Vincent Coubard committed
265
266
## Creating updated firmware

Vincent Coubard's avatar
Vincent Coubard committed
267
As part of the example build process an updated firmware will be created that will only differ in version number. That is enough to demonstrate the OTA process. If you want to add other changes you will have to copy the non-updated binary elsewhere before running the build again with your changes as the same build is used for both. The update binary is placed in `build/kws/kws_signed_update.bin`. This is already signed and is the file you will need to upload to a AWS bucket in the next section.
Vincent Coubard's avatar
Vincent Coubard committed
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284

Upon completion of the build and sign process the signature string will be echoed. This will be needed in the next step.

## Creating AWS IoT firmware update job

1. [Create an Amazon S3 bucket to store your update](https://docs.aws.amazon.com/freertos/latest/userguide/dg-ota-bucket.html)
2. [Create an OTA Update service role](https://docs.aws.amazon.com/freertos/latest/userguide/create-service-role.html)
3. [Create an OTA user policy](https://docs.aws.amazon.com/freertos/latest/userguide/create-ota-user-policy.html)
4. Go to AWS IoT web interface and choose **Manage** and then **Jobs*
5. Click the create job button and select **Create FreeRTOS OTA update job**
6. Give it a name and click next
7. Select the device to update (the Thing you created in earlier steps)
8. Select `MQTT` transport only
9. Select **Use my custom signed file**
10. Paste the signature string that is echoed during the build of the example (it is also available in `build/kws/update-signature.txt`).
11. Select `SHA-256` and `RSA` algorithms.
12. For **Path name of code signing certificate on device** put in `0` (the path is not used)
Vincent Coubard's avatar
Vincent Coubard committed
285
13. Select upload new file and select the signed update binary (`build/kws/kws_signed_update.bin`)
Vincent Coubard's avatar
Vincent Coubard committed
286
287
288
289
290
291
14. Select the S3 bucket you created in step 1. to upload the binary to
15. For **Path name of file on device** put in `non_secure image`
16. As the role, select the OTA role you created in step 2.
17. Click next
18. Click next, your update job is ready and running - next time your application connects it will perform the update.

Vincent Coubard's avatar
Vincent Coubard committed
292
293
294
295
296
297
# Terminating AMI Instance at the end of the day

## Stopping the instance in EC2 [(AWS on getting started)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)
1. Go to [EC2](https://console.aws.amazon.com/ec2/v2/) in the AWS Web Console.
2. Select the instance to stop.
3. Click on `Instance state` and select `Stop Instance` in the drop down menu.
298

Vincent Coubard's avatar
Vincent Coubard committed
299
300
301
302
303
304
## Stopping the instance using a local terminal

```sh
./scripts/vht_cli.py -k MyKeyPair stop
```

Vincent Coubard's avatar
Vincent Coubard committed
305
306
# Source code overview

307
- `bsp`: Arm Corstone™-300 subsystem platform code and AWS configurations.
Vincent Coubard's avatar
Vincent Coubard committed
308
309
310
311
- `lib`: Middleware used by IoT Total Solution.
  - `lib/mcuboot`: MCUboot bootloader.
  - `lib/tf-m`: Trusted Firmware M: [Platform Security Architecture](PSA) for Armv8-M.
  - `lib/mbedcrypto`: Mbed TLS and PSA cryptographic APIs.
312
  - `lib/ml-embedded-evaluation-kit`: Arm® ML embedded evaluation kitr Ethos NPU. It includes [TensorFlow](https://www.tensorflow.org/)
Vincent Coubard's avatar
Vincent Coubard committed
313
  - `lib/amazon_freertos`: AWS FreeRTOS distribution.
314
  - `libVHT`: Virtual streaming solution for Arm Virtual Hardware.
Vincent Coubard's avatar
Vincent Coubard committed
315
316
317
- `blinky`: Blinky application.
  - `blinky/main_ns.c`: Entry point of the blinky application
- `kws`: Keyword detection application.
318
  - `kws/source/main_ns.c`: Entry point of the kws application.
Vincent Coubard's avatar
Vincent Coubard committed
319
  - `kws/source/blinky_task.c`: Blinky/UX thread of the application.
320
  - `kws/source/ml_interface.c`: Interface between the virtual streaming solution and tensor flow.
Vincent Coubard's avatar
Vincent Coubard committed
321

Vincent Coubard's avatar
Vincent Coubard committed
322
323
# ML Model Replacement

324
All the ML models supported by the [ML Embedded Eval Kit](All the models supported ) are available to applications. The first step to use another module is to generate sources files from its labels and `.tflite` model.
325

Vincent Coubard's avatar
Vincent Coubard committed
326
```sh
327
328
329
330
331
332
333
334
335
336
337
338
339
# Enter the ml example repository
cd lib/ml-embedded-evaluation-kit/

ML_GEN_SRC="generated/<model name>/src"
ML_GEN_INC="generated/<model name>/include"

mkdir -p $ML_GEN_SRC
mkdir -p $ML_GEN_INC

./lib/ml-embedded-evaluation-kit/resources_downloaded/env/bin/python3 scripts/py/gen_labels_cpp.py \
    --labels_file resources/<model name>/labels/<label file>.txt \
    --source_folder_path $ML_GEN_SRC \
    --header_folder_path $ML_GEN_INC \
340
    --output_file_name <model name>_labels
341
342
343
./resources_downloaded/env/bin/python3 scripts/py/gen_model_cpp.py \
    --tflite_path resources_downloaded/<model name>/<model>.tflite \
    --output_dir $ML_GEN_SRC
Vincent Coubard's avatar
Vincent Coubard committed
344
345
```

346
Models available are present in `./lib/ml-embedded-evaluation-kit/resources_downloaded`.
347
Pre-integrated source code is available from the `ML Embedded Eval Kit` and can be browsed from `./lib/ml-embedded-evaluation-kit/source/use_case`.
348
349
350

Integrating a new model means integrating its source code and requires update of the build files.

Vincent Coubard's avatar
Vincent Coubard committed
351
352
# ML Embedded Eval Kit

353
The Arm ML Embedded Evaluation Kit , is an open-source repository enabling users to quickly build and deploy embedded machine learning applications for Arm Cortex-M55 CPU and Arm Ethos-U55 NPU.
Vincent Coubard's avatar
Vincent Coubard committed
354

355
With ML Eval Kit you can run inferences on either a custom neural network on Ethos-U microNPU or using availble ML applications such as [Image classification](https://review.mlplatform.org/plugins/gitiles/ml/ethos-u/ml-embedded-evaluation-kit/+/c930ad9dc189d831ac77f716df288f70178d4c10/docs/use_cases/img_class.md), [Keyword spotting (KWS)](https://review.mlplatform.org/plugins/gitiles/ml/ethos-u/ml-embedded-evaluation-kit/+/c930ad9dc189d831ac77f716df288f70178d4c10/docs/use_cases/kws.md), [Automated Speech Recognition (ASR)](https://review.mlplatform.org/plugins/gitiles/ml/ethos-u/ml-embedded-evaluation-kit/+/c930ad9dc189d831ac77f716df288f70178d4c10/docs/use_cases/asr.md), [Anomaly Detection](https://review.mlplatform.org/plugins/gitiles/ml/ethos-u/ml-embedded-evaluation-kit/+/c930ad9dc189d831ac77f716df288f70178d4c10/docs/use_cases/ad.md), and [Person Detection](https://review.mlplatform.org/plugins/gitiles/ml/ethos-u/ml-embedded-evaluation-kit/+/HEAD/docs/use_cases/visual_wake_word.md) all using Arm Fixed Virtual Platform (FVP) available in Arm Virtual Hardware.
Vincent Coubard's avatar
Vincent Coubard committed
356

Vincent Coubard's avatar
Vincent Coubard committed
357
358
# Known limitations

359
360
361
- Arm compiler 6 is the only compiler supported.
- Accuracy of the ML detection running alongside cloud connectivity depends on the performance of the EC2 instance used. We recommend to use at least a t3.medium instance.
- Arm Corstone™-300 subsystem simulation is not time accurate. Performances will differ depending on the performances of the host machine.
Vincent Coubard's avatar
Vincent Coubard committed
362
363


Vincent Coubard's avatar
Vincent Coubard committed
364
365
366
367
368
369
# Future Enhancements
- [AWS Partner Device Catalog Listing](https://devices.amazonaws.com/) (leveraging Arm Virtual Hardware)
- cmake

# Other Resources

370
371
372
| Repository                                                                                                    | Description                                                                                                                                                                                                                        |
|---------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Arm AI Ecosystem Catalog](https://www.arm.com/why-arm/partner-ecosystem/ai-ecosystem-catalog)                | Connects you to the right partners, enabling you to build the next generation of AI solutions                                                                                                                                      |
Vincent Coubard's avatar
Vincent Coubard committed
373
| [Arm IoT Ecosystem Catalog](https://www.arm.com/why-arm/partner-ecosystem/iot-ecosystem-catalog)              | Explore Arm IoT Ecosystem partners who can help transform an idea into a secure, market-leading device.                                                                                                                            |
374
375
| [Arm ML Model Zoo](https://github.com/ARM-software/ML-zoo)                                                    | A collection of machine learning models optimized for Arm IP.                                                                                                                                                                      |
| [Arm Virtual Hardware Documentation](https://mdk-packs.github.io/VHT-TFLmicrospeech/overview/html/index.html) | Documentation for [Arm Virtual Hardware](https://www.arm.com/products/development-tools/simulation/virtual-hardware)                                                                                                               |
Vincent Coubard's avatar
Vincent Coubard committed
376
377
378
| [Arm Virtual Hardware source code](https://github.com/ARM-software/VHT)                                       | Source code of[Arm Virtual Hardware](https://www.arm.com/products/development-tools/simulation/virtual-hardware)                                                                                                               |
| [AWS FreeRTOS Documentation](https://docs.aws.amazon.com/freertos/)                                           | Documentation for AWS FreeRTOS.                                                                                                                                                                                                    |
| [AWS FreeRTOS source code](https://github.com/aws/amazon-freertos)                                            | Source code of AWS FreeRTOS.                                                                                                                                                                                                      |
379
| [AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html)                         | Documentation for AWS IoT.                                                                                                                                                                                                         |
Vincent Coubard's avatar
Vincent Coubard committed
380
381
382
383
384
| [Trusted Firmware-M Documentation](https://tf-m-user-guide.trustedfirmware.org/)                              | Documentation for Trusted Firmware-M.                                                                                                                                                                                               |
| [Trusted Firmware-M Source code](https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git)                 | Source code of Trusted Firmware-M.                                                                                                                                                                                               |
| [Mbed Crypto](https://github.com/ARMmbed/mbedtls)                                                             | Mbed Crypto source code.                                                                                                                                                                                               |
| [MCU Boot](https://github.com/mcu-tools/mcuboot)                                                              | MCU Boot source code.                                                                                                                                                                                               |
| [ml-embedded-evaluation-kit](https://review.mlplatform.org/plugins/gitiles/ml/ethos-u/ml-embedded-evaluation-kit) | ML Embedded eval kit source code |
385
| Support                                                                                                       | A [community.arm.com](http://community.arm.com/) forum exists for users to post queries. INTERNAL NOTE →   they have – already set up on the test environment (link).  This will be moved to the live environment on 19th October. |
Vincent Coubard's avatar
Vincent Coubard committed
386
387
388

# License and contributions

Evelyne Donnaes's avatar
Evelyne Donnaes committed
389
The software is provided under the Apache-2.0 license. All contributions to software and documents are licensed by contributors under the same license model as the software/document itself (ie. inbound == outbound licensing). Open IoT SDK may reuse software already licensed under another license, provided the license is permissive in nature and compatible with Apache v2.0.
Vincent Coubard's avatar
Vincent Coubard committed
390

Vincent Coubard's avatar
Vincent Coubard committed
391
Folders containing files under different permissive license than Apache 2.0 are listed in the LICENSE file.
392
393
394
395
396
397

## Security issues reporting

If you find any security vulnerabilities, please do not report it in the GitLab issue tracker. Instead, send an email to the security team at arm-security@arm.com stating that you may have found a security vulnerability in the IoT Total Solution Keyword Detection project.

More details can be found at [Arm Developer website](https://developer.arm.com/support/arm-security-updates/report-security-vulnerabilities).