瑞芯微RK Sensor驱动开发与I2C通信集成 - 第1节

1.1 瑞芯微SoC产品线概览

瑞芯微(Rockchip)是国内领先的SoC设计公司,其产品线覆盖从入门级嵌入式控制到高性能边缘计算、AIoT及多媒体应用。在Sensor驱动开发中,理解SoC的选型与资源差异是第一步。

产品系列 典型型号 CPU架构 主要应用场景 Sensor接口特点
RK33xx系列 RK3308 Cortex-A35 智能语音、IoT网关 2路I2C、无MIPI CSI
RK35xx系列 RK3568 / RK3588 Cortex-A55 / A76+A55 AIoT、NVR、平板、边缘计算 多路I2C、MIPI CSI、ISP
RK16xx系列 RK1608 Cortex-A7 + DSP 双目摄像头、3D传感 专用Sensor Hub、I2C
RV11xx系列 RV1106 / RV1109 Cortex-A7 + NPU AI IPC、智能门锁 I2C、SPI、单路MIPI
开发提示: RK3588 拥有 9 个独立 I2C 控制器,而 RK3308 仅有 2 个。在 Sensor 选型阶段,务必核对目标 SoC 的 I2C 总线数量与中断引脚资源,避免后期硬件改板。

1.2 RK Linux BSP 架构总览

RK 的 Linux BSP(Board Support Package)基于标准 Linux 内核,并在此基础上增加了大量 Rockchip 自研的硬件抽象层与驱动框架。整体架构自上而下分为三层:

  • 应用层: HAL 库、多媒体框架(Rockchip MPP)、AI 推理框架(RKNN)。
  • 内核层: 标准 Linux 内核 + Rockchip 芯片级补丁,包含 Clock、Pinctrl、I2C、SPI、Sensor 子系统。
  • 硬件层: SoC 外设、Sensor 模组、PMIC、存储等。

Sensor 驱动主要工作在内核层,部分高性能 Sensor(如摄像头)会通过 V4L2 框架与上层 HAL 交互。

架构核心: RK BSP 并非完全 upstream first,许多驱动补丁以 .patch 形式维护在 SDK 的 kernel/patches/ 目录下。开发者在移植 Sensor 驱动时,应优先参考 SDK 中对应内核版本的 drivers/iio 或 drivers/media/i2c 目录。
RK Linux BSP 软件架构分层图 RK Linux BSP 软件架构分层图 应用层 (Userspace) HAL 库 / Rockchip MPP / RKNN / Sensor 应用 系统调用接口 (ioctl / read / write) 内核层 (Kernel Space) V4L2 / IIO 框架 Sensor 设备节点 I2C / SPI 总线驱动 Pinctrl / Clock / Regulator Rockchip 平台驱动 DMA / 中断 / 电源管理 设备树 (Device Tree) 描述硬件拓扑 驱动模型 (platform_driver / i2c_driver) 内核补丁 (patches/) 维护芯片级适配 硬件层 (Hardware) RK SoC (I2C / SPI / MIPI CSI) + Sensor 模组 + PMIC

1.3 Sensor 子系统在 BSP 中的位置

在 RK BSP 中,Sensor 子系统并非一个独立的内核目录,而是分散在多个标准 Linux 子系统中的功能集合。根据 Sensor 类型不同,其归属框架也不同:

Sensor 类型 内核框架 驱动路径示例 (RK SDK) 用户空间接口
摄像头 (Camera) V4L2 (Video for Linux 2) drivers/media/i2c/ /dev/video*
加速度计 / 陀螺仪 IIO (Industrial I/O) drivers/iio/imu/ /sys/bus/iio/devices/
温湿度 / 压力 IIO 或 HWMON drivers/iio/pressure/ /sys/class/hwmon/
触摸屏 Input 子系统 drivers/input/touchscreen/ /dev/input/event*
指纹 / 虹膜 Misc 或 专用框架 drivers/misc/ 自定义字符设备
常见误区: 初学者常误以为所有 Sensor 驱动都放在同一个目录下。实际上,RK BSP 严格遵循 Linux 内核的子系统划分。例如,一个 I2C 接口的摄像头 Sensor 驱动应放在 drivers/media/i2c/,而非 drivers/iio/。放错位置会导致编译错误或模块加载失败。

1.3.1 Sensor 驱动在设备树中的挂载

RK 平台通过设备树(Device Tree)描述 Sensor 与 SoC 的连接关系。一个典型的 I2C Sensor 设备树节点如下:

/* 设备树片段:RK3588 + 摄像头 Sensor OV5640 */
&i2c4 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&i2c4m1_xfer>;

    ov5640: camera@3c {
        compatible = "ovti,ov5640";
        reg = <0x3c>;
        clocks = <&cru CLK_MIPI_CAMARAOUT_M4>;
        clock-names = "xvclk";
        power-domains = <&power RK3588_PD_VI>;
        pinctrl-names = "default";
        pinctrl-0 = <&cam_pins>;
        reset-gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_LOW>;
        powerdown-gpios = <&gpio1 RK_PB1 GPIO_ACTIVE_HIGH>;
        port {
            ov5640_out: endpoint {
                remote-endpoint = <&mipi_in_ucam0>;
                data-lanes = <1 2>;
            };
        };
    };
};
关键字段解析:
compatible:驱动匹配字符串,必须与驱动中 of_match_table 一致。
reg:I2C 从设备地址(7位)。
clocks 与 reset-gpios:Sensor 的时钟与复位引脚,由 Pinctrl 子系统管理。
data-lanes:MIPI CSI 数据通道配置,仅摄像头 Sensor 需要。
Sensor 子系统在 RK BSP 中的位置关系 Sensor 子系统在 RK BSP 中的位置关系 RK BSP 内核层 V4L2 框架 Camera Sensor IIO 框架 IMU / 环境 Sensor Input 子系统 触摸屏 / 按键 Misc / 专用框架 指纹 / 虹膜 I2C / SPI 总线驱动 Pinctrl / Clock 硬件 Sensor 模组 Camera (OV5640) MIPI CSI + I2C IMU (MPU6050) I2C + 中断 触摸屏 (GT911) I2C + 中断 指纹 (FPC1020) SPI + 中断 设备树匹配 compatible 属性 reg (I2C地址) pinctrl / clock 中断 / GPIO

1.4 本章小结

  • 瑞芯微 SoC 产品线覆盖广泛,Sensor 接口资源(I2C 数量、MIPI CSI 通道)因型号而异,选型时需仔细核对。
  • RK Linux BSP 采用标准三层架构:应用层 → 内核层 → 硬件层,Sensor 驱动主要位于内核层。
  • Sensor 子系统分散在 V4L2、IIO、Input、Misc 等多个内核框架中,驱动开发前必须确认目标 Sensor 所属框架。
  • 设备树是 RK 平台描述 Sensor 硬件拓扑的核心手段,compatible、reg、pinctrl 是三个最关键的属性。