Android驱动笔记(9)——MTK平台Sensor Bring Up

 sensor的img位于scp.img

9.1、在成熟的平台Bring Up

 在已知的平台上驱动并验证一个器件是很常见的工作。因为管脚等基本不需要重新配置。所以只需要按照一般步骤驱动即可。驱动代码位置:

vendor/mediatek/proprietary/tinysys/freertos/source/middleware/contexthub/MEMS_Driver/accGyro/

 生成.o文件位置:

out/target/product/****/obj/TINYSYS_OBJ/tiny-scp_inermediates/freertos/source/CM4_A/middleware/contexthub/MEMS_Driver/accGyro

 首先将驱动代码的.c文件放入驱动代码位置。之后修改下面说明的几个位置:

9.1.1、添加CFG_SENSOR_SUPPORT

 到

vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/****/****/projectConfig.mk

 添加

CFG_SC7A20_SUPPORT = yes

9.1.2、添加器件总线和其他信息

 到

vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/****/****/cust/accGyro/cust_accGyro.c

 添加

#ifdef CFG_SC7A20_SUPPORT
{
    .name = "sc7a20",
    .i2c_num = 0;
    .i2c_addr = {0x18, 0},
    .direction = 3,
    .eint_num = 12,
}

 如果Sensor使用的是I2C,不管硬件上对应I2C总线几,此处i2c_num要写0,因为在这个平台下SensorHub侧只有一个I2C。如果是SPI总线,写成下面这个样子:

    .i2c_num = 1;
    .i2c_addr = {0, 0},

 至少包含name、i2c总线、i2c地址就可以被驱动正常读取。

9.1.3、overlay

 在

vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/****/****/inc/overlay_sensor.h

 添加

#define OVERLAY0  \
    OVERLAY_ONE_OBJECT(sc7a20, sc7a20)

 在

vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/****/****/cust/overlay/overlay.c

 添加

ACC_GYRO_OVERLAY_REMAP(sc7a20);

9.1.4、驱动编译

vendor/mediatek/proprietary/tinysys/freertos/source/project/CM4_A/****/****/platform/feature_config/chre.mk

添加

ifeq($(CFG_SC7A20_SUPPORT),yes)
    C_FILES += $(SENDRV_DIR)/accgyro/sc7a20.c
endif

9.2、Sensor驱动调试

9.2.1、加速度方向调试

 对于加速度和磁传感器,方向是一个很重要的参数:这是一个0~7的整数数据,由于这两种Sensor都有x y z三个轴,每个轴都有正负两种情况,2^3=8,所以±x ±y ±z共有8种组合。最直接的方法是把0~7这8个数值都试一遍,看哪个结果正确就用哪个数值。

9.2.2、eint_num

 中断号,这里某些Sensor会提供一个中断脚,来通知主机数据准备完毕。此处中断号直接填写这个Sensor所使用的中断管脚号即可。

9.2.3、地磁三方库的所在位置

# add for Msensor
PRODUCT_COPY_FILES += device/mediatek/****/ThirdParty/mmc5603nj_lib/32bit/libmemsic.so:$(TARGET_COPY_OUT_VENDOR)/lib/libmemsic.so
# end for Msensor

猜你喜欢

转载自www.cnblogs.com/hansenn/p/12736728.html