Skip to content

Commit 7c1191c

Browse files
aviscontikartben
authored andcommitted
samples/sensor: Add sample to read from FIFO stream
Add sample to read from up to 10 FIFO streaming devices, using the sensor_stream() API and the RTIO framework: https://docs.zephyrproject.org/latest/services/rtio/index.html The devices has to be aliased as streamN (0 <= N <= 9) in DT, and will be instantiated using SENSOR_DT_STREAM_IODEV() macro. Currently the sample gets/prints data on SENSOR_TRIG_FIFO_WATERMARK trigger basis for the following sensor channels: - SENSOR_CHAN_ACCEL_XYZ - SENSOR_CHAN_GYRO_XYZ - SENSOR_CHAN_DIE_TEMP - SENSOR_CHAN_GAME_ROTATION_VECTOR - SENSOR_CHAN_GRAVITY_VECTOR - SENSOR_CHAN_GBIAS_XYZ Signed-off-by: Armando Visconti <[email protected]>
1 parent c69a13d commit 7c1191c

File tree

9 files changed

+510
-0
lines changed

9 files changed

+510
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Copyright (c) 2024 STMicroelectronics
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
cmake_minimum_required(VERSION 3.20.0)
5+
6+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
7+
project(stream_fifo)
8+
9+
FILE(GLOB app_sources src/*.c)
10+
target_sources(app PRIVATE ${app_sources})

samples/sensor/stream_fifo/README.rst

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
.. zephyr:code-sample:: stream_fifo
2+
:name: Generic device FIFO streaming
3+
:relevant-api: sensor_interface
4+
5+
Get accelerometer/gyroscope/temperature FIFO data frames from a sensor using
6+
SENSOR_TRIG_FIFO_WATERMARK as a trigger.
7+
8+
Overview
9+
********
10+
11+
This sample application demonstrates how to stream FIFO data using the :ref:`RTIO framework <rtio>`.
12+
13+
The streaming is started using the sensor_stream() API and it is self-sustained by the
14+
SENSOR_TRIG_FIFO_WATERMARK trigger.
15+
16+
Currently the sample gets/prints data for the following sensor channels:
17+
18+
- SENSOR_CHAN_ACCEL_XYZ
19+
- SENSOR_CHAN_GYRO_XYZ
20+
- SENSOR_CHAN_DIE_TEMP
21+
- SENSOR_CHAN_GAME_ROTATION_VECTOR
22+
- SENSOR_CHAN_GRAVITY_VECTOR
23+
- SENSOR_CHAN_GBIAS_XYZ
24+
25+
Building and Running
26+
********************
27+
28+
This sample supports up to 10 FIFO streaming devices. Each device needs
29+
to be aliased as :samp:`stream{N}` where ``N`` goes from ``0`` to ``9``. For example:
30+
31+
.. code-block:: devicetree
32+
33+
/ {
34+
aliases {
35+
stream0 = &lsm6dsv16x_6b_x_nucleo_iks4a1;
36+
};
37+
};
38+
39+
.. note::
40+
Note that NUM_SENSORS defined in main.c must match ``N`` and should be set accordingly.
41+
42+
Example devicetree overlays and configurations are already available for nucleo_f401re and
43+
nucleo_h503rb in the boards directory:
44+
45+
- :zephyr_file:`samples/sensor/stream_fifo/boards/nucleo_f401re.overlay`
46+
47+
DT overlay file for the nucleo_f401re board.
48+
49+
- :zephyr_file:`samples/sensor/stream_fifo/boards/nucleo_f401re.conf`
50+
51+
Configuration file for the nucleo_f401re board.
52+
53+
- :zephyr_file:`samples/sensor/stream_fifo/boards/nucleo_h503rb.overlay`
54+
55+
DT overlay file for the nucleo_h503rb board.
56+
57+
- :zephyr_file:`samples/sensor/stream_fifo/boards/nucleo_h503rb.conf`
58+
59+
Configuration file for the nucleo_h503rb board.
60+
61+
For example, build and run sample for nucleo_h503rb with:
62+
63+
.. zephyr-app-commands::
64+
:zephyr-app: samples/sensor/stream_fifo
65+
:board: nucleo_h503rb
66+
:goals: build flash
67+
:compact:
68+
69+
Sample Output
70+
=============
71+
72+
The following example output is for lsm6dsv16x IMU device with accelerometer, gyroscope
73+
and temperature sensor including also the Sensor Fusion Low Power (SFLP) information.
74+
The FIFO watermark is set to 64. The board used is a nucleo_h503rb
75+
equipped with a :ref:`x-nucleo-iks4a1` shield.
76+
77+
.. code-block:: console
78+
79+
FIFO count - 64
80+
XL data for lsm6dsv16x@6b 1680572433340ns (0.373229, -0.009569, 9.909734)
81+
XL data for lsm6dsv16x@6b 1680639100006ns (0.354089, -0.023924, 9.909734)
82+
XL data for lsm6dsv16x@6b 1680705766672ns (0.368444, 0.000000, 9.933659)
83+
XL data for lsm6dsv16x@6b 1680772433338ns (0.373229, 0.000000, 9.924089)
84+
XL data for lsm6dsv16x@6b 1680839100004ns (0.368444, -0.004784, 9.924089)
85+
XL data for lsm6dsv16x@6b 1680905766670ns (0.363659, -0.009569, 9.924089)
86+
XL data for lsm6dsv16x@6b 1680972433336ns (0.358874, -0.004784, 9.928874)
87+
XL data for lsm6dsv16x@6b 1681039100002ns (0.363659, 0.004784, 9.928874)
88+
GY data for lsm6dsv16x@6b 1680572433340ns (0.001524, -0.000609, 0.004269)
89+
GY data for lsm6dsv16x@6b 1680639100006ns (-0.001219, 0.002134, 0.004879)
90+
GY data for lsm6dsv16x@6b 1680705766672ns (0.001219, -0.001219, 0.004879)
91+
GY data for lsm6dsv16x@6b 1680772433338ns (-0.000914, 0.001219, 0.003964)
92+
GY data for lsm6dsv16x@6b 1680839100004ns (0.000914, -0.001219, 0.004574)
93+
GY data for lsm6dsv16x@6b 1680905766670ns (0.001829, 0.000914, 0.005489)
94+
GY data for lsm6dsv16x@6b 1680972433336ns (-0.000609, 0.000304, 0.004574)
95+
GY data for lsm6dsv16x@6b 1681039100002ns (0.001829, 0.000304, 0.004879)
96+
TP data for lsm6dsv16x@6b 1680572433340ns 24.347656 °C
97+
TP data for lsm6dsv16x@6b 1680639100006ns 24.324218 °C
98+
TP data for lsm6dsv16x@6b 1680705766672ns 24.316406 °C
99+
TP data for lsm6dsv16x@6b 1680772433338ns 24.296875 °C
100+
ROT data for lsm6dsv16x@6b 1680639100006ns (-0.000008, -0.018661, 0.021575, 0.999593)
101+
ROT data for lsm6dsv16x@6b 1680705766672ns (-0.000139, -0.018524, 0.021606, 0.999594)
102+
ROT data for lsm6dsv16x@6b 1680772433338ns (-0.000055, -0.018569, 0.021621, 0.999593)
103+
ROT data for lsm6dsv16x@6b 1680839100004ns (-0.000050, -0.018539, 0.021606, 0.999594)
104+
ROT data for lsm6dsv16x@6b 1680905766670ns (-0.000003, -0.018569, 0.021621, 0.999593)
105+
ROT data for lsm6dsv16x@6b 1680972433336ns (0.000044, -0.018493, 0.021667, 0.999594)
106+
ROT data for lsm6dsv16x@6b 1681039100002ns (0.000013, -0.018432, 0.021667, 0.999595)
107+
ROT data for lsm6dsv16x@6b 1681105766668ns (0.000113, -0.018402, 0.021682, 0.999595)
108+
GV data for lsm6dsv16x@6b 1680639100006ns (37.270999, -0.792999, 998.447998)
109+
GV data for lsm6dsv16x@6b 1680705766672ns (36.965999, -1.037000, 998.447998)
110+
GV data for lsm6dsv16x@6b 1680772433338ns (37.088001, -0.854000, 998.447998)
111+
GV data for lsm6dsv16x@6b 1680839100004ns (37.027000, -0.854000, 998.447998)
112+
GV data for lsm6dsv16x@6b 1680905766670ns (37.088001, -0.792999, 998.447998)
113+
GV data for lsm6dsv16x@6b 1680972433336ns (36.904998, -0.670999, 998.447998)
114+
GV data for lsm6dsv16x@6b 1681039100002ns (36.783000, -0.732000, 998.447998)
115+
GV data for lsm6dsv16x@6b 1681105766668ns (36.722000, -0.548999, 998.447998)
116+
GY GBIAS data for lsm6dsv16x@6b 1680572433340ns (0.000303, -0.000151, 0.004179)
117+
GY GBIAS data for lsm6dsv16x@6b 1680639100006ns (0.000303, 0.000000, 0.004179)
118+
GY GBIAS data for lsm6dsv16x@6b 1680705766672ns (0.000303, -0.000075, 0.004179)
119+
GY GBIAS data for lsm6dsv16x@6b 1680772433338ns (0.000227, 0.000000, 0.004179)
120+
GY GBIAS data for lsm6dsv16x@6b 1680839100004ns (0.000303, -0.000075, 0.004179)
121+
GY GBIAS data for lsm6dsv16x@6b 1680905766670ns (0.000303, 0.000000, 0.004255)
122+
GY GBIAS data for lsm6dsv16x@6b 1680972433336ns (0.000303, 0.000000, 0.004255)
123+
GY GBIAS data for lsm6dsv16x@6b 1681039100002ns (0.000379, 0.000000, 0.004255)
124+
XL data for lsm6dsv16x@6b 1681105766668ns (0.358874, -0.019139, 9.928874)
125+
XL data for lsm6dsv16x@6b 1681172433334ns (0.382799, -0.004784, 9.962369)
126+
XL data for lsm6dsv16x@6b 1681239100000ns (0.354089, 0.000000, 9.914519)
127+
GY data for lsm6dsv16x@6b 1681105766668ns (0.000304, 0.002134, 0.004574)
128+
GY data for lsm6dsv16x@6b 1681172433334ns (-0.000914, 0.000914, 0.004574)
129+
GY data for lsm6dsv16x@6b 1681239100000ns (0.002744, -0.002439, 0.004879)
130+
TP data for lsm6dsv16x@6b 1680839100004ns 24.339843 °C
131+
TP data for lsm6dsv16x@6b 1680905766670ns 24.339843 °C
132+
TP data for lsm6dsv16x@6b 1680972433336ns 24.289062 °C
133+
TP data for lsm6dsv16x@6b 1681039100002ns 24.296875 °C
134+
ROT data for lsm6dsv16x@6b 1681172433334ns (0.000049, -0.018310, 0.021697, 0.999596)
135+
ROT data for lsm6dsv16x@6b 1681239100000ns (0.000020, -0.018371, 0.021697, 0.999595)
136+
GV data for lsm6dsv16x@6b 1681172433334ns (36.539001, -0.670999, 998.447998)
137+
GV data for lsm6dsv16x@6b 1681239100000ns (36.660999, -0.732000, 998.447998)
138+
GY GBIAS data for lsm6dsv16x@6b 1681105766668ns (0.000379, 0.000000, 0.004331)
139+
GY GBIAS data for lsm6dsv16x@6b 1681172433334ns (0.000303, 0.000075, 0.004331)
140+
GY GBIAS data for lsm6dsv16x@6b 1681239100000ns (0.000379, 0.000000, 0.004331)
141+
TP data for lsm6dsv16x@6b 1681105766668ns 24.289062 °C
142+
TP data for lsm6dsv16x@6b 1681172433334ns 24.324218 °C
143+
TP data for lsm6dsv16x@6b 1681239100000ns 24.281250 °C
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copyright (c) 2024 STMicroelectronics
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
CONFIG_I2C_RTIO=y
5+
CONFIG_LSM6DSV16X_STREAM=y
6+
CONFIG_LSM6DSV16X_ENABLE_TEMP=y
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright (c) 2024 STMicroelectronics
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
#include <zephyr/dt-bindings/sensor/lsm6dsv16x.h>
7+
8+
9+
/*
10+
* Nucleo F401RE board + shield iks4a1
11+
*
12+
* This devicetree overlay file will be automatically picked by the Zephyr
13+
* build system when building the sample for the nucleo_f401re board.
14+
*/
15+
16+
/ {
17+
aliases {
18+
stream0 = &lsm6dsv16x_6b_x_nucleo_iks4a1;
19+
};
20+
};
21+
22+
&arduino_i2c {
23+
lsm6dsv16x_6b_x_nucleo_iks4a1: lsm6dsv16x@6b {
24+
compatible = "st,lsm6dsv16x";
25+
reg = <0x6b>;
26+
accel-odr = <LSM6DSV16X_DT_ODR_AT_480Hz>;
27+
accel-range = <LSM6DSV16X_DT_FS_16G>;
28+
gyro-odr = <LSM6DSV16X_DT_ODR_AT_480Hz>;
29+
gyro-range = <LSM6DSV16X_DT_FS_500DPS>;
30+
fifo-watermark = <64>;
31+
accel-fifo-batch-rate = <LSM6DSV16X_DT_XL_BATCHED_AT_60Hz>;
32+
gyro-fifo-batch-rate = <LSM6DSV16X_DT_GY_BATCHED_AT_60Hz>;
33+
temp-fifo-batch-rate = <LSM6DSV16X_DT_TEMP_BATCHED_AT_15Hz>;
34+
int2-gpios = <&arduino_header 10 GPIO_ACTIVE_HIGH>; /* D4 (PB5) */
35+
drdy-pin = <2>;
36+
drdy-pulsed;
37+
};
38+
};
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copyright (c) 2024 STMicroelectronics
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
CONFIG_I2C_RTIO=y
5+
CONFIG_LSM6DSV16X_STREAM=y
6+
CONFIG_LSM6DSV16X_ENABLE_TEMP=y
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright (c) 2024 STMicroelectronics
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
#include <zephyr/dt-bindings/sensor/lsm6dsv16x.h>
7+
8+
9+
/*
10+
* Nucleo F401RE board + shield iks4a1
11+
*
12+
* This devicetree overlay file will be automatically picked by the Zephyr
13+
* build system when building the sample for the nucleo_f401re board.
14+
*/
15+
16+
/ {
17+
aliases {
18+
stream0 = &lsm6dsv16x_6b_x_nucleo_iks4a1;
19+
};
20+
};
21+
22+
&arduino_i2c {
23+
lsm6dsv16x_6b_x_nucleo_iks4a1: lsm6dsv16x@6b {
24+
compatible = "st,lsm6dsv16x";
25+
reg = <0x6b>;
26+
accel-odr = <LSM6DSV16X_DT_ODR_AT_480Hz>;
27+
accel-range = <LSM6DSV16X_DT_FS_16G>;
28+
gyro-odr = <LSM6DSV16X_DT_ODR_AT_480Hz>;
29+
gyro-range = <LSM6DSV16X_DT_FS_500DPS>;
30+
fifo-watermark = <64>;
31+
accel-fifo-batch-rate = <LSM6DSV16X_DT_XL_BATCHED_AT_15Hz>;
32+
gyro-fifo-batch-rate = <LSM6DSV16X_DT_GY_BATCHED_AT_15Hz>;
33+
temp-fifo-batch-rate = <LSM6DSV16X_DT_TEMP_BATCHED_AT_15Hz>;
34+
35+
sflp-odr = <LSM6DSV16X_DT_SFLP_ODR_AT_15Hz>;
36+
sflp-fifo-enable = <LSM6DSV16X_DT_SFLP_FIFO_GAME_ROTATION_GRAVITY_GBIAS>;
37+
int2-gpios = <&arduino_header 10 GPIO_ACTIVE_HIGH>; /* D4 (PB5) */
38+
drdy-pin = <2>;
39+
drdy-pulsed;
40+
};
41+
};

samples/sensor/stream_fifo/prj.conf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Copyright (c) 2024 STMicroelectronics
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
CONFIG_STDOUT_CONSOLE=y
5+
CONFIG_SENSOR=y
6+
CONFIG_SENSOR_ASYNC_API=y
7+
CONFIG_CBPRINTF_FP_SUPPORT=y
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
sample:
2+
name: Stream FIFO sample
3+
tests:
4+
sample.sensor.stream_fifo:
5+
harness: console
6+
tags: sensors
7+
filter: dt_alias_exists("stream0")
8+
harness_config:
9+
type: one_line
10+
regex:
11+
- "^\\s*[0-9A-Za-z_,+-.]*@[0-9A-Fa-f]* \\[m\/s\\^2\\]: \
12+
\\(\\s*-?[0-9\\.]*,\\s*-?[0-9\\.]*,\\s*-?[0-9\\.]*\\)$"

0 commit comments

Comments
 (0)