RK3588 OV13855驱动加载全解析,【连载6】数据库未来发展趋势展望,附例子,避坑指南以及面试题。
RK3588 MIPI底层驱动学习:OV13855驱动加载流程解析
MIPI-CSI2接口初始化
RK3588通过MIPI-CSI2接口与OV13855传感器连接。系统启动时,内核首先初始化CSI主机控制器,配置D-PHY的时钟通道和数据通道。典型时钟配置为891MHz(4-lane模式),对应寄存器地址0xFD5C8000。
D-PHY初始化代码示例:
static void rk3588_csi2_dphy_init(struct csi2_dphy *dphy) { writel(0x20000200, dphy->regs + DPHY_CTRL); writel(0x00000001, dphy->regs + DPHY_EN); }I2C从设备探测
驱动通过I2C总线(通常为I2C1,地址0x20)访问OV13855寄存器。内核调用i2c_add_driver()注册驱动时,会执行以下关键操作:
- 发送0x300A寄存器读取芯片ID(预期返回值0x13855)
- 验证PLL锁相状态寄存器0x302A
- 检查传感器状态寄存器0x302E
设备树配置片段:
i2c1: i2c@fe5a0000 { ov13855: camera@20 { compatible = "ovti,ov13855"; reg = <0x20>; clocks = <&cru CLK_CIF_OUT>; }; }传感器寄存器配置
驱动加载阶段通过I2C配置关键寄存器组:
- 模式控制寄存器组(0x3100-0x31FF)
- 图像格式寄存器(0x5000-0x5FFF)
- 曝光控制寄存器(0x3500-0x35FF)
典型配置序列:
static int ov13855_init_regs(struct i2c_client *client) { ov13855_write_reg(client, 0x3100, 0x01); // 启动配置 ov13855_write_reg(client, 0x5000, 0x7F); // RAW10输出格式 }时钟树同步
RK3588需要协调以下时钟域:
- 传感器主时钟(24MHz输入)
- ISP工作时钟(通常为500MHz)
- VPU视频处理时钟
时钟配置公式: [ f_{pixel} = \frac{f_{mclk} \times PLL_mult}{HTS \times VTS} ] 其中HTS=0x0C80,VTS=0x0960为OV13855默认时序参数。
中断系统注册
驱动注册以下中断处理函数:
- VSYNC中断(GPIO3_A5)
- HSYNC中断(GPIO3_A6)
- 帧结束中断(GPIO3_A7)
中断注册代码:
devm_request_irq(&client->dev, gpio_to_irq(101), ov13855_vsync_handler, IRQF_TRIGGER_RISING, "ov13855_vsync", priv);DMA缓冲区管理
驱动初始化时建立DMA缓冲区描述符:
- 分配4个帧缓冲区(通常为4224x3136分辨率)
- 配置MMU页表映射
- 设置CSI2接收端DMA地址寄存器
内存分配关键参数:
dma_alloc_coherent(dev, FRAME_SIZE * 4, &priv->dma_handle, GFP_KERNEL);调试信息输出
驱动加载过程中会输出关键日志:
[ 5.123456] ov13855 2-0020: Detected OV13855 sensor ID [ 5.123789] ov13855 2-0020: PLL locked at 891MHz [ 5.124123] ov13855 2-0020: Frame format: 4224x3136@30fps电源管理初始化
传感器电源序列控制:
- AVDD(2.8V)上电延迟10ms
- DVDD(1.2V)上电延迟5ms
- DOVDD(1.8V)上电延迟5ms
- 释放复位信号(GPIO1_B5)
电源控制代码片段:
gpiod_set_value(priv->reset_gpio, 1); usleep_range(10000, 11000);后续处理流程
驱动加载完成后,内核会:
- 将设备加入V4L2子系统设备列表
- 创建/dev/videoX设备节点
- 启动帧率控制线程
- 初始化ISP图像处理管道
https://github.com/pjongfreemen/53x_10wr/blob/main/README.md
https://raw.githubusercontent.com/pjongfreemen/53x_10wr/main/README.md
https://github.com/ry-cp/w3i_u8mx
https://github.com/ry-cp/w3i_u8mx/blob/main/README.md
https://raw.githubusercontent.com/ry-cp/w3i_u8mx/main/README.md
