当前位置: 首页 > news >正文

mt6897 scp a+g sh5201 porting记录

1.修改代码位置

vendor/mediatek/proprietary/tinysys/scp

vendor/mediatek/proprietary/hardware/sensor/2.0/hal/SensorListV2.cpp

device/mediateksample/aiot8883p2_64_bsp/ProjectConfig.mk

2.确认sensor和AP间的硬件连接

供电

通常供电是由系统来控制,软件不需要做处理

通信方式

通信方式基本是I2C或SPI,确认I2C或SPI是使用的第几组SCP的I2C或SPI。

从原理图中找到I2C或SPI的pin号,在文件MT6789_GPIO_Application_Spec_V0.5(CONFIDENTIAL B).xlsx中查找,

例如下图:

使用的SCP_SPI0。

注:只有带SCP前缀的I2C或SPI才可以给挂载在SCP侧的sensor使用。

中断

从原理图中找到中断的pin号,在文件MT6789_GPIO_Application_Spec_V0.5(CONFIDENTIAL B).xlsx中查找,

如下是SCP侧sensor可用的中断GPIO范围。

红色框对应的就是中断号,比如加速度的中断连接的是GPIO2 (B12),则中断号为EINT29。

3.代码改动

驱动

驱动添加到vendor/mediatek/proprietary/tinysys/scp/middleware/sensorhub/drivers/physical/对应的目录下

accgyro ---------------- 加速度陀螺仪

alsps ---------------- 光距感

magnetometer --------- 地磁

barometer --------- 气压计

DTS配置

vendor/mediatek/proprietary/tinysys/scp/project/RV55_A/mt6897/aiot8883p2_64_bsp/sensor

diff --git a/project/RV55_A/mt6897/aiot8883p2_64_bsp/sensor/dts.c b/project/RV55_A/mt6897/aiot8883p2_64_bsp/sensor/dts.c
index 9df6ffe4..5592eea9 100644
--- a/project/RV55_A/mt6897/aiot8883p2_64_bsp/sensor/dts.c
+++ b/project/RV55_A/mt6897/aiot8883p2_64_bsp/sensor/dts.c
@@ -40,6 +40,13 @@#include <sensorhub/util.h>const struct key_pair dts[] = {
+#ifdef CFG_SH5201_SUPPORT
+    {    .key = "name",                 .string = "sh5201"},
+    {    .key = "bus_id",               .u8 = 1},
+    {    .key = "direction",            .u8 = 0},
+    {    .key = "eint_num",             .u8 = 29},
+#endif
+#ifdef CFG_LSM6DSO_SUPPORT{    .key = "name",                 .string = "lsm6dso"},{    .key = "bus_id",               .u8 = 1},

字段说明

name:最好和驱动文件名相同,和驱动内部dev->device.name变量相同,实际可能没有去解析改字段

bus_id:通信方式的组号,比如是i2c0(SCP_SCL0,SCP_SDA0)或者

spi0(SCP_SPI0_CK,SCP_SPI0_CS,SCP_SPI0_MO,SCP_SPI0_MI),bus_id都填0,和i2c还是spi无关,只和组号有关

slave_addr:i2c的7位地址,spi不需要此项

eint_num:中断号

direction:传感器方向,当加速度方向不对时,在这里调整

polling_mode_als/polling_mode_ps:是否开启轮询模式,开启后不使用中断,使用定时器上报数据。

每个类型的sensor都有在dts文件中,复制一份修改即可。

编译配置

vendor/mediatek/proprietary/tinysys/scp/project/RV55_A/mt6897/aiot8883p2_64_bsp\project.mk

在mk文件中添加对应sensor的宏定义(这个宏是自己定义),在sensor类型宏的后面要在,没用到的sensor也可去掉

diff --git a/project/RV55_A/mt6897/aiot8883p2_64_bsp/project.mk b/project/RV55_A/mt6897/aiot8883p2_64_bsp/project.mk
index 49332787..2942e721 100644
--- a/project/RV55_A/mt6897/aiot8883p2_64_bsp/project.mk
+++ b/project/RV55_A/mt6897/aiot8883p2_64_bsp/project.mk
@@ -32,9 +32,10 @@ CFG_SENSORS_INDRAM = yesCFG_SENSORHUB_SUPPORT = yesCFG_ACCGYRO_SUPPORT = yes
-CFG_LSM6DSO_SUPPORT = yes
-CFG_LSM6DSO_I3C_SUPPORT = yes
-CFG_LSM6DSOQ_I3C_SUPPORT = yes
+CFG_LSM6DSO_SUPPORT = no
+CFG_LSM6DSO_I3C_SUPPORT = no
+CFG_LSM6DSOQ_I3C_SUPPORT = no
+CFG_SH5201_SUPPORT = yesCFG_ALSPS_SUPPORT = yesCFG_VC36658_SUPPORT = yesCFG_STK37A60_SUPPORT = no

vendor/mediatek/proprietary/tinysys/scp/project/RV55_A/mt6897/platform/features\sensorhub.mk

在mk文件中添加驱动编译的路径,要在sensor类型宏的包括范围内添加,如

diff --git a/project/RV55_A/mt6897/platform/features/sensorhub.mk b/project/RV55_A/mt6897/platform/features/sensorhub.mk
index 32979dee..17e726be 100644
--- a/project/RV55_A/mt6897/platform/features/sensorhub.mk
+++ b/project/RV55_A/mt6897/platform/features/sensorhub.mk
@@ -85,6 +85,10 @@ ifeq ($(CFG_LSM6DSM_SUPPORT),yes)C_FILES  += $(PHYSICAL_DRV_DIR)/accgyro/lsm6dsm.cendif+ifeq ($(CFG_SH5201_SUPPORT),yes)
+C_FILES  += $(PHYSICAL_DRV_DIR)/accgyro/sh5201.c
+endif
+ifeq ($(CFG_LSM6DSO_SUPPORT),yes)ifneq ($(wildcard $(PRIVATE_DRV_DIR)),)C_FILES  += $(PRIVATE_DRV_DIR)/accgyro/lsm6dsoxx.c

位置:vendor/mediatek/proprietary/tinysys/scp/project/RV55_A/mt6897/aiot8883p2_64_bsp/inc\overlay_sensor.h

在文件中对应sensor类型下添加要编译的sensor名称,如

diff --git a/project/RV55_A/mt6897/aiot8883p2_64_bsp/inc/overlay_sensor.h b/project/RV55_A/mt6897/aiot8883p2_64_bsp/inc/overlay_sensor.h
index 0ef714e4..7108108f 100644
--- a/project/RV55_A/mt6897/aiot8883p2_64_bsp/inc/overlay_sensor.h
+++ b/project/RV55_A/mt6897/aiot8883p2_64_bsp/inc/overlay_sensor.h
@@ -78,8 +78,7 @@* Overlay0: ACCGYRO*****************************************************************************/#define OVERLAY_SECTION_ACCGYRO                     \
-    OVERLAY_ONE_OBJECT(lsm6dsoxx, lsm6dsoxx)        \
-    OVERLAY_ONE_OBJECT(lsm6dsoxx_i3c, lsm6dsoxx_i3c)
+    OVERLAY_ONE_OBJECT(sh5201, sh5201)#ifdef OVERLAY_SECTION_ACCGYRO#define OVERLAY0 OVERLAY_SECTION_ACCGYRO

HAl层声明添加

一定要在vendor/mediatek/proprietary/hardware/sensor/2.0/hal/SensorListV2.cpp文件中添加sensor声明,不然应用会找不到传感器。

diff --git a/2.0/hal/SensorListV2.cpp b/2.0/hal/SensorListV2.cpp
index 497e351..88f3aa2 100644
--- a/2.0/hal/SensorListV2.cpp
+++ b/2.0/hal/SensorListV2.cpp
@@ -60,6 +60,40 @@ SensorListV2 *SensorListV2::getInstance() {void SensorListV2::initSensorList(void) {struct sensor_t sensor;+    memset(&sensor, 0, sizeof(struct sensor_t));
+    sensor.name = "sh5201_acc";
+    sensor.vendor = "senodia";
+    sensor.version = 1;
+    sensor.handle = SENSOR_TYPE_ACCELEROMETER;
+    sensor.type = SENSOR_TYPE_ACCELEROMETER;
+    sensor.maxRange = 78.4532f;
+    sensor.resolution = 0.0012;
+    sensor.power = 0;
+    sensor.minDelay = 2500;
+    sensor.fifoReservedEventCount = 3000;
+    sensor.fifoMaxEventCount = 4500;
+    sensor.stringType = SENSOR_STRING_TYPE_ACCELEROMETER;
+    sensor.maxDelay = 200000;
+    sensor.flags = SENSOR_FLAG_CONTINUOUS_MODE;
+    mSensorList.push_back(sensor);
+
+    memset(&sensor, 0, sizeof(struct sensor_t));
+    sensor.name = "sh5201_gyro";
+    sensor.vendor = "senodia";
+    sensor.version = 1;
+    sensor.handle = SENSOR_TYPE_GYROSCOPE;
+    sensor.type = SENSOR_TYPE_GYROSCOPE;
+    sensor.maxRange = 34.9066f;
+    sensor.resolution = 0.0011f;
+    sensor.power = 0;
+    sensor.minDelay = 2500;
+    sensor.fifoReservedEventCount = 3000;
+    sensor.fifoMaxEventCount = 4500;
+    sensor.stringType = SENSOR_STRING_TYPE_GYROSCOPE;
+    sensor.maxDelay = 200000;
+    sensor.flags = SENSOR_FLAG_CONTINUOUS_MODE;
+    mSensorList.push_back(sensor);
+memset(&sensor, 0, sizeof(struct sensor_t));sensor.name = "lsm6dsm_acc";sensor.vendor = "st";

如上是距感的声明,复制一份相同类型sensor的代码修改sensor.name和sensor.vendor字段即可,需要注意的是:sensor.name和sensor.vendor字段要和驱动中定义的dev->device.support_list结构体的成员name和vendor对应。

sensor宏开关

位置:device/mediateksample/aiot8883p2_64_bsp/ProjectConfig.mk

系统要使用哪一类sensor就设置对应的宏为yes

diff --git a/ProjectConfig.mk b/ProjectConfig.mk
index 29e40bd..cf0831c 100644
--- a/ProjectConfig.mk
+++ b/ProjectConfig.mk
@@ -4,16 +4,16 @@ BUILD_LK = yesBUILD_PRELOADER = yesCUSTOM_CONFIG_MAX_DRAM_SIZE = 0x800000000
-CUSTOM_HIFI_SENSORS = yes
+CUSTOM_HIFI_SENSORS = noCUSTOM_KERNEL_ACCELEROMETER = yesCUSTOM_KERNEL_ALSPS = yes
-CUSTOM_KERNEL_BAROMETER = yes
+CUSTOM_KERNEL_BAROMETER = noCUSTOM_KERNEL_GYROSCOPE = yesCUSTOM_KERNEL_HEAD_TRACKER = yes
-CUSTOM_KERNEL_STEP_COUNTER = yes
-CUSTOM_KERNEL_STEP_DETECTOR = yes
+CUSTOM_KERNEL_STEP_COUNTER = no
+CUSTOM_KERNEL_STEP_DETECTOR = noCUSTOM_MODEM = mt6897_sp_nlwcg_mt6197_vmoly0472_prodCUSTOM_SUPPORT_DYNAMIC_SENSOR = yesKEYMASTER_VERSION = 7.0

4.确认修改是否生效

adb shell  dumpsys sensorservice

http://www.dtcms.com/a/320739.html

相关文章:

  • 数据结构:哈希表、排序和查找
  • 光子精密3D工业相机的应用与优势解析
  • CS231n2017 Assignment3 PyTorch部分
  • 代理模式在C++中的实现及面向对象设计原则的满足
  • 利用哥斯拉(Godzilla)进行文件上传漏洞渗透实战分析
  • ​「解决方案」Linux 无法在 NTFS 硬盘上创建文件/文件夹的问题
  • C++多态与虚函数的原理解析
  • MySQL的触发器:
  • 虹科技术分享 | LIN总线译码功能与LIN控制交流发电机(二)
  • 灌区信息化智能管理系统解决方案
  • 计算机视觉CS231n学习(5)
  • AI开发平台行业全景分析与战略方向建议
  • C++归并排序
  • 使用 Python GUI 工具创建安全的密码短语
  • tmi8150b在VM=3.3v电压下,如何提高转速,记录
  • 高性能 Vue 应用运行时策略
  • 仓颉编程语言的match表达式
  • 《算法导论》第 12 章 - 二叉搜索树
  • 【量子计算】量子计算驱动AI跃迁:2025年算法革命的曙光
  • conda pip uv与pixi
  • SpringCloud(4)-多机部署,负载均衡-LoadBalance
  • ASP.NET三层架构成绩管理系统源码
  • HBase的异步WAL性能优化:RingBuffer的奥秘
  • 深度虚值期权合约有什么特点?
  • InfoNCE 损失
  • 企微消息机器人推送配置-windows+python
  • 【ros-humble】2.自定义通讯接口发布者python,qt使用(话题)
  • 关于csdn导入和导出
  • USB2.0协议学习-基础知识
  • day070-Jenkins自动化与部署java、前端代码