1. Sensor 基础概念

1.1 Sensor 在嵌入式系统中的作用

在嵌入式系统中,Sensor(传感器)是连接物理世界与数字世界的核心接口。它负责将环境中的物理量(如加速度、光照强度、磁场强度)转换为电信号,再通过模数转换(ADC)或数字接口(I2C/SPI)送入处理器,为上层应用提供实时、精确的感知数据。

在瑞芯微 RK 系列平台上,Sensor 的作用可归纳为以下四个关键维度:

维度 说明 典型场景
感知输入 采集环境或设备状态,形成原始数据流 加速度计检测设备倾斜、光感检测环境亮度
系统唤醒 低功耗模式下通过 Sensor 中断唤醒主控 计步器在运动时唤醒 RK 芯片处理数据
融合计算 多 Sensor 数据融合,输出更高层语义 IMU 融合输出姿态四元数
驱动控制 Sensor 数据作为闭环控制的反馈量 光感调节屏幕背光 PWM 占空比
关键认知: Sensor 驱动开发的核心工作,就是完成从“物理量 → 寄存器配置 → 数据读取 → 内核上报”的完整链路。寄存器配置的准确性直接决定数据质量。

1.2 常见 Sensor 类型

嵌入式系统中 Sensor 种类繁多,本课程聚焦于 RK 平台最常对接的三类 Sensor:IMU(惯性测量单元)、光感(环境光传感器)、磁力计(地磁传感器)。以下从物理原理、输出数据、典型寄存器三个维度进行对比。

类型 物理量 输出数据 典型寄存器 接口协议
IMU 加速度、角速度 ACC_X/Y/Z, GYRO_X/Y/Z CTRL_REG, OUT_X_L, OUT_X_H I2C / SPI
光感 可见光强度 ALS_CH0, ALS_CH1 (lux) ALS_CONF, ALS_DATA I2C
磁力计 地磁场强度 MAG_X/Y/Z (uT) CNTL_REG, DATAX_L, DATAX_H I2C

1.2.1 IMU(惯性测量单元)

IMU 通常集成加速度计(Accelerometer)和陀螺仪(Gyroscope),部分型号还包含温度传感器。加速度计测量设备在 X/Y/Z 三轴上的线性加速度(单位:g 或 m/s²),陀螺仪测量三轴角速度(单位:°/s)。在 RK 平台上,IMU 常用于运动检测、屏幕旋转、计步、AR/VR 等场景。

1.2.2 光感(环境光传感器)

环境光传感器(Ambient Light Sensor, ALS)检测周围可见光强度,输出单位为 lux。RK 平台利用光感数据实现屏幕亮度自动调节、接近检测(配合红外 LED)等功能。光感芯片通常具有可编程的增益和积分时间寄存器,以适应不同光照环境。

1.2.3 磁力计(地磁传感器)

磁力计测量地球磁场在三个轴向上的分量,输出单位为微特斯拉(μT)。磁力计数据与加速度计、陀螺仪融合后可提供绝对航向角(电子罗盘)。在 RK 平台上,磁力计驱动需要特别注意硬磁/软磁校准数据的存储与加载。

开发提示: 在 RK 平台对接 Sensor 时,务必先确认 Sensor 的 I2C 地址是否与 RK 芯片的 I2C 控制器地址分配不冲突。部分 Sensor 支持多个 I2C 地址(通过 ADDR 引脚配置),这在多 Sensor 共总线场景下非常有用。

1.3 Sensor 数据流概述

Sensor 数据从物理世界到应用层的完整流动路径,是驱动开发者必须掌握的全局视图。以下数据流图展示了在 RK Linux 内核中,Sensor 数据从硬件到用户空间的标准路径。

RK Sensor 数据流架构图 物理世界 加速度 / 光照 / 磁场 Sensor 硬件 寄存器 / FIFO / 中断 I2C / SPI 总线 RK I2C/SPI 控制器 内核驱动层 iio_device / input_dev regmap / 中断处理 数据上报 / 缓存 IIO buffer / trigger 用户空间 HAL / SensorService sysfs / devfs 应用层算法 显示 / 控制 数据流关键节点说明 ① Sensor 硬件通过中断或 FIFO 通知 CPU 数据就绪 ② 内核驱动通过 regmap 读取寄存器,完成数据格式转换 ③ 用户空间通过 IIO 或 input 子系统获取最终数据

数据流中的关键环节包括:

  1. 物理量采集:Sensor 芯片内部敏感单元将物理量转换为电信号,经 ADC 量化后存入数据寄存器。
  2. 寄存器读取:RK 平台通过 I2C/SPI 总线,按照 Sensor 数据手册规定的时序,读取数据寄存器(如 OUT_X_L、OUT_X_H)。
  3. 内核驱动处理:驱动将原始寄存器值转换为标准单位(如 m/s²、lux、μT),并通过 IIO 框架或 input 子系统上报。
  4. 用户空间消费:HAL 层或应用层通过 sysfs、devfs 或 IIO 字符设备获取数据,用于算法融合或控制决策。
常见陷阱: 在 RK 平台上,Sensor 数据流中最容易出问题的环节是“寄存器读取时序”。例如,某些 Sensor 要求先写地址再读数据,而另一些支持自动递增地址连续读取。驱动中若未正确配置 regmap 的读写标志位,会导致数据错位或读取失败。

1.4 Sensor 寄存器配置基础

寄存器配置是 Sensor 初始化的核心。以下表格列出了 RK 平台 Sensor 驱动中最常操作的寄存器类型及其作用。

寄存器类别 典型寄存器名 作用 配置时机
芯片 ID WHO_AM_I / CHIP_ID 验证 Sensor 型号与通信是否正常 probe 阶段
控制寄存器 CTRL_REG1 / PWR_MGMT 使能 Sensor、选择工作模式、设置采样率 probe + resume
数据寄存器 OUT_X_L / OUT_X_H 存储最新采样数据(通常为 16 位补码) 每次数据读取
配置寄存器 INT_CFG / FILTER_CFG 配置中断触发条件、数字滤波器参数 probe 阶段
FIFO 寄存器 FIFO_CTRL / FIFO_STATUS 管理 FIFO 缓冲区,批量读取数据 probe 阶段(可选)
初始化流程口诀: 先读 ID 验通信,再写 CTRL 定模式,配置中断和滤波,最后读取数据流。每一步的寄存器值都必须严格对照数据手册,尤其是保留位(Reserved Bits)必须保持默认值,否则可能导致芯片异常。

1.5 本章小结

本章建立了 Sensor 基础概念的完整认知框架:

  • Sensor 在嵌入式系统中承担感知输入、系统唤醒、融合计算、驱动控制四大角色。
  • IMU、光感、磁力计是 RK 平台最常对接的三类 Sensor,各自输出不同的物理量,寄存器结构有共性也有差异。
  • Sensor 数据流从物理世界出发,经过硬件采集、总线传输、内核驱动处理,最终到达用户空间,每个环节都有明确的配置要点。
  • 寄存器配置是 Sensor 初始化的核心,芯片 ID、控制、数据、配置、FIFO 五类寄存器构成驱动开发的主要操作对象。