分享

串行成像控制总线SCCB的应用研究

 panhaosun 2011-04-13

吕涛

(西南科技大学网络信息中心,四川 绵阳 621002

摘要: 本文主要基于CMOS图像传感器的串行成像控制总线(SCCB)的使用方法进行研究,详细阐述了该总线的引脚功能,数据传输和控制时序。文中通过程序代码片段说明了如何利用ARM CPU GPIO使用SCCB总线。

关键词:CMOS图像传感器;SCCB; ARM CPU GPIO

中图分类号:   文献标识码:A

Application Research of Serial Camera Control Bus

LuTao 

Network Information Center of South-west University of Science and Technology

Abstract: The paper mainly discusses the application research of serial camera control bus (SCCB) based on CMOS image sensor. It depicts the pin function,data transmission and Timing Diagram of SCCB.In the paper, the code fragment shows how to use SCCB by ARM CPU GPIO.

Key words: CMOS image sensor; SCCB; ARM CPU GPIO

1.  概述

CMOS图像传感器是近年发展起来的一种新型固体图像传感器,由于采用了相同的CMOS工艺,因此可以将像素阵列与驱动电路和信号处理电路等集成在同一块芯片上。而且,现在越来越多的CMOS图像传感器芯片将A/D集成进去,因此除了模拟视频输出外,还可直接输出数字视频信号和同步信号。这样,利用CMOS图像传感器构成图像采集系统时,传统图像采集卡的A/D、同步分离等电路就没有必要了,而仅需设计适当的接口电路。现在,由CMOS图像传感器构成的所谓“单芯片成像系统”(Camera on Chip)已在包括视频图像获取和数字化、视频会议、可视电话、视频电子邮件、多媒体应用、数字相机等诸多领域有了广泛的应用和发展潜力。

美国的OmniVision(OV)技术有限公司是世界上较大的和主要的CMOS传感器供应商。OV公司定义和配置了一种串行成像控制总线SCCB(Serial Camera Control Bus),它是一种3线串行总线,可以控制大多数OV公司的CMOS图像传感器。为减少芯片封装,SCCB可以在2线串行模式下工作。

OV系列传感器可以通过串行成像控制总线SCCB接口提供图像的全帧采样,窗口采样并且可以完全由用户来控制图像质量、格式和输出数据流。所有的图像处理功能包括曝光控制、gamma、白平衡、色彩饱和度、色调控制等均可通过SCCB接口编程实现。

OV系列传感器通常有两种控制方法:上电重启方式和SCCB接口控制方式。上电重启方式是复用芯片的视频数据总线。在芯片上电复位后,视频数据引脚初始化为三态引脚,从外部读入控制信息设置芯片工作状态,在2048个时钟周期后视频数据总线恢复正常功能。

SCCB接口控制方式是通过SCCB接口,对状态控制寄存器直接进行读写控制,达到需要的工作状态。从应用的角度而言,SCCB 方式更加灵活一些,但该方式下传感器必须工作在从模式(Slave Mode)下。本文仅讨论SCCB接口控制方式。

当传感器仅仅作为一个从设备(Slave Device)工作,与其连接的必须是主设备(Master Device)。一个主设备通过SCCB连接和控制至少一个从设备。一个3线SCCB除了提供时钟(SIO_C)和数据(SIO_D)以外还有一个片选信号SCCB_E(图1所示),使其可以连接多个从设备。经过修改的2线串行总线则省略了片选信号SCCB_E,因此它只能通过SCCB接口连接一个从设备(图2所示)。

 

1  SCCB 3线连接图

 

2  SCCB 2线连接图

3线连接方式相比,2线连接方式要实现SCCB的通信则主设备必须能够维持总线上的数据线(SIO_D)在三态状态;如果主设备不能维持数据线在三态状态,那么另外一个可选择的方法就是过渡为由从摄像芯片(slave CAMERACHIP)来声明通信。

 

21  SCCB_E

SCCB_E信号是一个必须由主设备驱动的单向,低电平有效的控制信号。它指示了数据传输的开始和结束。SCCB_E从高电平变为低电平表示一个传输的开始,SCCB_E从低电平变为高电平表示一个传输的结束。在数据传输期间,SCCB_E必须维持在逻辑0,当SCCB_E为逻辑1时意味这此时总线空闲。

 

22  SIO_C

SIO_C信号是一个必须由主设备驱动的单向控制信号。指出了每一个传输位。当总线空闲时,主设备必须驱动SIO_C为逻辑1。在传输开始后,当SIO_C被驱动为逻辑0,则一个数据传输开始。在数据传输过程中SIO_C的一个逻辑1指示了一个单独的已传输位。因此,SIO_D只能在SIO_C被驱动为0时出现。

 

23  SIO_D

SIO_D信号是一个双向数据信号,可以被主设备或从设备驱动。当总线空闲时该信号可以保持悬空或三态。SIO_C的一个逻辑1代表了一位传输,因此SIO_D仅当SIO_C被驱动为逻辑0时出现。

 

3  数据传输

31  传输开始

SCCB_E由高电平变为低电平表示数据传输的开始(如图3所示)。但是在声明数据传输开始之前,主设备必须驱动SIO_D为逻辑1以取得总线的控制权,这样做可以防止在总线上传输数据之前传播一个未知状态。在开始传输阶段定义了两个时间参数: SIO_D的预处理(pre-charge)时间,即声明SCCB_E有效前SIO_D必须为逻辑1的这段时间。 的最小值是15ns SCCB_E的预活动时间(pre-active

),即SCCB_E 必须在SIO_D 变为低电平之前声明传输开始的时间。

3  3线传输开始示意图

以下代码片段说明了利用ARM CPU S3C4510BGPIO来模拟SIO_CSIO_D 作为主设备和图像传感器进行2线连接,其中P0模拟数据SIO_DP1模拟时钟SIO_C。若无特别声明,后面的代码均在此基础上建立。

#define IOPMOD  (*(volatile unsigned *)0x3ff5000)

#define IOPDATA  (*(volatile unsigned *)0x3ff5008)

void start()

{

   IOPMOD = 0x03; /*set gpio P0 and P1 output mode*/

   IOPDATA = IOPDATA | 0x01;/*data = 1*/

  delay(1);

  IOPDATA = IOPDATA | 0x02;/*clk = 1*/

  delay(5);

  IOPDATA = IOPDATA & 0xfe;/*data = 0*/

  delay(5);    

}

32  传输结束

SCCB_E由低电平变为电高平表示数据传输的结束(如图4所示)。在结束传输阶段定义了两个时间参数: 定义为SIO_D后处理(post-charge)时间,即SCCB_E在声明传输结束以后SIO_D必须保持为逻辑1的时间。 的最小值是15ns 定义为SCCB_E的后活动(post-active)时间,即在SIO_D声明传输结束以后SCCB_E必须保持为逻辑0的时间,它的最小值是0ns

4  3线传输结束示意图

2线连接SCCB传输结束代码参考如下:

void stop()

{

   IOPMOD = 0x03;           /*set gpio output mode*/

  IOPDATA = IOPDATA & 0xfe;/*data = 0*/

  delay(1); 

  IOPDATA = IOPDATA | 0x02;/*clk = 1*/    

  delay(5);

  IOPDATA = IOPDATA | 0x01;/*data = 1*/

  delay(4);

  IOPDATA = IOPDATA & 0xfd;/*clk = 0*/

   }

 

33  传输周期(Transmission Cycle

一个基本的数据传输我们称之为一个阶段(Phase),SCCB共规定了三种传输:

3-阶段写传输周期

2-阶段写传输周期

2-阶段读传输周期

1)传输阶段( Transmission Phases)

一个传输阶段总共包括9位,其中分为8位数据和第9位。8位数据是顺序存放并且高位在前。第9位可以是数据无关位(Dont-Care Bit)或数据响应位(NA bit),具体使用哪种则根据数据传输是读事务还是写事务。

5  传输阶段

 

23-阶段写传输周期

3-阶段写传输周期是一个完整的写周期,它可以使主设备向特定的从设备写一个字节的数据。主设备通过ID地址访问指定的从设备,子地址指定了从设备中的寄存器位置,主设备通过写8位数据来覆盖指定的地址。3个阶段的第9位为数据无关位,默认为0。从图5中我们可以看出对于3-阶段写传输周期,阶段1ID地址,阶段2为子地址,阶段3为写数据。

32-阶段写传输周期

2-阶段写传输周期后紧跟着是2-阶段读传输周期。主设备希望能够通过2-阶段读传输周期读取从设备中指定子地址的数据,2-阶段写传输周期的目的就在于确定从设备的子地址。它的第九位将是数据无关位。从图5中我们可以看出对于2-阶段写传输周期,阶段1ID地址,阶段2为子地址。

42-阶段读传输周期

因为2-阶段读传输周期不能确定从设备的子地址,所以在它之前必须有一个3-阶段写传输周期或2-阶段写传输周期。2-阶段读传输周期包括读取的8位数据和第九位数据无关位或数据响应位。主设备须驱动数据响应位为逻辑1。从图5中我们可以看出对于2-阶段读传输周期,阶段1ID地址,阶段2为读取的数据。

需要特别注意的是ID地址。每个从设备都有一个唯一的ID地址。ID地址由7位组成,顺序从第7位到第1位,一共可以有128个不同的地址。第8位是读写选择位,其作用是决定了当前传输周期的方向。逻辑0代表了写周期,逻辑1代表了读周期。该阶段的第9位必须为数据无关位。如果主设备只连接了一个从设备,我们可以使用从设备的默认地址,当地址为0x42时是写周期,为0x43时是读周期。

子地址通常是指从设备的内部寄存器地址,通过3-阶段写传输周期可以覆盖从设备的指定寄存器的值,以此实现对从设备的控制和设置。详细的控制和设置信息可以参考各个芯片的数据手册。

数据无关位是一个主设备声明传输(ID地址,子地址和写数据)中的第9位。其目的是指示一个传输阶段的完成。在传输过程中,主设备不会检测传输中出现的错误,应此从设备提供了一个记录检测数据无关位的内部寄存器。一个从设备定义了一个字节的寄存器作为数据无关位的状态寄存器,它的默认值是0x55。假设在传输过程中没有发生任何错误,那么它的值将保持不变。如果从设备没有接收到数据无关位,那么寄存器的值将变为0x54。主设备通过查询数据无关位的状态寄存器来决定是否进行下一个传输阶段。

3-阶段写传输周期参考代码如下:

void send_byte(char date)

{

       char BitCnt;

      IOPMOD = 0x03; /*set gpio output mode*/

    for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8*/

    {    

                 if((date<<BitCnt)&0x80)

                 {

                        IOPDATA = IOPDATA | 0x01;/*data = 1*/   /*判断发送位*/

                }

                else 

                {

                       IOPDATA = IOPDATA & 0xfe;/*data = 0*/              

                 }

                 delay(1);

                 IOPDATA = IOPDATA | 0x02;/*clk = 1*/    

                 delay(5);

                 IOPDATA = IOPDATA & 0xfd;/*clk = 0*/

      }

         /*don't care bit*/

           delay(2); 

          IOPDATA = IOPDATA & 0xfe;/*data = 0*/              

          delay(2);

          IOPDATA = IOPDATA | 0x02;/*clk = 1*/

         delay(3);

        IOPDATA = IOPDATA & 0xfd;/*clk = 0*/

     delay(2);

}

4  控制时序

下面通过对SCCB的时序图说明进一步详细阐述SCCB的工作过程。若无特殊说明,所涉及的数据输出方向是主设备(ARM CPU)将数据写入从设备(CMOS图像传感器),数据输入方向是主设备(ARM CPU)将数据读出从设备(CMOS图像传感器)。

SIO_C的最大工作频率为400KHz,此时要求传感器的时钟至少不低于10MHzSIO_C维持高电平(tHIGH)时间不少于600ns,维持低电平(tLOW)时间不少于1.3us。此外SCCB上升沿时间(tR)和下降沿时间(tF)均不能大于300ns

SIO_C为高电平,SIO_D产生一个下降沿时为传输开始信号,开始信号建立时间(tSU:STA)不少于600ns,开始信号维持时间(tHD:STA)不少于600ns

传输开始以后,分数据输出和数据输入。数据输入时,数据输入建立时间(tSU:STA)不低于100ns,对数据输入维持时间(tHD:DAT)没有任何限制。数据输出时,当SIO_C为低电平时数据位有效,当SIO_D为高电平时数据位发送。数据有效时间(tAA)不小于100ns并且不大于900ns,数据输出维持时间(tDH)不少于50ns

传输结束后,需要发送一个结束信号。当SIO_C为高电平时,SIO_D产生一个上升沿即为结束信号。结束信号建立时间(tSU:STO)不小于600ns。结束信号产生后总线被释放,SIO_C被置为高电平,此时表示总线空闲。总线空闲时间距离下一个开始信号时间(tBUF)不小于1.3us

 

6  SCCB时序图

      

由此可见SCCB在整个数据传输过程中对于时序的要求还是比较严格的。因此在使用GPIO模拟SCCB的时候,需要先确定GPIO的工作频率,因为不同工作频率的ARMGPIO的工作频率是不同的。最简单的方法是编程使GPIO直接产生方波而不增加任何延时,通过示波器来观测。实际情况是GPIO的工作频率可能会大于400KHz,因此需要延时而达到准确控制时序的目的。在设计延时的时候最好以整数倍ns为单位。在无法准确计算延时的情况下,在程序中加入最简单的算术运算可能会有较好的效果。例如:

void delay(int value)

{

       int i;

       for(i = 0; i < value; i++);

}

 

 

 

参考文献:

[1]  OmniVision Technologies Inc.OV7620[Z]. CA94086 U.S.A.: OmniVision

Technologies Inc., 2002,(5):1-16

[2]  OmniVision Technologies Inc.OmniVision Serial Camera Control Bus (SCCB) Functional Specification[Z]. U.S.A.: OmniVision Technologies Inc., 26 February 2003

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多