高通平台IMU的Bringup(TODO)

1 IMU传感器

IMU的全称是Inertial Measurement Unit,惯性传感器单元。其实包含了大概三种传感器,Accelerometer加速度传感器,Gyroscope陀螺仪,Magnetometer磁力传感器。

下图就是一个典型的IMU。

所有IO口功能如下:

引脚名称 功能说明 典型连接方式
UCC 电源输入 接 3.3V(不支持 5V 直连)
GND 公共地 接主控地,必须共地
SCL I2C 时钟线 接主控 I2C_SCL
SDA I2C 数据线 接主控 I2C_SDA
ADO I2C 地址选择 拉高 / 拉低可切换 I2C 从地址
CS SPI 片选信号 I2C 模式下接高电平;SPI 模式下接主控 SPI_CS
INT 中断输出 可接主控 GPIO,用于数据就绪 / 姿态更新通知
RST 复位信号 拉低复位芯片,一般接主控 GPIO 或上拉至高
BOOT 引导模式引脚 正常工作时接高 / 悬空,固件升级时进入特殊模式
PS1 通信模式选择位 1 与 PS0 配合,决定通信接口类型
PS0 通信模式选择位 0 与 PS1 配合,决定通信接口类型

可以看到,本质就是一个I2C设备。

2 高通平台的IMU

在高通平台上,不是直接接这个I2C设备,而是使用的BP侧芯片去接的,没有直接AP。主要是考虑到功耗,AP要休眠,BP则可以长时间工作并运行一些基础算法。

查了一下,大概的流程如下:

高通平台(如SDM845/7150等)传感器驱动Bringup主要在ADSP/SLPI(BP侧)完成,核心流程包括: 添加驱动代码到SSC目录、配置编译规则、定义.proto通信协议、修改注册表以加载驱动 。AP侧负责配置设备树(DTS)映射和HAL层映射,最终实现数据流通。 [1](https://blog.csdn.net/weixin_30872499/article/details/159373916 "1"), [2](https://blog.csdn.net/weixin_29190651/article/details/158895973 "2"), [3](https://blog.csdn.net/weixin_28256233/article/details/158667553 "3")

一、 BP侧(ADSP/SLPI)传感器驱动挂载

BP侧负责底层的驱动逻辑、I2C/SPI通信和数据采样。

  1. 添加驱动文件
    将传感器驱动文件 (.c , .h ) 放入高通专用的SSC驱动目录中:
    vendor/qcom/non-hlos/ADSP.VT.x.x/adsp_proc/ssc_drivers/<sensor_name>/
  2. 配置编译规则 (build/ )
    在驱动目录下创建或修改 .scons 文件,将驱动源文件添加到编译系统,并确保生成相应的 .o 文件。
  3. 定义协议(.proto)
    adsp_proc/ssc/framework/pb 等目录下添加或更新 .proto 文件,定义Sensor的属性、数据格式和事件类型。
  4. 修改注册表(Registry)
    ssc_drivers/<sensor_name>/build/ 下的配置中,添加注册信息(如采样率、I2C地址、GPIO引脚等),使ADSP启动时能识别和加载该驱动。
  5. 编译与更新
    编译ADSP映像并烧录 adsp.mbn (或 sensor.img )。 [1](https://blog.csdn.net/csdn_liqian/article/details/128058199 "1"), [2](https://blog.csdn.net/year5/article/details/150885635 "2"), [3](https://blog.csdn.net/weixin_29190651/article/details/158895973 "3")

二、 AP侧配置与HAL层映射

AP侧(Android)负责处理HAL接口、设备树配置以及与ADSP的QMI通信。

  1. DTS设备树配置
    在AP端的DTS文件中,配置对应的I2C/SPI总线节点和中断引脚,确保硬件资源与ADSP对应。
  2. 添加.proto协议文件
    将ADSP侧定义的 .proto 文件同步一份到AP侧对应目录下,保证通信数据格式一致。
  3. HAL层适配 (.cpp )
    在传感器HAL目录中(如 hardware/qcom/sensors/ ),添加对应的驱动解析 .cpp 文件,实现BP侧数据到Android传感器事件的转换。
  4. 添加传感器注册配置
    在传感器配置文件(如 sns_registry )中注册新的传感器ID和属性。 [1](https://blog.csdn.net/weixin_28256233/article/details/158667553 "1"), [2](https://blog.csdn.net/csdn_liqian/article/details/128058199 "2")

三、 调试与Bringup验证

  1. 查看日志 :使用 adb logcat diag 工具(QCAT/QXDM)查看SSC注册和数据流信息。
  2. 检查驱动加载 :确认 ssc_drivers 是否加载成功。
  3. 数据校验 :验证传感器是否能正常读取原始数据。 [1](https://blog.csdn.net/year5/article/details/150885635 "1"), [2](https://blog.csdn.net/weixin_28256233/article/details/158667553 "2")

通过以上步骤,实现了从BP侧底层驱动管理到AP侧上层数据应用的闭环。

大概是这样吧,没有验证过哈,只是初步了解。。。

相关推荐
米小葱25 分钟前
【学习笔记】cmake
笔记·学习
小+不通文墨2 小时前
把树莓派外接的DHT11接收的温湿度发送到emqx上
经验分享·笔记·嵌入式硬件·学习·树莓派
会编程的土豆3 小时前
Go 方法接收者超清晰笔记(类型名 vs 变量名)
开发语言·笔记·golang
fanged4 小时前
C++的汇编实现(TODO)
笔记
不羁的木木4 小时前
Form Kit(卡片开发服务)学习笔记01-核心概念与架构设计
笔记·学习·harmonyos
不羁的木木4 小时前
ArkWeb实战学习笔记01-核心概念与架构设计
笔记·学习·harmonyos
大明者省5 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记
数据皮皮侠AI5 小时前
上市公司耐心资本数据(2010-2025)
大数据·人工智能·笔记·能源·1024程序员节
元气少女小圆丶5 小时前
SenseGlove Nova 2+Unity开发笔记2
笔记·unity·游戏引擎