boards/shields: add support for x-nucleo-iks4a1 shield

x-nucleo-iks4a1 shield is an arduino compatible companion board
which can be used on top of Nucleo standard boards for industrial
applications. Following MEMS sensor are currently supported:

    - LSM6DSO16IS: MEMS 3D accelerometer + 3D gyroscope
    - LSM6DSV16X: MEMS 3D accelerometer + 3D gyroscope
    - LIS2MDL: MEMS 3D magnetometer
    - LPS22DF: Low-power and high-precision MEMS pressure sensor

(https://www.st.com/resource/en/data_brief/x-nucleo-iks4a1.pdf)

The board exports three overlays:

    1. x_nucleo_iks4a1.overlay (standard mode)

       All MEMS sensors are connected to micro-controller.

    2. x_nucleo_iks4a1_shub1.overlay (HUB1 mode)

       LSM6DSV16X IMU sensor act as a sensor_hub with LIS2MDL and
       LPS22DF connected to it.

    3. x_nucleo_iks4a1_shub2.overlay (HUB2 mode)

       LSM6DSO16IS IMU sensor act as a sensor_hub with LIS2MDL and
       LPS22DF connected to it.

Signed-off-by: Armando Visconti <armando.visconti@st.com>
This commit is contained in:
Armando Visconti 2024-01-18 10:54:10 +01:00 committed by Fabio Baltieri
commit cc3040aed6
6 changed files with 252 additions and 0 deletions

View file

@ -0,0 +1,5 @@
# Copyright (c) 2024 STMicroelectronics
# SPDX-License-Identifier: Apache-2.0
config SHIELD_X_NUCLEO_IKS01A4
def_bool $(shields_list_contains,x_nucleo_iks4a1)

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View file

@ -0,0 +1,157 @@
.. _x-nucleo-iks4a1:
X-NUCLEO-IKS4A1: MEMS Inertial and Environmental Multi sensor shield
####################################################################
Overview
********
The X-NUCLEO-IKS4A1 is a motion MEMS and environmental sensor expansion board
for the STM32 Nucleo. It is equipped with Arduino UNO R3 connector layout, and
allows application development with features like sensor HUB (LSM6DSO16IS and
LSM6DSV16X), camera module integration and Qvar touch/swipe gestures (thanks to
the equipped electrode).
.. image:: img/x-nucleo-iks4a1.jpg
:align: center
:alt: X-NUCLEO-IKS4A1
More general information about the board can be found at the
`X-NUCLEO-IKS4A1 website`_.
Hardware Description
********************
X-NUCLEO-IKS4A1 provides the following key features:
- LSM6DSO16IS: MEMS 3D accelerometer (±2/±4/±8/±16 g) + 3D gyroscope
(±125/±250/±500/±1000/±2000 dps) with ISPU (Intelligent Processing Unit)
- LIS2MDL: MEMS 3D magnetometer (±50 gauss)
- LIS2DUXS12: Ultra low-power MEMS 3D accelerometer (±2/±4/±8/±16 g) with
Qvar, AI, & anti-aliasing
- LPS22DF: Low-power and high-precision MEMS pressure sensor, 260-1260 hPa
absolute digital output barometer
- SHT40AD1B: High-accuracy, ultra-low-power relative humidity and temperature
sensor (by Sensirion)
- STTS22H: Low-voltage, ultralow-power, 0.5 °C accuracy temperature sensor
(40 °C to +125 °C)
- LSM6DSV16X: MEMS 3D accelerometer (±2/±4/±8/±16 g) + 3D gyroscope
(±125/±250/±500/±1000/±2000/±4000 dps) with embedded sensor fusion, AI, Qvar
- DIL 24-pin socket available for additional MEMS adapters and other sensors
- Free comprehensive development firmware library and example for all sensors
compatible with STM32Cube firmware
- Equipped with Qvar touch/swipe electrode
- I²C sensor hub features on LSM6DSO and LSM6DSV16X available
- MIPI I3C® compatibility for communication with LIS2DUXS12, LSM6DSV16X and
LPS22DF
- Compatible with STM32 Nucleo boards
- Equipped with Arduino UNO R3 connector
- Equipped with industrial connector for IR sensor (STHS34PF80) application
development. It can be connected at the same time of external MEMS through
DIL24 adapter
- Available interface for external camera module applications coupled with
LSM6DSV16X through aux SPI (3/4 w)
- RoHS compliant
- WEEE compliant
- UKCA compliant
Hardware Configuration
**********************
X-NUCLEO-IKS4A1 board can be configured in five different modes, which can be
selected through J4 and J5 jumpers. Additional information about X-NUCLEO-IKS4A1
configuration modes and how sensors are connected together can be found in the
`X-NUCLEO-IKS4A1 user manual`_
.. _x-nucleo-iks4a1-mode-1:
Mode 1: Standard Mode
=====================
In standard I2C mode, all devices are connected to an external main board via the
same I2C bus.
The board configuration is:
- J4: 1-2, 11-12 (STM_SDA = SENS_SDA, HUB_SDx = GND)
- J5: 1-2, 11-12 (STM_SCL = SENS_SCL, HUB_SCx = GND)
.. _x-nucleo-iks4a1-mode-2:
Mode 2: LSM6DSO16IS SensorHub Mode (SHUB2)
==========================================
In this sensor hub I2C mode, it is possible to power-up the 6-axes IMU
(Inertial Measurement Unit) functionalities by collecting external data
through a direct control of the on-board environmental sensors (temperature,
pressure and magnetometer) and external sensor (DIL24) through the auxiliary
I2Cz bus "SENS_I2C". LSM6DSV16X, LIS2DUXS12 and SHT40AD1B remains connected
to the main bus "uC_I2C" coming from the external board.
The board configuration is:
- J4: 7-8 (HUB2_SDx = SENS_SDA)
- J5: 7-8 (HUB2_SCx = SENS_SCL)
.. _x-nucleo-iks4a1-mode-3:
Mode 3: LSM6DSV16X SensorHub Mode (SHUB1)
=========================================
In this sensor hub, it is possible to power-up the 6-axes IMU (Inertial
Measurement Unit) functionalities by collecting external data through
a direct control of the on-board environmental sensors (temperature,
pressure and magnetometer) and external sensor (DIL24) through the auxiliary
I2C bus "SENS_I2C". LSM6DSO16IS, LIS2DUXS12 and SHT40AD1B remains connected
to the main bus "uC_I2C" coming from the external board.
The board configuration is:
- J4: 5-6 (HUB1_SDx = SENS_SDA)
- J5: 5-6 (HUB1_SDx = SENS_SDA)
Mode 4: DIL24 SensorHub Mode
============================
In case a sensor with sensor hub embedded functionality is mounted to the
board through DIL24 adapter, it is possible to exploit this functionality
as for LSM6DSO16IS and the LSM6DSV16X. In this configuration, may be necessary
to connect the DIL24 to the external board through SPI lines in order to
avoid an address conflict on I2C bus with the LSM6DSO16IS and the LSM6DSV16X.
This is done by changing the SBx configuration.
The board configuration is:
- J4: 9-10 (DIL_SDx = SENS_SDA)
- J5: 9-10 (DIL_SDx = SENS_SDA)
Mode 5: LSM6DSO16IS as Qvar controller
======================================
In this configuration, it is possible to use the equipped Qvar swipe electrode
(by plugging it on JP6 and JP7 connectors) through the LSM6DSO16IS.
The board configuration is:
- J4: 3-4 (HUB1_SDx = QVAR1)
- J5: 3-4 (HUB1_Scx = QVAR2)
Devicetree Overlays
*******************
There are three predefined DT overlays in the board:
- :zephyr_file:`boards/shields/x_nucleo_iks4a1/x_nucleo_iks4a1.overlay`
This overlay describes sensor connections (and matching h/w configuration to be done)
as explained in Standard Mode (:ref:`x-nucleo-iks4a1-mode-1`)
- :zephyr_file:`boards/shields/x_nucleo_iks4a1/x_nucleo_iks4a1_shub1.overlay`
This overlay describes sensor connections (and matching h/w configuration to be done)
as explained in SHUB1 Mode (:ref:`x-nucleo-iks4a1-mode-3`)
- :zephyr_file:`boards/shields/x_nucleo_iks4a1/x_nucleo_iks4a1_shub2.overlay`
This overlay describes sensor connections (and matching h/w configuration to be done)
as explained in SHUB2 Mode (:ref:`x-nucleo-iks4a1-mode-2`)
.. _X-NUCLEO-IKS4A1 website:
http://www.st.com/en/ecosystems/x-nucleo-iks4a1.html
.. _X-NUCLEO-IKS4A1 user manual:
https://www.st.com/resource/en/user_manual/um3239-getting-started-with-the-xnucleoiks4a1-motion-mems-and-environmental-sensor-expansion-board-for-stm32-nucleo-stmicroelectronics.pdf

View file

@ -0,0 +1,48 @@
/*
* Copyright (c) 2024 STMicroelectronics
*
* SPDX-License-Identifier: Apache-2.0
*/
/ {
aliases {
magn0 = &lis2mdl_1e_x_nucleo_iks4a1;
accel0 = &lsm6dso16is_6a_x_nucleo_iks4a1;
accel1 = &lsm6dsv16x_6b_x_nucleo_iks4a1;
press0 = &lps22df_5d_x_nucleo_iks4a1;
};
};
&arduino_i2c {
lsm6dso16is_6a_x_nucleo_iks4a1: lsm6dso16is@6a {
compatible = "st,lsm6dso16is";
reg = <0x6a>;
accel-odr = <0x1b>;
gyro-odr = <0x11>;
irq-gpios = <&arduino_header 5 GPIO_ACTIVE_HIGH>; /* A5 (PC0) */
drdy-pin = <1>;
};
lsm6dsv16x_6b_x_nucleo_iks4a1: lsm6dsv16x@6b {
compatible = "st,lsm6dsv16x";
reg = <0x6b>;
accel-odr = <0x02>;
gyro-odr = <0x02>;
int2-gpios = <&arduino_header 10 GPIO_ACTIVE_HIGH>; /* D4 (PB5) */
drdy-pin = <2>;
drdy-pulsed;
};
lis2mdl_1e_x_nucleo_iks4a1: lis2mdl@1e {
compatible = "st,lis2mdl";
reg = <0x1e>;
irq-gpios = <&arduino_header 2 GPIO_ACTIVE_HIGH>; /* A2 (PA4) */
};
lps22df_5d_x_nucleo_iks4a1: lps22df@5d {
compatible = "st,lps22df";
reg = <0x5d>;
drdy-pulsed;
drdy-gpios = <&arduino_header 12 GPIO_ACTIVE_HIGH>; /* D6 (PB10) */
};
};

View file

@ -0,0 +1,22 @@
/*
* Copyright (c) 2024 STMicroelectronics
*
* SPDX-License-Identifier: Apache-2.0
*/
/ {
aliases {
accel0 = &lsm6dsv16x_6b_x_nucleo_iks4a1;
};
};
&arduino_i2c {
lsm6dsv16x_6b_x_nucleo_iks4a1: lsm6dsv16x@6b {
compatible = "st,lsm6dsv16x";
reg = <0x6b>;
accel-odr = <0x02>;
gyro-odr = <0x02>;
int1-gpios = <&arduino_header 11 GPIO_ACTIVE_HIGH>; /* D5 */
drdy-pin = <1>;
};
};

View file

@ -0,0 +1,20 @@
/*
* Copyright (c) 2024 STMicroelectronics
*
* SPDX-License-Identifier: Apache-2.0
*/
/ {
aliases {
accel0 = &lsm6dso16is_6a_x_nucleo_iks4a1_shub;
};
};
&arduino_i2c {
lsm6dso16is_6a_x_nucleo_iks4a1_shub: lsm6dso16is@6a {
compatible = "st,lsm6dso16is";
reg = <0x6a>;
irq-gpios = <&arduino_header 5 GPIO_ACTIVE_HIGH>; /* A5 */
drdy-pin = <1>;
};
};