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