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.cstatic 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)};
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

想像是美好的,实现是残酷的。国内的厂商并没有完全按照这样做。比如一个型号的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 子系统

           

猜你喜欢

转载自blog.csdn.net/qq_44925290/article/details/89839613