DM6467的OV5642 Linux驱动程序开发(三)——驱动测试

本文介绍了DM6467平台下OV5642的Linux驱动测试过程,包括V4L2应用层程序的编写步骤,如打开视频设备、配置格式、申请缓冲区等。在调试阶段遇到了初始化失败、I2C访问问题、图像颜色异常等问题,逐一分析并给出了解决方案。
摘要由CSDN通过智能技术生成

 


 

1        编写ov5642测试例程

在编写好ov5642驱动之后,需要编写程序对其进行测试,这就是V4L2应用层程序。要编写V4L2应用层程序,首先需要理解V4L2提供的各种ioctl函数,要知道如何配置视频设备的初始化参数,特别注意的是配置是有一定顺序的,如果顺序错了那肯定会有错误。在初始化视频设备之后,需要建立缓冲区来接收视频设备传过来的帧,V4L2提供了两种模式来获取视频帧:MMAP和UserPtr。由于在vpif驱动程序中只提供了对MMAP的支持,所以我们在编写测试例程时也是使用该模式。对于V4L2的MMAP和UserPtr两种模式的理解其实有点困难,现在我也还没有完全弄清,但是这两种方法的使用却比较简单。

ov5642测试例程的编写主要包括以下几个部分,必须严格按照该顺序来编写程序。

(1)      打开视频设备。

视频设备在linux的/dev目录中,我们这里只有一个视频设备,所以是/dev/video0,使用open函数打开。

 

static int ov5642 = -1;

ov5642 = open ("/dev/video0", O_RDWR, 0);

 

(2)设置vpif channel 0的输入。

由于vpif的channel 0可以有三个输入:tvp5150、tvp7002和ov5642,所以需要选通对应的输入模式。

 

unsigned int  input = 1; // 0: tvp5150; 1: 0v5642. defined in board-dm646x-evm.c

ioctl (ov5642, VIDIOC_S_INPUT, &input);

 

(3)设置视频采集格式。

现在ov5642只支持VGA格式。

 

vid_std_id = 0x10000000; // V4L2_STD_CAMERA_VGA

ioctl (ov5642, VIDIOC_S_STD, &vid_std_id);

 

(4)设置视频的像素点格式。

现在ov5642驱动程序只支持YUYV格式的像素点格式,分辨率为VGA,即640 X 480,逐行扫描,每行640 X2 X 2个字节(因为ov5642输出10-bit视频数据)。

 

     memset(&fmt, 0, sizeof(fmt));

     fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

     fmt.fmt.pix.width = 640;

     fmt.fmt.pix.height = 480;

     fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;

     fmt.fmt.pix.field = V4L2_FIELD_NONE;

     fmt.fm

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值