先给自己打个广告,本人的微信公众号正式上线了,搜索:张笑生的地盘,主要关注嵌入式软件开发,股票基金定投,足球等等,希望大家多多关注,有问题可以直接留言给我,一定尽心尽力回答大家的问题,二维码如下:
一 why
本篇文章主要以OV7740 cmos摄像头以及s3c2440芯片为例,介绍CMOS摄像头,以及SoC芯片内部CMOS控制器部分的基础知识。
最终需要实现的目的是,在LCD上实时显示摄像头采集到的数据
二 what
- 显示摄像头采集的基本流程
自然景观 --> 摄像头模块 --> 接口 --> S3C2440摄像头控制器 - OV7740 cmos摄像头模块的组成
a. lens镜头
b. 普通马达
c. sensor传感器OV7740 - 先介绍OV7740摄像头模块
A. 工作原理以及基本参数
输入信号: 自然景观模拟信号
输出信号:输出格式为RAW RGB、YUV格式的数字信号,输出分辨率:VGA(640x480)、QVGA(240x320)、CIF(352x288)或者更小的大小,输出接口为BT601或者BT656
有效感光阵列大小:656x488
镜头大小:1/5寸
像素点颗粒大小:4.2um x 4.2um
其中有效感光阵列、镜头大小、像素点颗粒大小都是用来描述感光阵列的
输入时钟:6~27MHz
扫描模式:连续扫描§
B. OV7740内部数据的处理流程
阅读OV7740的数据手册,发现OV7740从内部硬件功能模块上主要分为如下三个部分:
(1). ISC,image sensor core:翻转、增益大小调整、黑电平校准、饱和度控制、OTP存储器
(2). ISP,image sensor process:提供测试功能、镜头补偿功能、自动白平衡、RAW RGB -> RGB、RGB -> YUV、窗口功能、缩放功能
(3). IOI,image output interface:RAW RGB/YUV、VGA/QVGA、BT601/BT656
那么,我们如何设置OV7740的这些功能呢?显然根据我们设置其他芯片的经验,OV7740必然有一个控制访问接口,我们的SoC芯片通过这个控制访问接口,对OV7740进行初始化设置,根据查看原理图或者数据手册可知,SoC芯片通过I2C总线来访问OV7740。
设置好OV7740的工作模式之后,显然OV7740会有图像数据输出接口,通过这些接口将图像数据传输到SoC,OV7740支持BT601或者BT656接口传输数据。 - S3C2440摄像头CMOS控制器
这部分内容在数据手册的第23章内容,这里不做详细介绍,只介绍一个粗略部分。
显然,OV7740的输出信号通过BT601或者BT656接口送到了S3C2440,SoC需要支持这些接口,以及对这些数据做正确处理的功能。
S3C2440支持BT601或者BT656接口输入,最大支持的分辨率是4096x4096,输入的数据格式必须是8bit YUV;内部图像处理模块支持预览和编码功能,所谓预览就是现实画中画,编码就是对采集到的数据进行编码操作。
S3C2440每次处理完一帧图像之后,都会产生一个IRQ信号 - s3c2440和ov7740 模组之间的接口
a. 控制类
s3c2440通过I2C总线控制ov7740模组的初始化设置
b. 数据传输类
CAMRST --> 复位cmos摄像头模块
CAMCLK --> 摄像头模块供祖宗的系统时钟(24MHz)
CAM_HREF --> 行同步信号
CAM_VSYNC --> 帧同步信号
CAM_PCLK --> 像素时钟
CAMDATA0~7 --> 数据线
- 一些基础概念
a. RAW RGB和RGB的区别是什么?
RAW RGB就是只有红绿蓝三种颜色的数据,自然景观经过感光阵列输出后的数字信号就是RAW RGB(感光阵列只支持R、G、B三种)。
而RGB数据不仅表示红绿蓝三种颜色,而且还能表示由红绿蓝组合成的任何一种颜色
b. RGB和YUV分别是什么
两者是完全不同的颜色空间,它们之间可以相互转换
c. YCrCr420和YCbCr422的区别是什么?
d. BT601/和BT656传送方式有什么区别
BT601有独立的行同步信号线、帧同步信号线,而BT656是将这两种信号线内嵌到数据中的
三 how
本篇暂时不涉及如何去设置访问模组,只做基础知识介绍,想要知道如何写一个cmos摄像头的驱动,请参照接下来的文章