From 3d45cf8bfcfc76bfb93fbb5b90a6fb932e79a098 Mon Sep 17 00:00:00 2001 From: Alan Carvalho de Assis Date: Thu, 24 Aug 2023 19:14:44 -0300 Subject: [PATCH] stm32f7/common: Add support to BMI270 sensor --- .../arm/stm32f7/common/include/stm32_bmi270.h | 80 +++++++++++++++++ boards/arm/stm32f7/common/src/CMakeLists.txt | 4 + boards/arm/stm32f7/common/src/Make.defs | 4 + boards/arm/stm32f7/common/src/stm32_bmi270.c | 89 +++++++++++++++++++ 4 files changed, 177 insertions(+) create mode 100644 boards/arm/stm32f7/common/include/stm32_bmi270.h create mode 100644 boards/arm/stm32f7/common/src/stm32_bmi270.c diff --git a/boards/arm/stm32f7/common/include/stm32_bmi270.h b/boards/arm/stm32f7/common/include/stm32_bmi270.h new file mode 100644 index 00000000000..a2e62b14c6b --- /dev/null +++ b/boards/arm/stm32f7/common/include/stm32_bmi270.h @@ -0,0 +1,80 @@ +/**************************************************************************** + * boards/arm/stm32f7/common/include/stm32_bmi270.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __BOARDS_ARM_STM32F7_COMMON_INCLUDE_STM32_BMI270_H +#define __BOARDS_ARM_STM32F7_COMMON_INCLUDE_STM32_BMI270_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Public Types + ****************************************************************************/ + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +#ifdef __cplusplus +#define EXTERN extern "C" +extern "C" +{ +#else +#define EXTERN extern +#endif + +/**************************************************************************** + * Inline Functions + ****************************************************************************/ + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Name: board_bmi270_initialize + * + * Description: + * Initialize and register the BMI270 IMU device. + * + * Input Parameters: + * devno - The device number, used to build the device path as /dev/imuN + * busno - The I2C bus number + * + * Returned Value: + * Zero (OK) on success; a negated errno value on failure. + * + ****************************************************************************/ + +int board_bmi270_initialize(int devno, int busno); + +#undef EXTERN +#ifdef __cplusplus +} +#endif + +#endif /* __BOARDS_ARM_STM32F7_COMMON_INCLUDE_STM32_BMI270_H */ diff --git a/boards/arm/stm32f7/common/src/CMakeLists.txt b/boards/arm/stm32f7/common/src/CMakeLists.txt index 83950411c34..86cbaf93dd4 100644 --- a/boards/arm/stm32f7/common/src/CMakeLists.txt +++ b/boards/arm/stm32f7/common/src/CMakeLists.txt @@ -24,4 +24,8 @@ if(CONFIG_SENSORS_BH1750FVI) list(APPEND SRCS stm32_bh1750.c) endif() +if(CONFIG_SENSORS_BMI270_I2C) + list(APPEND SRCS stm32_bmi270.c) +endif() + target_sources(board PRIVATE ${SRCS}) diff --git a/boards/arm/stm32f7/common/src/Make.defs b/boards/arm/stm32f7/common/src/Make.defs index e041bb96256..810fd6e8332 100644 --- a/boards/arm/stm32f7/common/src/Make.defs +++ b/boards/arm/stm32f7/common/src/Make.defs @@ -24,6 +24,10 @@ ifeq ($(CONFIG_SENSORS_BH1750FVI),y) CSRCS += stm32_bh1750.c endif +ifeq ($(CONFIG_SENSORS_BMI270_I2C),y) + CSRCS += stm32_bmi270.c +endif + DEPPATH += --dep-path src VPATH += :src CFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)src diff --git a/boards/arm/stm32f7/common/src/stm32_bmi270.c b/boards/arm/stm32f7/common/src/stm32_bmi270.c new file mode 100644 index 00000000000..011cc1c6983 --- /dev/null +++ b/boards/arm/stm32f7/common/src/stm32_bmi270.c @@ -0,0 +1,89 @@ +/**************************************************************************** + * boards/arm/stm32f7/common/src/stm32_bmi270.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include + +#include +#include +#include + +#include "stm32_i2c.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +#define BMI270_I2C_ADDR 0x68 + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: board_bmi270_initialize + * + * Description: + * Initialize and register the BMI270 IMU device. + * + * Input Parameters: + * devno - The device number, used to build the device path as /dev/imuN + * busno - The I2C bus number + * + * Returned Value: + * Zero (OK) on success; a negated errno value on failure. + * + ****************************************************************************/ + +int board_bmi270_initialize(int devno, int busno) +{ + struct i2c_master_s *i2c; + char devpath[16]; + int ret; + + sninfo("Initializing BMI270!\n"); + + /* Initialize I2C */ + + i2c = stm32_i2cbus_initialize(busno); + if (!i2c) + { + return -ENODEV; + } + + /* Then register the ambient light sensor */ + + snprintf(devpath, sizeof(devpath), "/dev/imu%d", devno); + ret = bmi270_register(devpath, i2c, BMI270_I2C_ADDR); + if (ret < 0) + { + snerr("ERROR: Error registering BMI270\n"); + } + + return ret; +} +