tag 标签: dvp

相关博文
  • 热度 31
    2020-10-3 22:31
    7290 次阅读|
    0 个评论
    基于MT9M114+CYUSB3014的UVC摄像头开发4(亮度控制)
    1、 本文简单描述一下UVC的亮度控制机制,实际上就是测试AN75779的亮度功能。测试工具有两个,一个是关于位机出图像的E-CAM软件,另一个是监测USB3 是关于 e-CAM 软件更改亮度的截图,如下图: 弹出的控制页面中只有亮度是可以操作的,其它是灰色的。当然,后面的文章会介绍使能对比度、色调等其它控制功能,不过是收费的。 2、 这里用 BUS HOUND 软件监听 USB 总线上的控制传输指令,数据如下: 上图是软件 e-CAM 发出的两条指令,第一条指令是 8 个字节, 21 01 00 02 00 02 02 00 ,控制传输指令 CTL 是 USB 协议定义的指令,具体 8 个字节的含义用户可以自行查阅 UVC 标准协议。第二条指令 2 个字节, 31 00 。这个简单的控制传输指令,也可以用 BUS HOUND 软件完成,具体如下 : 图中 1 是选择 USB 传输; 图中 2 是选择控制传输; 图中 3 是输出实际的 8 字节控制传输指令; 图中 4 是输入要发送的 2 字节数据; 3、 结合上图中的8字节控制传输指令,请直接对照UVC协议具体分析一下(UVC协议第4章,或者第86页)。 第1字节21; 第2字节01,对应bRequest;常数定义操作的类型,具体见UVC协议的第87页,常数定义如下: 第3、4字节00 02;对应wValue; 第5、6字节00 02;对应wIndex; 第7、8字节02 00;对应wLength; 4 、亮度控制部分代码分析 打开文件uvc.c文件,我们看下程序是如何处理这8个字节的控制传输指令上的,定位在第323行上,如下: 函数CyFxUVCApplnUSBSetupCB ( )的输入参数有两个,如上图标记A,两个32位变量setupdat0和setupdat1正好是8个单字节,即是8个字节的控制传输指令;上图标记B的则是从这8个字节中按UVC协议提取的5个变量,分别是bmReqType,bRequest,wValue,wIndex,和wLength。 上位机发送的CTL指令为:21 01 00 02 00 02 02 00。注意到setupdat0=0x0200_0121;setupdat1=0x0002_0200,因为CYUSB3014内核的存储器组织是小端对齐的,所以4个字节的顺序是正好相反的。经过函数CyFxUVCApplnUSBSetupCB()的处理,如上图中标记B的处理,控制传输的5个变量的值如下: bmReqType=0x21; bRequest =0x01; wValue =0x0200; wIndex =0x0200; wLength=0x0002; 上图中标记C的代码,是识别出UVC的控制指令后,通过事件设置函数CyU3PEventSet()设置事件CY_FX_UVC_VIDEO_CONTROL_REQUEST_EVENT。 接收事件CY_FX_UVC_VIDEO_CONTROL_REQUEST_EVENT是在函数UVCAppEP0Thread_Entry()中完成的。此函数在文件uvc.c中的第1667行,如下图: 通过获取事件函数CyU3PEventGet(),上图中标记A的,获取事件CY_FX_UVC_VIDEO_CONTROL_REQUEST_EVENT。再通过上图标记B的代码,识别出 8==CY_FX_UVC_PROCESSING_UNIT_ID=0x02,执行函数UVCHandleProcessingUnitRqts()。 函数UVCHandleProcessingUnitRqts()在第1215行,如下图: 上图红框中代码是设置亮度的代码,先通过函数CyU3PUsbGetEP0Data()读出OUT传输的两个字节,存入变量glEp0Buffer中,再经过变量值范围检查后执行设置亮度的函数SensorSetBrightness()。 5、亮度设置相关的还包括描述符部分,以AN75779的USB2描述符为例,如下: 上面的处理单元共有3个字节的位控制字节,最低字节的D0位代表亮度控制,这是UVC协议定义好的。 如果将上面的D0位设置为0,再编绎程序,下载到电路板中,图像正常,但亮度控制功能所属的视频属性控制页都不显示了,仅剩下照相机控制页了。 作为上面的对比,将图像属性控制的3个字节的最低字节8位全部设置为1,即FF, * D0: Brightness;//亮度 * D1: Contrast;//对比度 * D2: Hue;//色调 * D3: Saturation;//饱合度 * D4: Sharpness;//清晰度 * D5: Gamma;//伽玛 * D6: White Balance Temperature;//白平衡 * D7: White Balance Component;//白平衡 未完,接下一章。 良子USB,20200912 专注USB3.0、FPGA、PCIE、UVC摄像头开发 QQ:1345482533
  • 热度 29
    2016-2-2 22:21
    2345 次阅读|
    0 个评论
          接上一篇。 关于USB2.0摄像头开发板,可以访问: http://bbs.ednchina.com/BLOG_ARTICLE_3027702.HTM       上一篇主要介绍的是开发前的三个特殊引脚,分别是XMCLK、RESET#和PDWN。接下来在FPGA程序中设置这三个引脚的正确电平。 第一个引脚是XMCLK,26针接口的25脚,经过电平偏移芯片U18的6脚到11引脚,接到FPGA的P2引脚。底板上的外部晶振为48M,经过PLL变为24M之后,由C0输出到P2引脚。第二个引脚是RESET#,26针接口的23引脚,经过U18的4脚到13引脚,接到FPGA的N2引脚,应为高电平。第三个引脚是PWDN,26针接口中的24引脚,经过U18的5脚到12引脚,接到FPGA的P1引脚,应为低电平。      在做了以上准备后,摄像头就可以响应68013发过来的I2C指令了。OV5640的寄存器较多,可以先读出芯片的版本号,来验证I2C通信是否正常。关于OV5640的版本信息,查数据手册,有如下的信息:         确定要读写的摄像头寄存器之后,还得编写68013A的固件程序,以便能正确发出I2C指令(这方面内容,可以查看我前面的帖子)。上位机程序,直接就可以用“Control Center”,通过控制传输完成。下面是截取的数据,       从寄存器地址0x302A返回的数据是0xB0,对照数据手册是完全正确的。      以上过程验证了I2C通信是正常的,接下来要输入一连串的摄像头配置指令,使OV5640工作在720P@30模式下。       未完,待续,,,,,,,,,,,       淘宝店铺: http://liangziusb.taobao.com 良子.2016年    承接USB开发工程  QQ:1345482533
  • 热度 24
    2016-1-31 20:13
    2252 次阅读|
    0 个评论
          前面已经开发完OV5640了,用的是MIPI接口的OV5640,主芯片用的是CYUSB3065,USB3.0接口(可以看这里: http://bbs.ednchina.com/BLOG_ARTICLE_3029910.HTM )。这里介绍并口的OV5640开发,目前想用在USB2.0摄像头开发板上,关于USB2.0摄像头开发板,可以访问: http://bbs.ednchina.com/BLOG_ARTICLE_3027702.HTM       OV5640模组,还是手机上使用的模组,只要接口正确,直接就可以使用。按照之前定义的26针接口,PCB如下所示,       上图中左侧的26针接口,有几个特殊的引脚,开发时需要注意: 1、25脚XMCLK:FPGA发出提供给OV5640的外部时钟,查OV5640的数据手册,确认需要的是24M的时钟。 2、23脚RESET#:异步复位引脚,有效电平为低电平(芯片内部有上拉电阻),正常出图时,FPGA应提供此引脚高电平。 3、24引脚PWDN:掉电控制引脚,有效电平为高电平(芯片内部有下拉电阻)。       在搞定了上面三个引脚后,接下来就是通过I2C总线读取OV540的芯片版本了。如果I2C通信也正常,则硬件开发的大部分工作都完成了,其余的主要是各种寄存器指令了。 (当然,电压一定要正常)      由于是并口的OV5640,正确配置后,可以用示波器查看19脚、20脚和21脚上的波形,可以看到OV5640发出的行、场等信号。        未完,待续,,,,,,,,,,,       淘宝店铺: http://liangziusb.taobao.com 良子.2016年    承接USB开发工程  QQ:1345482533
相关资源