Wince6.0 上增加ov3640摄像头

在OMAP上增加320W的ov3640摄像头,之前没弄过心里没底,乘着硬件板子还没出来在2442上调试了ov9650,图像等都出来了才开始做ov3640,也参照了Linux的3640代码。弄了很有一阵子,总结下走过的弯路。

1、确保硬件连接好

ov的手册都比较晦涩,omap系统比较庞大致使没怎么注意Camera接口的布线,导致Vsync与Href居然给反了。器件又小,且没测试点,弄了几天才用示波器测试出来。

2、判断设备是否工作

当然在工作之前必须给3640提供时钟,我这时钟是由omap的ISP提供。示波器是必须的,对3640的IIC读写用示波器捕捉下来,看字节顺序与数据是否正确,有无ACK。3640与9650寄存器地址不一样,一个是8位一个16位,都大同小异,先发送高八位后低八位。读取ID,成功说明3640已经开始工作。

3、测试数据的到来

只要上电成功,ov就会有默认的帧输出。用示波器测试Vsync引脚,因ov的传输速率不会大于30FPS,那么其频率也就这样,不可能太快。Href与帧频和行宽等相关。

4、配置Omap寄存器

3640可输出YUV、RGB、RAW、JPEG等几种格式,虽然omap自己集成了ISP功能,直接选用一不带ISP的sensor输入RAW则可,但这样增加了开发难度,特别象我这样的对图像处理不太了解。由于3640自身的ISP功能,就直接使用了,就图方便!输出YUV方便Omap的Resizer来处理缩放功能。数据流如下:

Sensor==>ISP==>CCDC==>Resizer==>Memory

Resizer可要可不要看具体应用,加上过后不知为什么图像失真严重,也就没管它了。具体配置点在于:

ISP:使能时钟24M给3640、开启CCDC、桥接功能使能

CCDC:同步极性、输入格式选择、配置输入图像大小、设置输出地址

5、配置ov3640

ov的支持,少与代理商打交道,直接找到ov的FAE,有问题直接说。居然没有给我3640的初始化代码,就给了个AF的初始化代码,并且还是错误的,无语了虽然代理很热心,问题是他不懂。后来直接与FAE交流,拿了初始化序列,格式相互之间转换的序列,也就差不多了。

6、Ce6.0 Camera开发

用微软的DShow确实挺方便的,从提供的camera_null直接更改,MDD+PDD模式,结构都做好,只需要我们填充部分内容:

FillBuffer

TakeStillPicture

PDDInit

增加自己的中断线程函数回调HandleCaptureInterrupt或者HandleStillInterrupt,其调用MDD_HandleIO再由MDD调用FillBuffer,FillBuffer里面将保存的图像拷贝入。Camera驱动暴露几个Pin给应用,让应用按照所选的pin来获取图像,这个格式m_pModeVideoFormat在PDDInit里面填充。一般的YUV与RGB格式都支持,但我出现在QXGA的YUV格式时,DShow不成功,但RGB可能,猜测该是内存大小不能满足的原因,因YUV到RGB是需要大量内存空间的。

7、细节

320万像素质量真的不咋的,很粗糙。闪光灯可能太暗,近距离闪光还可以,但距离到一两米就有困难了,可能还有一些参数没设置好,等自己做个完整一点的应用再来一边测试一般更改参数。CameraDshowApp.exe支持的功能太有限了。。。。

你可能感兴趣的:(工作,linux,测试,null,WinCE,图像处理)