Camera驱动调试小记

Camera驱动调试小记


应用使用V4L2 API操作Camera设备是比较统一的,但是对Camera驱动的实现是多种多样了,比如UVC(USB免驱摄像头)以及SoC-Camera。

前者不需要额外的驱动程序,所以不用过多关心;后者是片上系统Camera的支持。针对SoC-Camera内核中标准的文档是Linux-3.0-soc-camera。SoC-Camera和ASoC是一样的思想,最终实现SoC端的Host驱动与Guest端进行分离,这样就可以很方便地通过link将独立的host端驱动和独立的Guest端驱动联合起来。这么说来也可以分三个部分:
Machine、Platform和Sensor。其中Platform是CPU上的Camera Interface驱动(由CPU厂商提供),Sensor是具体的Camera模组驱动(由模组厂商提供),Machine驱动是具体自定义PCB的主板相关,将Platform和Sensor驱动连接起来(由具体主板设计者开发)。

drivers/media/video/rk30_camera_oneframe.c
static struct soc_camera_host_ops rk_soc_camera_host_ops =
{
    .owner              = THIS_MODULE,
    .add                = rk_camera_add_device,
    .remove             = rk_camera_remove_device,
    .suspend    = rk_camera_suspend,
    .resume             = rk_camera_resume,
    .enum_frameinervals = rk_camera_enum_frameintervals,
    .cropcap    = rk_camera_cropcap,
    .set_crop   = rk_camera_set_crop,
    .get_crop   = rk_camera_get_crop,
    .get_formats        = rk_camera_get_formats,
    .put_formats        = rk_camera_put_formats,
    .set_fmt    = rk_camera_set_fmt,
    .try_fmt    = rk_camera_try_fmt,
    .init_videobuf      = rk_camera_init_videobuf,
    .reqbufs    = rk_camera_reqbufs,
    .poll               = rk_camera_poll,
    .querycap   = rk_camera_querycap,
    .set_bus_param      = rk_camera_set_bus_param,
    .s_stream = rk_camera_s_stream,   /* [email protected] : Add stream control for host */
    .set_ctrl = rk_camera_set_ctrl,
    .controls = rk_camera_controls,
    .num_controls = ARRAY_SIZE(rk_camera_controls)
};

想像是美好的,实现是残酷的。国内的厂商并没有完全按照这样做。比如一个型号的Sensor如果要应用在ROCKCHIP和Allwinner平台上,原本应该就提供同一个驱动程序就可以了,但是目前的情况是Sensor厂商提供各自针对相应平台的驱动程序。没有达到设计思想中的各司其职的效果,不过最终会朝着好的方向走的。

调试顺序:

1.(可不连接模组)上电时序 根据手册时序将AVDD,DVDD,IOVDD上电。

2.(可不连接模组)上电正常后,检测MCLK是否正常,一般为24MHz/48MHz。

3.(可不连接模组)PWDN和RESTB信号是否正常,重点在于电平切换有没有在正确的时间点上。

4.(可不连接模组)I2C信号是否正常,主要观察I2C寻址地址是否正确。

5.(需要连接模组)I2C信号信号第9个脉冲对应的SDA是否为低电平,是代表有ACK,反之无。

6.(打开相机应用)测试是否有PCLK/H/V/这三个信号致命,如果不正常会导致无法显示图像

7.(打开相机应用)DATA信号完全没有会使得绿屏(不一定全是这样),图像显示正常与否和DATA有关。

参考文档还有Video for Linux Two(V4L2)——驱动编写指南;测试工具有v4l-utils,还有V4L2 soc-camera 子系统。

你可能感兴趣的:(Linux设备驱动)