cmos sensor (图像传感器) CSI接口

时间:2021-11-18 00:12:21

Chapter 39(Page 1429)
CMOS Sensor Interface(CSI)

 本章介绍了CMOS图像传感器接口(CSI)的架构,操作守则以及编程原型。该CSI接口能够使得MX27直接连接到外部的CMOS图像传感器上。
CMOS图像传感器分为两类,非智能和智能。非智能的这类图像传感器只是支持传统的摄像头时序(场同步和行同步),然后输出一个Bayer(拜耳)以及
统计的数据,而智能传感器支持CCIR656视频解码格式,并且还提供了额外的一些图像处理(例如:图像压缩,图像滤波预处理,以及多种数据输出格式)

CSI的包含的能力如下:
   .前端-配置逻辑接口以便支持大多数通用的可用的CMOS摄像头接口。
   .支持CCIR656视频接口以及传统的摄像头接口。
   .8位数据口,支持方便YCC,YUV,Bayer或者是RGB的数据格式输入。
   .完全可控的8-bit或16-bit数据到32-bit的FIFO进行打包
   .32*32大小的FIFO存储接受到的的图像像素数据,该FIFO可以通过可编程的IO或者是DMA进行读取.
   .后端-提供了直接到eMMA的预处理PrP块接口(PrP和PP组成了MX27图形加速器eMMA,PrP和PP能够用来给视频做预处理和后期处理,例如,放大,缩小,颜色转换)
   .提供sensor的可屏蔽中断源,该中断源也是中断可控的: 开始Frame,结束Frame,Change of Field,FIFO Full
   .提供给外部sensor用的,可配置的主时钟频率
   .由统计数据产生的自动曝光(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,再多就不行了。

 

 

 

Chapter 40 
Video Codec 
该视频编解码模块是MX27的多媒体视频处理器模块。参考图40-1.
40.1特征
视频编解码模块支持下面的多媒体视频流处理:
 .多媒体标准视频编码
 -MPEG4 part-II 简单类 编码、解码
 -H264/AVC 基本规范 编解码
 -h263 P3编解码
 -多方会议呼叫:最多可同时处理4路图像/位流的编解码
 -全双工多格式支持: 在做MPEG4编码的同时可以做H264的解码
 
 .Coding 工具
 ......
40.2
概括
视频整合了H264 BP,MPEG4 SP,H263 P3( annex I,J,K,T)视频处理标准
Video Codec使用两个总线接口协议:IP寄存器通道和AHB数据通道。它使用了3个内存:嵌入的内存,系统内部的内存,以及系统外部的内存。

 

 

 

 

 

1.文件位置:
  drivers/media/video/mxc/下有opl,output,capture三个文件
  包含的驱动有mx27_csi.ko opl.ko ov9650_cam.ko mx27_capture.ko
  
2.mx27_csi.c----------------mx27 CSI硬件
  opl.c---------------------mx27 旋转相关
  ov9650_cam.c--------------mx27 外接摄像头的驱动,用i2c驱动
  mx27_v4l2_capture.c+mxc_prpsw.c...------mx27_caputre.ko 一些应用程序,内存相关比较复杂