您的位置:首页 > 其它

CMOS Sensor Interface(CSI)

2015-11-02 19:37 309 查看
http://blog.csdn.net/winkyxiao1981/article/details/6375459

CMOS图像传感器分为两类,非智能和智能。非智能的这类图像传感器只是支持传统的摄像头时序(场同步和行同步),然后输出一个Bayer(拜耳)以及

统计的数据,而智能传感器支持CCIR656视频解码格式,并且还提供了额外的一些图像处理(例如:图像压缩,图像滤波预处理,以及多种数据输出格式)
CSI的包含的能力如下:

1.前端-配置逻辑接口以便支持大多数通用的可用的CMOS摄像头接口。

2.支持CCIR656视频接口以及传统的摄像头接口。

3.8位数据口,支持方便YCC,YUV,Bayer或者是RGB的数据格式输入。

4.完全可控的8-bit或16-bit数据到32-bit的FIFO进行打包

5.32*32大小的FIFO存储接受到的的图像像素数据,该FIFO可以通过可编程的IO或者是DMA进行读取.

6.后端-提供了直接到eMMA的预处理PrP块接口(PrP和PP组成了MX27图形加速器eMMA,PrP和PP能够用来给视频做预处理和后期处理,例如,放大,缩小,颜色转换)

7.提供sensor的可屏蔽中断源,该中断源也是中断可控的:
开始Frame,结束Frame,Change of Field,FIFO Full

8.提供给外部sensor用的,可配置的主时钟频率

9.由统计数据产生的自动曝光(AE)和自动白平衡(AWB)控制。
39.1 CSI结构

39-5图,显示了CMOS摄像头接口的框图,它包含了2个控制寄存器(Control Register 1和3)来建立接口的时序以及中断产生,另外一个控制器

(Control Register 2)用来产生统计数据,还有一个状态寄存器,接口逻辑,数据包逻辑,CCIR时序编码,中断控制,主时钟产生源,统计数据产生,

32*32图像数据接受FIFO(RxFIFO),还有16*32统计数据FIFO(StatFIFO).

39.2 CSI接口信号描述

CSI模块和外部的CMOS图像传感器的接口如下:

.CSI_VSYNC input Vertical Sync(Start of Frame) 摄像头传输进CSI接口,是场同步接口,提供起始

.CSI_HSYNC input Horizontal Sync(Blank Signal) 摄像头传输进CSI接口,是行同步接口,提供行同步信号,判断消隐信号

.CSI_D[7:0] input 8-bit摄像头数据总线(传输YUV,YCC,RGB,或者Bayer等数据

.CSI_MCLK output Sensor Master Clock 该接口是CSI输出接口,提供给外部摄像头的主时

.CSI_PIXCLK input pixel Clock 该接口是摄像头输出的像素时钟,一般都等于MCLK主时钟

CSI的RxFIFO和eMMA的预处理块PrP之间有一条用来快速传输数据的数据线.
该数据线可以enabled或者disabled


当该bus enabled时,CSI的RxFIFO会从AHB总线上取消,并且连接到PrP上。任何CPU或者DMA通道到RxFIFO寄存器的请求读取都将被忽略(因为连接到PrP上了)

所有的CSI中断都被MASK防止软件访问FIFO以及相关的状态寄存器。

RxFIFO设定Full level等级为4/8/16 Words,如果是24words那么内部逻辑认为是8Words.

用户使用RxFIFO的full level来参考数据格式和线性宽度,来确保传输的帧是一个完整的帧, 图像的大小(in Words)必须是RxFIFO设定的full
level

的整数倍。


关系如下:

数据格式 每个像素包含的byte数目 每个Words包含的像素数目 RxFIFO Full level等级 所需要的线宽(line Width)

YUV422 2
2 4/8/16Words
8/16/32的倍数

YCC422 2
2 同上 8/16/32的倍数

RGB565 2
2 同上 8/16/32的倍数

RGB888 4
1 同上 4/8/16的倍数

Bayer 1
4 16/32/64的倍数

39.3 操作原理

该小段描述sensor接口的操作模式

CSI设计是为了支持普通的sensor接口时序以及CCIR656的视频接口时序。传统的CMOS传感器典型使用SOF,HSYNC(消隐),和PIXCLK信号

给Bayer或者YUV输出。智能CMOS传感器,一般在片上都有图像处理,并且通常都支持视频模式的传输,它们使用了内嵌的时序编码来取代了SOF和BLANK信号。

该时序编码依据的标准就是CCIR656.

39.3.1 门选通时钟模式(Gated Mode)

VSYNC,HSYNC,以及PIXCLK信号采用的都是门选时钟模式(脉冲门)

一个帧通常都开始于VSYNC的上升沿_||__,然后HSYNC信号开始变高HIGH,并且hold高电平整行数据(line)。并且当HSYNC信号是高电平的时候,pixel
clock才是合法的像素时钟,Data数据就是每HSYNC高电平期间,每个pixel clock上升沿读取的数据才是有效数据
。当HSYNC为低电平的时候

那么该行就结束了。pixel clock就是不合法了,并且CSI也停止从stream中接收数据。然后等待下一行的HSYNC重复开始,最后重复VSYNC进入下一帧。

39.3.2 非门选通时钟模式(non-Gated Mode)

该模式下,只有VSYNC和pixel clock两个信号使用到,HSYNC是被忽略的。

该模式下,总的时间是和gated mode一样的,区别只是在于HSYNC信号。HSYNC是被CSI忽略的,所有的pixel clock时钟所表示的数据都是合法的,其实区别就是Gate模式的pixel clock是一直开着的,而该模式下是和HSYNC同步进行了与门的操作,只保留了有效数据的pixel
clock.所以pixel clock

在非法数据时候是低电平。

39.3.3 CCIR656接口模式

CCIR656模式中,只有pixel clock和DATA[7:0]信号被使用到

起始帧VSYHC和BLANK消隐信号都被摄像头内直接内嵌的时序编码根据时序直接替换为有效数据流,不需要后期进行数据流的处理。
每一个有效行伴随SAV码激活,并且伴随EAV码结束。有一些方案,数字化的消隐信号是插在SAV和EAV之间的。

CSI会从数据流中进行编码以及滤出相关的时序,来还原VSYHC和HSYNC信号,来给内部使用,例如统计块控制和CSI-to-PrP互连时。

数据从直接转发,以原来连续的方式进行打包。因此,第一帧是跟在第二帧后面的(如果得到了2帧的话)。所以,该帧序是需要重新进行排序的,来还原原来的图像。

COF(Change of Field改变域/帧/场) ,它触发奇偶场的变化。中断服务会读取状态寄存器来确定是否是当前的帧。

依据CCIR656标准,图像必须是625/50帧的PAL,或者是525/60帧的NTSC格式。另外,图像还要交错成奇偶场, 垂直和行消隐数据都被填入特定的行。

数据必须是YCC422格式,每个像素包含了2 bytes,Y+Cr+Y+Cb.这些都是TV模式的设定。

该CSI仅仅支持PAL和NTSC制式。

从39-3图中可以看到,SOF是一个中断,时序编码timing codec中断产生,表示来了新的帧,SOV1和SOV2是表示奇偶域。

39-4,39-5两图表示具体的码和有效数据位。

39.3.4 CCIR656更进模式

CMOS摄像头系统提供的VGA或CIF分辨率,CIF标准中,奇偶场交错不用很严格的指出,因为CIF图像本身就很小,使用奇场或偶场就可以了。

一般是使用奇场,即Field 1.大多数的sensor都支持该CCIR模式,因此在CIF下,只要一个SOF中断进入新的一帧,而不需要SOV来判断奇偶场了。

39.3.5 CCIR656编码错误校验

依据CCIR编码表,SAV和EVAV之间的保护数据是被编码过的,使用这种方法,编码器可以纠正1-bit错误,可以检查2-bit的错误。

该特征只是在CSI的CCIR编码中,仅仅是奇偶交错模式中支持。



39.4 中断产生


39.4.1起始帧中断Start Of Frame Interrupt(SOF_INT)--- 一般都是VSYHC的上升沿开始,就触发

传统模式中,VSYHC信号来自传感器,因此SOF_INT中断是由VSYHC信号的上升沿或者是下降沿触发的。

CCIR模式中,SOF中断信息是从嵌入的代码检索出来的,并且产生SOF_INT的。

CCIR更进模式中,有下面两个SOF中断:

.内部VSYHC模式,SOF是从嵌入的代码检索出来

.外部VSYHC模式,来自外部摄像头输入的VSYHC信号,根据VSYHC的上升沿或下降沿来产生SOF.

39.4.2 结束帧中断End of Frame Interrupt(EOF_INT)

当一帧结束或者是一个在RxFIFO中的完整的帧数据被全部读出时,EOF中断就产生了,EOF并不在CSI的PrP模式中使用。

39.4.3 改变帧中断Change Of Field Interrupt(COF_INT)

该中断是用在CCIR奇偶域交错的模式下使用,该中断当Field 1 和Field 2交错的时候产生。F1_INT和F2_INT会产生

39.4.4 CCIR错误中断(ECC_INT)

CCIR中断仅仅用在CCIR奇偶场交错的模式下使用,因为如果没有奇偶场交错的话,不需要校验该帧的奇偶帧,如果有的话,那么如果是错误下,

还将该奇偶场拼接进行合成的话,那么画面肯定出问题了。

39.4.5 Data Packing Style数据打包格式

由于图像在采集的过程中,不同的端口大小,不同的阶段,数据的字节顺序是非常重要的。

为了能够灵活的对图像数据进行打包,CSI模块提供了数据交换空间,通过PACK_DIR和SWAP16_EN bits(包含在CSIRC1--CSI Control Register1中)

数据在提交给RxFIFO之前,利用设置PACK_DIR的bit位来进行打包


39.4.6 RxFIFO路径

Bayer数据是一个从图像传感器获得典型的行数据。数据宽度一定要通过软件转化为RGB空间或者是YUV空间的数据格式。

PACK_DIR bit设置为0,表示系统是小端,不是大端系统。使用P0,P1,P2,P3存放了打包了的数据内容,P0是第一个Data,依次,P3是最后一个data.

Page 1438

39.4.6.1 RGB565数据

(我们用的ov9660-0xd7[1:0]是选择YUV还是RGB模式,YUV=00,RGB=01)

RGB565数据是从图像传感器获得的处理过的数据,该数据可以直接显示到Video
Buffer
上面。

这个数据格式是16-bits的宽度,该数据可以直接通过CSI给Memory,然后Memory给LCDC.

39.4.6.2 RGB888数据格式 ----24位bit屏可用



总结:

MX27提供了一个非常专业的摄像头CSI接口,可以配置相关的口进行接口匹配。

我们的摄像头是ov9660,输出设定为YUV模式,因此,CSI获取的数据也是YUV格式的数据,因此还需要通过软件,将YUV的格式转化为

RGB565、RGB656、RGB888格式放到LCDC对应的Memory进行显示输出。


转化公式如下:

From RGB to YUV

Y = 0.299R + 0.587G + 0.114B

U = 0.492 (B-Y)

V = 0.877 (R-Y)

It can also be represented as:

Y = 0.299R + 0.587G + 0.114B

U = -0.147R - 0.289G + 0.436B

V = 0.615R - 0.515G - 0.100B

From YUV to RGB

R = Y + 1.140V

G = Y - 0.395U - 0.581V

B = Y + 2.032U

我的额外话题:

当前摄像头的参数我们基本上主要看:

1.摄像头像素是多少万的? 我这边罗列了一部分

2560*1960 =4915200,也就是通常说的500W

1600*1200 =1920000,也就是200W

1280*960 =1228800,也就是130W像素

640*480=307200,也就是30W

该像素可以放映到你的抓图上面的大小,该像素就是说明你的CMOS或者是CCD感光元件的像素点多少,可以想象在相同的面积上,数量越多,感光元件肯定要越小,感光元件小,那么图像的质量其实会变差,这个当然可以理解,但是从大的方面来说,只要镜头好,光源充足,那么效果也会变好,这样画面就比像素低的更加的细腻,所以高像素的好处就在这里。有种专业上的说法,是你的摄像头达到几线几线的?

2.帧率?也就是看你的最大分辨率的时候能够达到的最大帧率是多少?
OV系列来说,一般最大的分辨率下的帧率是30帧左右,也可以调频率进行提高。我们人的眼睛一般情况下,只要图像能够达到每秒30帧,那么利用眼睛的视觉残留,基本上可以感觉到图像是连续的,人眼的视觉残留时间超过30ms。
我调试摄像头的时候,可以发现有个非常严重的现象就是,加开夜光模式的时候,帧率掉的非常严重,这个估计就是DSP后期处理的时候,处理不了每秒30帧,只能往下降了,黑白的话效果好一些。

3. 镜头也是非常关键的,这个就要看不同的厂家,不同的显示效果

题外篇
我们买到的数码相机,现在都是1300W以上的,但是并不是说我们的摄像模式下可以达到这个分辨率,不信的话你可以去试试看,因为摄像要求比较高,需要达到每秒30帧以上,这个对DSP处理的负荷很重(RGB--颜色空间转换----H264编码/JPG编码),有人说我们为什么不利用数码相机的连续抓拍功能,这样既能保证分辨率又可以摄像,其实原理是一样的,抓拍也不可能高像素下达到每秒30帧。

还有,我们有一些非常高的像素是如何达到的呢?
其实现在的做法都是靠拼装,也就是说两块CCD感光模块分别进行摄像,然后在末端进行同步,这样就能提高像素,而且DSP的负荷不用太过进行提升,但是这样的拼装方法有一个缺陷就是,如果模块太多,那么在末端进行同步就很难把握了,所以现在一般都是2个CCD或者3个CCD,再多就不行了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: