Camera开发-OV5640(MIPI)

Camera开发-OV5640(MIPI)本文为记录 OV5640 mipi 摄像头开发流程记录 以及开发过程学到的知道点以作分享 ov5640

大家好,欢迎来到IT知识分享网。

Camera开发-OV5640(MIPI)

如果需要OV5640产品规格书和mipi摄像头引脚定义,请自行下载

1.OV5640摄像头介绍

OV5640_V5( V5 是版本号,下面均以 OV5640 表示该产品)是芯路恒科技推出的一款高性能 500W 像素高清摄像头模块。该模块采用 OmniVision 公司生产的一颗 1/4 英寸CMOS QSXGA( )图像传感器 OV5640,配合高质量的光学镜头及为实现更高性能而精心设计的 PCBA,使该模块拥有了尽可能高的成像质量。OV5640 模块的特点如下:

  • 1.4μm1.4μm 像素大小,并且使用 OmniBSI 技术以达到更高性能(高灵敏度、低串扰和低噪声)
  • 自动图像控制功能:自动曝光( AEC)、自动白平衡( AWB)、自动消除灯光条纹、自动黑电平校准( ABLC)和自动带通滤波器( ABF)等。
  • 支持图像质量控制:色饱和度调节、色调调节、 gamma 校准、锐度和镜头校准等
  • 标准的 SCCB 接口,兼容 IIC 接口
  • 支持 RawRGB、 RGB(RGB565/RGB555/RGB444)、 CCIR656、 YUV(422/420)、 YCbCr( 422)和压缩图像( JPEG)输出格式
  • 支持 QSXGA( 500W)图像尺寸输出,以及按比例缩小到其他任何尺寸
  • 支持图像缩放、平移和窗口设置
  • 支持图像压缩,即可输出 JPEG 图像数据
  • 支持数字视频接口( DVP/MIPI)
  • 自带嵌入式微处理器
  • 集成 LDO, 仅需提供 3.3V 电源即可正常工作

2.CMOS 图像传感器成像原理

在这里插入图片描述

这种表示颜色的方法就是最常见的 RGB888 格式。所谓 RGB888 就是使用 3 个 8 位的数据表示一种颜色,其中高八位表示红色分量,中八位表示绿色分量,低八位表示蓝色分量,上述 8 种颜色用 RGB888 格式表示就如下表所示:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

而且通过对上述 8*8 的矩阵进行分析发现,在整个矩阵中,像素的位置关系有且只有下面四种情况:

在这里插入图片描述

按照这样的思路,整个图像传感器中的每一个像素都可以以不同的角色参与 4 次运算,并最终得到 4 个 RGB 颜色值,所以理论来说,还是可以认为一个图像传感器有多少个物理像素,就能得到多少个 RGB 格式的像素值,虽然每个物理像素都只能感应一种颜色。但是进过插值运算后,其能输出 RGB 的数据格式的像素数量还是等于其物理像素个数的。有了 Bayer 像素矩阵后,只需要使用一个模数转换器,依次对每一个像素的感光元件感应到的模拟量进行转换并输出,就能得到一幅完整图像的原始像素信息了。下图为OV5640 图像传感器的功能框图。

3.OV5640内部结构

在这里插入图片描述
在这里插入图片描述

通过该图可以看到,该图像传感有一个基本的像素矩阵,在图中名为 image array,该像素矩阵共有 个物理像素,2592*1944=5,038,848,这也就是我们常说的 500 万像素的由来。在像素矩阵外围,有一个 row select 功能模块来选择当前输出哪一行的像素,和一个 column sample/hold 电路来依次采样每行像素中的每一个像素的感光元件感应结果(模拟信号)并输出到信号放大器(AMP),经由 AMP 对该信号放大之后,送给 10 位的模数转换器(10-bit ADC)进行模数转换。

4.SCCB协议

4.1 SCCB协议简介

SCCB (Serial Camera Control Bus)是 OmniVision公司公布的串行摄像机控制总线协议,相当于一个简易的I2C 协议。SCCB有三线和两线之分,三线的是一主机多从机,两线的是一主机一从机。

在这里插入图片描述

在这里插入图片描述

  • SCCB_E:使能信号,低电平有效。
  • SIO_D:双向数据总线,可由主设备或从设备驱动,空闲时拉高。
  • SIO_C:单向时钟总线,只能由主设备驱动,高电平数据有效,空闲时拉高。
  • PWDN:输出/输入关闭。

4.2 SCCB时序分析

起始信号

当SCCB_E拉低之后,SIO_D在SIO_C高电平期间拉低,表示一次数据传输开始。

在这里插入图片描述

停止信号

当SCCB_E拉低之后,SIO_D在SIO_C为高电平期间拉高,表示一次数据传输结束。

在这里插入图片描述

4.3 数据传输

在 SCCB协议中,一个基本传输单元称作一个相(phase),一个相包含总共9比特,前8比特为数据,它的响应信号ACK被称为一个传输单元的第9位,分为Don’t care和 NA(No ACK)。Don’t care位由从机产生;NA位由主机产生,由于SCCB不支持多字节的读写,NA位必须为高电平。SCCB没有重复起始的概念,因此在 SCCB的读周期中,当主机发送完片内寄存器地址后,必须发送总线停止条件。不然在发送读命令时,从机将不能生Don’t care响应信号。

  • 如果是主机发送数据,即进行写操作,第9位就为don’t care;
  • 如果是从机发送数据,即为读操作,第九位就为NA。

三相写传输

在这里插入图片描述

两相写传输:读数据第一阶段

在这里插入图片描述

两相读传输:读数据第二阶段

在这里插入图片描述

4.4 sccb与i2c的区别

  • SCCB的应答位称为X,表示“Don’t care”,而IIC应答位称为ACK。
  • SCCB只能单次读,而IIC除了单次读还支持连续读。
  • SCCB读操作中间有stop,而IIC读操作中间可以有stop也可以不需要stop,具体表现如下

5.原理图引脚定义

在这里插入图片描述

6.设备数添加及内核使能

 ov5640_0: ov5640_mipi@3c { compatible = "ovti,ov5640"; reg = <0x3c>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_csi0_pwn>, <&pinctrl_csi0_rst>, <&pinctrl_csi_mclk>; clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO2>; clock-names = "xclk"; assigned-clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO2>; assigned-clock-parents = <&clk IMX8MP_CLK_24M>; assigned-clock-rates = <>; csi_id = <0>; powerdown-gpios = <&gpio2 11 GPIO_ACTIVE_HIGH>; reset-gpios = <&gpio1 6 GPIO_ACTIVE_LOW>; mclk = <>; mclk_source = <0>; mipi_csi; status = "okay"; port { ov5640_mipi_0_ep: endpoint { remote-endpoint = <&mipi_csi0_ep>; data-lanes = <1 2>; clock-lanes = <0>; }; }; }; &mipi_csi_0 { #address-cells = <1>; #size-cells = <0>; status = "okay"; port@0 { reg = <0>; mipi_csi0_ep: endpoint { remote-endpoint = <&ov5640_mipi_0_ep>; data-lanes = <2>; csis-hs-settle = <13>; csis-clk-settle = <2>; csis-wclk; }; }; }; &vpu_g1 { status = "okay"; }; &vpu_g2 { status = "okay"; }; &vpu_vc8000e { status = "okay"; }; &vpu_v4l2 { status = "okay"; }; &cameradev { status = "okay"; }; &isi_0 { status = "okay"; cap_device { status = "okay"; }; m2m_device { status = "okay"; }; }; pinctrl_csi0_pwn: csi0_pwn_grp { fsl,pins = < MX8MP_IOMUXC_SD1_STROBE__GPIO2_IO11 0x10 >; }; pinctrl_csi0_rst: csi0_rst_grp { fsl,pins = < /*MX8MP_IOMUXC_GPIO1_IO05__GPIO1_IO05 0x10*/ MX8MP_IOMUXC_GPIO1_IO06__GPIO1_IO06 0x10 >; }; pinctrl_csi_mclk: csi_mclk_grp { fsl,pins = < MX8MP_IOMUXC_GPIO1_IO15__CCM_CLKO2 0x50 >; }; 

在这里插入图片描述

7. 功能测试

利用i2cdetect -y 1命令查看0V5640设备在位

在这里插入图片描述

查看到dev路径下相应设备

在这里插入图片描述

利用v4l2-ctl --device=/dev/video3 --list-formats-ext查看支持格式

(此处只是截取了一部分)

在这里插入图片描述

用v4l2-ctl命令对不同分别率录制视屏,举个例子:(仅需改动width=640,height=480)

v4l2-ctl --device=/dev/video3 --set-fmt-video=width=640,height=480,pixelformat=NV12 --stream-mmap --stream-to=video640x480.yuv --stream-count=60 

在这里插入图片描述

利用ffplay -video_size 640x480 -pixel_format nv12 -framerate 10 -i video640x480.yuv视频播放

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/126090.html

(0)
上一篇 2025-09-21 18:15
下一篇 2025-09-21 18:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信