处于成本或多样性考虑,经常需要新增传感器进行兼容,本次以陀螺仪icm42607-p型号进行分析

1.如果平台或项目首次使用该传感器,需要添加传感器驱动文件(FAE提供),如果已经存在,直接进行下一步:

文件存放路径:

vendor\mediatek\proprietary\tinysys\freertos\source\middleware\contexthub\MEMS_Driver\accGyro\icm4n607.c

2.新增陀螺仪i2c接口、方向、地址及中断号进行配置;

mt6771:项目平台                 lv973:项目名

文件路径:

vendor\mediatek\proprietary\tinysys\freertos\source\project\CM4_A\mt6771\lv973\cust\accGyro\cust_accGyro.c

#include "cust_accGyro.h"

struct accGyro_hw cust_accGyro_hw[] __attribute__((section(".cust_accGyro"))) = {

#ifdef CFG_ICM2060X_SUPPORT
    {
        .name = "icm2060x",
        .i2c_num = 1,
        .direction = 2,
        .i2c_addr = {0x68, 0},
        .eint_num = 4,
    },
#endif
#ifdef CFG_FIS210X_SUPPORT
    {
        .name = "fis210x",
        .i2c_num = 1,
        .direction = 2,
        .i2c_addr = {0x6a, 0x6b},
        .eint_num = 4,
    },
#endif
#ifdef CFG_ICM4X607_SUPPORT
    {
        .name = "icm4n607",
        .i2c_num = 1,
        .direction = 2,
        .i2c_addr = {0x68, 0},
        .eint_num = 4,
    },
#endif
};

查看项目配置文件可知,兼容前使用ICM2006X传感器,其中i2c_num,direction,eint_num可以完全照搬icm2006x的配置,宏定义和name进行修改,i2c_addr可以查看其他平台的配置地址或查看芯片手册获取;

3.添加overlay配置

文件路径:

vendor\mediatek\proprietary\tinysys\freertos\source\project\CM4_A\mt6771\lv973\cust\overlay\overlay.c

void accGyroOverlayRemap(void)
{
ACC_GYRO_OVERLAY_REMAP_START
    ACC_GYRO_OVERLAY_REMAP(icm2060x);
    ACC_GYRO_OVERLAY_REMAP(icm4n607);
ACC_GYRO_OVERLAY_REMAP_END

    return;
}

文件路径:

vendor\mediatek\proprietary\tinysys\freertos\source\project\CM4_A\mt6771\lv973\inc\overlay_sensor.h

/*****************************************************************************
* Overlay0: ACCGYRO
*****************************************************************************/
#define OVERLAY_SECTION_ACCGYRO                    \
	OVERLAY_ONE_OBJECT(icm2060x, icm2060x)         \
    OVERLAY_ONE_OBJECT(icm4n607, icm4n607)
#ifdef OVERLAY_SECTION_ACCGYRO
#define OVERLAY0 OVERLAY_SECTION_ACCGYRO
#else
#define OVERLAY0
#endif  // OVERLAY_SECTION_ACCGYRO

4.在项目的配置文件中进行配置;

文件路径:

vendor\mediatek\proprietary\tinysys\freertos\source\project\CM4_A\mt6771\lv973\ProjectConfig.mk

CFG_ACCGYRO_SUPPORT = yes
CFG_LSM6DS3_SUPPORT = no
CFG_LSM6DSM_SUPPORT = no
CFG_BMI160_SUPPORT = no
CFG_LIS3DH_SUPPORT = no
CFG_LIS2HH12_SUPPORT = no
CFG_FIS210X_SUPPORT = no
CFG_ICM2060X_SUPPORT = yes
CFG_ICM4X607_SUPPORT = yes

5.如果平台首次使用该传感器,需要将文件添加到编译链接中;

文件路径:

vendor\mediatek\proprietary\tinysys\freertos\source\project\CM4_A\mt6771\platform\feature_config\chre.mk

ifeq ($(CFG_FIS210X_SUPPORT),yes)
C_FILES  += $(SENDRV_DIR)/accGyro/fis210x.c
endif
ifeq ($(CFG_ICM2060X_SUPPORT),yes)
C_FILES  += $(SENDRV_DIR)/accGyro/icm2060x.c
endif
ifeq ($(CFG_ICM4X607_SUPPORT),yes)
C_FILES  += $(SENDRV_DIR)/accGyro/icm4n607.c
endif
ifeq ($(CFG_MIR3DA_SUPPORT),yes)
C_FILES  += $(SENDRV_DIR)/accGyro/mir3da.c
CFLAGS += -DCFG_ACC_NO_FIFO
endif
endif

如果感觉文章有用请给博主点个赞

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐