2. 瑞芯微平台Sensor子系统架构

本章深入剖析瑞芯微(Rockchip)平台Sensor子系统的软硬件架构。理解从物理接口到上层应用的完整数据通路,是进行寄存器配置与初始化调试的基础。我们将从硬件接口、内核驱动框架、HAL层以及Sensor Hub协同处理四个维度展开。

2.1 RK平台Sensor硬件接口

瑞芯微平台为Sensor提供了两种主流的数字通信接口:I2C 和 SPI。选择哪种接口取决于Sensor的带宽需求、功耗约束以及引脚资源。

特性 I2C (Inter-Integrated Circuit) SPI (Serial Peripheral Interface)
信号线 SDA (数据线), SCL (时钟线) MOSI, MISO, SCLK, CS (片选)
通信方式 半双工,主从架构 全双工,主从架构
速率 标准模式 100kbps,快速模式 400kbps,高速模式可达 3.4Mbps 通常可达数十Mbps,甚至更高
总线占用 多设备共享总线,通过地址区分 每个设备独占片选线,总线独占性高
典型应用 加速度计、陀螺仪、磁力计、温湿度传感器 高帧率摄像头、高精度ADC、触摸屏控制器
RK平台特点 集成多个I2C控制器,支持DMA传输,时钟源可配置 支持多种SPI模式 (0/1/2/3),可配置为单线/双线/四线模式
调试要点: 在RK平台,I2C通信失败是Sensor初始化阶段最常见的问题。务必使用示波器或逻辑分析仪检查SCL/SDA的时序、上拉电阻(通常为4.7kΩ)以及设备地址是否正确。对于SPI,需重点确认时钟极性(CPOL)和相位(CPHA)与Sensor数据手册严格匹配。
RK Sensor 硬件接口连接拓扑 瑞芯微 SoC I2C/SPI 控制器 SCL SDA SCLK MOSI MISO I2C Sensor (如: MPU6050) SPI Sensor (如: ICM-20948) CS (片选) 硬件设计要点 • I2C 需外部上拉电阻 • SPI 速率可达 50MHz • 注意电平匹配 (1.8V/3.3V)

2.2 软件框架:Kernel Driver 层

在Linux内核中,Sensor驱动遵循标准的字符设备或输入子系统框架。RK平台在此基础上进行了封装,提供了统一的驱动模型。

2.2.1 驱动核心结构

  • platform_driver:与设备树匹配,完成硬件资源(中断、寄存器地址、时钟)的获取。
  • regmap:RK平台推荐使用regmap API来抽象I2C/SPI的寄存器读写操作,简化驱动代码。
  • IIO (Industrial I/O) 子系统:对于加速度计、陀螺仪等,通常注册为IIO设备,提供统一的用户空间接口。
  • Input 子系统:对于按键、接近光等事件型Sensor,注册为Input设备。
关键数据结构: 在RK Sensor驱动中,struct sensor_device 或 struct iio_dev 是核心。驱动初始化时,需要填充 struct regmap_config 来定义寄存器读写属性(如寄存器位宽、地址位宽、是否支持缓存等)。
RK Sensor Kernel Driver 软件架构 用户空间 (Userspace) 内核空间 (Kernel Space) IIO / Input 子系统 Regmap API Platform Driver Sensor 设备驱动核心 (sensor_probe / sensor_ops) 初始化序列 | 寄存器读写 | 中断处理 | 数据上报 硬件抽象层 (I2C/SPI 控制器驱动) 硬件 (Sensor 芯片)

2.3 软件框架:HAL 层与 Sensor Hub

HAL (Hardware Abstraction Layer) 是连接Linux内核驱动与Android Framework的桥梁。RK平台通过Sensor Hub实现了低功耗的Sensor数据融合与处理。

2.3.1 HAL 层职责

  • 封装内核接口:通过打开 /dev/iio:deviceX 或 /dev/input/eventX 设备节点,与内核驱动交互。
  • 数据格式转换:将内核上报的原始数据(如ADC值)转换为物理单位(如m/s², rad/s)。
  • 多Sensor协同:实现Sensor融合算法(如6轴/9轴融合),提供更稳定的姿态数据。

2.3.2 Sensor Hub 架构

RK平台的Sensor Hub通常运行在一个独立的MCU(如Cortex-M0)上,或者作为SoC内部的一个独立硬件模块。其核心优势在于:

  • 低功耗:主CPU可以进入深度睡眠,由Sensor Hub轮询Sensor数据,仅在数据变化或达到阈值时唤醒主CPU。
  • 数据缓存与批处理:Sensor Hub可以缓存多个采样点,然后一次性上报,减少中断次数。
  • 硬件加速:部分Sensor Hub内置硬件滤波器(如卡尔曼滤波器),减轻CPU负载。
调试陷阱: 在RK平台上,如果Sensor Hub固件与HAL库版本不匹配,可能导致数据上报异常或Sensor无法识别。务必检查 /vendor/firmware/ 下的Sensor Hub固件文件(如 sensor_hub.fw)是否与当前HAL版本一致。
HAL 与 Sensor Hub 数据流 Android 应用 / Framework Sensor HAL (libsensorhal.so) 数据融合 | 格式转换 | 策略管理 直接模式 Hub 模式 Kernel 驱动 (IIO/Input) I2C/SPI 总线 Sensor Hub (MCU/硬件) I2C/SPI 总线 物理 Sensor 芯片

2.4 数据通路总结

一个完整的Sensor数据从物理世界到应用程序的路径如下:

  1. 物理量采集:Sensor芯片将物理量(加速度、角速度等)转换为电信号。
  2. 数字接口传输:通过I2C/SPI总线,将原始寄存器值传输到SoC。
  3. 内核驱动处理:Kernel Driver读取寄存器,进行必要的校准和滤波,通过IIO/Input子系统上报。
  4. HAL层封装:HAL库接收内核数据,进行融合计算,转换为Android Sensor标准格式。
  5. 应用消费:Framework将数据分发给注册了Sensor监听器的应用程序。
初始化调试核心: 在调试初期,建议从步骤3(Kernel Driver)入手。使用 i2cget 或 i2cdump 工具直接读取Sensor的WHO_AM_I寄存器,验证硬件通信是否正常。这是后续所有调试工作的前提。