CMOS摄像头实现方案研究与心得.pdfVIP

  • 0
  • 0
  • 约2.66千字
  • 约 3页
  • 2026-01-21 发布于四川
  • 举报

我觉得用USB的话,做头算是比较高端的应用了,无论是对下位机,驱

动还是上位机来说。上,因为我本身就是从事头这个行业的,手上各种

头都有,又有OV的68013的Demo和度信的demo,于是闲暇并研究了下68013做

USB头的方法,搞了几个月,算是有点得吧,记录一下,给朋友们,

也希望各位能一起讨论。

【1】硬件、固件、驱动、上位机的选择

硬件搭配上可以是单个68013(也是我目前正在弄的,我后面说的也是基于

这个讨论的),或68013+CPLD,或68013+FPGA,当然,用FPGA然后配合SRAM或

FIFO肯定是几种硬件中速度最高的;

固件就是基于FX2/FX2LP的了,基本上就用Cypress现成的固件架构,采用

FX2或FX2LP都可以,其实要自己写的代码很少,不超过50行;

驱动的话,有两种选择,EZUSB或CYUSB,这就牵扯到你固件PID/VID和上位

机软件实现了,当然,我这里说的是直接试用Cypress的驱动,你自己写驱动的

话就无所谓了;

最后是上位机,如果是采用ezusb驱动,那么上位机就是用GPD+Winapi写

的了,相对烦琐点,我更的是用cyusb,上位机用cyapi实现,方便多了,

而且测试的时候可以用cyconsole而不是controlpane(个人不用control

pane)。

【2】硬件电路,固件的实现

先说固件,我们知道,对于头来说,速度肯定越高越好,68013两

种高速的模式:SlaveFIFO(我目前正在做的)

GPIF

GPIF--我就不说了,弄的比较少,不太熟,而且一般来说是应用与模拟其

他通信的,就以我目前做的SlaveFIFO来说说好了,以后的话可能再用GPIF实现

吧。

SlaveFIFO--两种方法:主要对sensor的VSYNC信号,VSYNC接68013PA0

引脚,HREF接SLWR,采用查询或中断方式。

查询:上位机中在数据线程里每次前发Vendor命令,固件收到后循

环查询PA0也就是VSYNC信号的到来,一旦到来,立即清空FIFO,然后返回上位

机开始数据,以此来实现帧同步。

中断:硬件种SLWR接一与门,PA0设置为中断0,HREF与一IO口相与然后

接SLWR。上位机发Vendor命令,固件vendor种与门,并清FIFO,开中断;

一旦VSYNC到来,产生中断,在中断中使能与门,实现帧同步。这种方法的好处

就是相比查询来说错帧的几率小。

【3】上位机的实现(基于VC6.0)

相对来说,如果在固件里我们只需要写不到50行代码,那么在上位机里就可能

写超过1000行的代码,可见用68013进行CMOS头的主要工作在上位机

编程。

搜索了网上所有的实现方法,大概有以下三种:

GDI(已经实现)Directdraw

(正在研究中)

Directshow

GDI--实现应该是最简单的了,不过缺点就是占CPU,就我写的那个程序,

开起来占CPU40%多;速度嘛,只能说一般;更严重的是GDI只能针对RGB数据,

而一般来说目前头用的最普遍的是rawdata或YUV格式(具体的说就是

YUV422),必须得转换成RGB才行。

Directdraw--为了解决用GDI显示YUV必须先软件转RGB的问题,网上搜

了下,发现ddraw可以直接YUV写屏,可惜,搜遍,就只找到那么一篇帖子,

还是YUV420的,试了下,发现不行;于是开始学习ddraw,买了本Windows游戏

编程技巧看了一阵子,对ddraw有些了解了;再可惜,我把代码放在MFC里

就,目前痛苦中,正在研究如何在MFC下使用窗口模式directdraw。期待

ddraw的高速硬件YUV写屏能力及低CPU占用。

Directshow--我的终极目标就是用directshow实现。其实,我最先就是开

始研究directshow的,不过那时是用个

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档