SoC : : Architecture/: : i.MX

i.MX 9 BSP Porting Guide - Supporting Cameras with CSI

Jay.P Morgan 2024. 4. 30. 23:41

 

  14.1  Introduction

 

  카메라 센서는 모든 i.MX에서 지원되지만, 다른 캡처 컨트롤러를 사용하여 구성됩니다. 자세한 내용은 i.MX Linux Reference Manual(IMXLXRM)의 'Video' 장에 있는 "Capture Overview" 섹션을 참조하세요. IPU가 있는 i.MX 6의 경우 CSI 인터페이스는 IPU를 통해 이루어지지만 다른 부분에서는 병렬 CSI 드라이버를 사용하여 CSI 인터페이스를 지원할 수 있습니다. i.MX 8QuadXPlus 및 i.MX 93의 경우 ISI 컨트롤러와 맞춤형 병렬 CSI 인터페이스 드라이버를 사용합니다.

  이 장에서는 다음 작업에 대해 설명합니다.
     • 테스트 모드에서 CSI 장치 구성(섹션 14.1.3)
     • i.MX 6Dual/6Quad/6Solo/6DualLite BSP에 새로운 CMOS 센서에 대한 지원 추가(섹션 14.2)
     • 카메라 버스를 처리하기 위한 I2C 인터페이스 설정 및 사용(14.3절)
     • 카메라 모듈 로드 및 테스트(14.3.1절)

  또한 IPU를 사용하여 i.MX에서 CSI 인터페이스를 구성하는 방법에 대한 참조 정보도 제공합니다.
     • 필수 소프트웨어 및 하드웨어
     • 참조 IPU-CSI 인터페이스 레이아웃(섹션 14.1.2)
     • CMOS 센서 인터페이스(IPU-CSI)(섹션 14.4.1)
     • 병렬 인터페이스(섹션 14.4.2)
     • CSI 테스트 모드(섹션 14.4.3)

 

 

 

  14.1.1  Required software

 

  i.MX BSP에서 모든 캡처 장치는 V4L2 표준을 지원합니다. 따라서 새로운 CMOS 센서를 포함하려면 CMOS-dependent layer만 수정하면 됩니다. 다른 모든 레이어는 V4L2와 작동하도록 개발되었습니다.

 

 

  14.1.2  i.MX 6Dual/6Quad/6Solo/6DualLite CSI interfaces layout

 

  다음 그림은 i.MX 6Solo/6DualLite SABRE-SD 보드의 카메라 인터페이스 레이아웃을 보여줍니다.

CSI0은 병렬 센서 입력 인터페이스로 사용됩니다. CSI1은 MIPI 센서 입력 인터페이스로 사용됩니다.

 

 

  14.1.3  Configuring the CSI unit in test mode

 

  이 섹션에서는, 체스 보드를 생성하는 새 카메라 드라이버의 예제 시나리오에 대해 테스트 모드를 사용합니다.

  TEST_GEN_MODE 레지스터를 설정하면, 장치는 디버깅에 사용되는 테스트 모드에 있습니다. CSI는 자동으로 프레임을 생성하여 대상 장치 중 하나로 보냅니다. 전송된 프레임은 검정색과 구성된 색상 사각형으로 구성된 체스판입니다. 구성된 색상은 PG_B_VALUE, PG_G_VALUE 및 PG_R_VALUE 레지스터를 사용하여 설정됩니다. DIV_RATIO 레지스터의 구성에 따라 데이터가 서로 다른 주파수로 전송될 수 있습니다.

  CSI가 테스트 모드에 있는 경우 다음 표에 설명된 설정과 유사한 구성으로 CSI 장치를 구성합니다. CSI 인터페이스 프로토콜, 형식 및 기능을 구성하려면 ipu_csi_init_interface()를 호출하세요.

 

 

  ※ 표 4. 테스트 모드 설정

Bit Field Value Description
CSI0_DATA_DEST 0x4 Destination is IDMAC through SMFC.
CSI0_DIV_RATIO 0x0 SENSB_MCLK rate = HSP_CLK rate.
CSI0_EXT_VSYNC 0x1 External VSYNC mode.
CSI0_DATA_WIDTH 0x1 8 bits per color.
CSI0_SENS_DATA_FORMAT 0x0 Full RGB or YUV444.
CSI0_PACK_TIGHT 0x0 Each component is written as a 16 bit word where the MSB is written to bit #15. Color extension is done for the remaining least significant bits.
CSI0_SENS_PRTCL 0x1 Non-gated clock sensor timing/data mode.
CSI0_SENS_PIX_CLK_POL 0x1 Pixel clock is inverted before applied to internal circuitry.
CSI0_DATA_POL 0x0 Data lines are directly applied to internal circuitry.
CSI0_HSYNC_POL 0x0 HSYNC is directly applied to internal circuitry.
CSI0_VSYNC_POL 0x0 VSYNC is directly applied to internal circuitry.

 

 

  14.2  새로운 CMOS 카메라 센서에 대한 지원 추가

 

  새로운 CMOS 카메라 센서에 대한 지원을 BSP에 추가하려면 이를 지원하는 장치 드라이버를 만드십시오.

  이 장치 드라이버는 초기화 루틴, 전원 켜기 순서, 전원 공급 장치 설정, 재설정 신호 및 기타 CMOS 센서에 필요한 기능을 구현하기 위한 최적의 위치입니다. 또한 카메라와 i.MX 6Dual/6Quad/6Solo/6DualLite 사이에 사용되는 병렬 프로토콜을 설정하는 최적의 위치이기도 합니다.

  i.MX 6Dual/6Quad/6Solo/6DualLite BSP에서 다음 세 단계를 수행하여 장치 드라이버를 만듭니다.
     1. Kconfig에 카메라 센서 항목을 추가합니다.
     2. 카메라 파일을 생성합니다.
     3. 새 카메라 센서에 대한 컴파일 플래그를 추가합니다.

이러한 단계는 다음 섹션에 자세히 설명되어 있습니다.

 

 

  14.2.1  Adding a camera sensor entry in Kconfig

 

  다음 위치에서 특정 카메라 드라이버를 선택합니다(다음 그림 참조).

Device Drivers  > Multimedia support  > Video capture adapters V4L platform
devices > MXC Video For Linux Camera  >  MXC Camera/V4L2 PRP Features support

 

 

Kconfig 카메라 파일에 새 카메라 센서 항목을 추가하려면 다음 단계를 수행하십시오.
1. 디스플레이 특정 폴더에 다음 명령을 입력합니다.

$ cd linux/drivers/media/video/mxc/capture

 

2. Kconfig 파일을 엽니다:

$ gedit Kconfig &

 

3. 표시하려는 항목을 추가합니다.

config MXC_IPUV3_CSI0_TEST_MODE
                    tristate "IPUv3 CSI0 test mode camera support"
                    depends on !VIDEO_MXC_EMMA_CAMERA
                    ---help---
                    If you plan to use the IPUv3 CSI0 in test mode with your  MXC system, say Y here.

 

 

  14.2.2  Creating the camera sensor file

 

카메라 센서 파일을 사용하면 카메라 초기화, 재설정 신호 생성, 전원 설정 및 모든 센서별 코드를 사용할 수 있습니다.

Note:  카메라 센서를 i.MX 6Dual/6Quad/6Solo/6DualLite 보드에 연결하기 전에 센서에 적절한 공급 전압이 공급되는지, 센서 데이터 인터페이스에 올바른 VIO 값이 있는지 확인하세요. 전원 공급 장치 불일치로 인해 CMOS 또는 i.MX 6Dual/6Quad/6Solo/6DualLite가 손상될 수 있습니다.

다음 경로에 필요한 패널별 기능이 포함된 파일을 생성합니다.

linux/drivers/media/video/mxc/capture/

 

  카메라 파일 ipuv3_csi0_chess.c에는 다음 표에 설명된 기능이 포함되어야 하며, 드라이버에 필요한 추가 기능 및 매크로가 포함될 수 있습니다.

  ※ 표 5. 필요 함수

Function name Function declaration Description
ioctl_g_ ifparm static int ioctl_g_ ifparm(struct v4l2_int_ device *s, struct v4l2_ ifparm *p) V4L2 sensor interface handler for VIDIOC_G_PARM ioctl.
ioctl_s_ power static int ioctl_s_
power(struct v4l2_int_device
*s, int on)
V4L2 sensor interface handler for VIDIOC_S_POWER ioctl. Sets sensor module power mode (on or off).
ioctl_g_parm static int ioctl_g_ parm(struct v4l2_int_device *s, struct v4l2_streamparm
*a)
V4L2 sensor interface handler for VIDIOC_G_PARM ioctl. Get streaming parameters.
ioctl_s_parm static int ioctl_s_ parm(struct v4l2_int_device *s, struct v4l2_streamparm
*a)
V4L2 sensor interface handler for VIDIOC_S_PARM ioctl. Set streaming parameters.
ioctl_g_fmt_ cap static int ioctl_g_fmt_ cap(struct v4l2_int_device *s, struct v4l2_format *f) Returns the sensor's current pixel format in the v4l2_format parameter.
ioctl_g_ctrl static int ioctl_g_ ctrl(struct v4l2_int_device *s, struct v4l2_control *vc) V4L2 sensor interface handler for VIDIOC_G_CTRL. If the requested control is supported, returns the control's current value from the video_control[] array. Otherwise, it returns EINVAL if the control is not supported.
ioctl_s_ctrl static int ioctl_s_ ctrl(struct v4l2_int_device *s, struct v4l2_control *vc) V4L2 sensor interface handler for VIDIOC_S_CTRL. If the requested control is supported, it sets the control's current value in HW (and updates the video_control[] array). Otherwise, it returns -EINVAL if the control is not supported.
ioctl_init static int ioctl_init(struct v4l2_int_device *s) V4L2 sensor interface handler for VIDIOC_INT_INIT. Initialize sensor interface.
ioctl_dev_ init static int ioctl_dev_ init(struct v4l2_int_device
*s)
Initializes the device when slave attaches to the master.
ioctl_dev_ exit static int ioctl_dev_ exit(struct v4l2_int_device
*s)
De-initializes the device when slave detaches to the master.

 

함수가 생성된 후 ipuv3_csi0_chess_slave 및 ipuv3_csi0_chess_int_device에 추가 정보를 추가합니다. 장치는 이 정보를 사용하여 V4L2 장치로 등록합니다.

다음 ioctl 함수 참조가 포함됩니다:

static struct v4l2_int_slave ipuv3_csi0_chess_slave = {
      .ioctls = ipuv3_csi0_chess_ioctl_desc,
      .num_ioctls = ARRAY_SIZE(ipuv3_csi0_chess_ioctl_desc),
};
static struct v4l2_int_device ipuv3_csi0_chess_int_device = {
   ...
      .type = v4l2_int_type_slave,    ...
};
static int ipuv3_csi0_chess_probe(struct i2c_client *client,const struct
 i2c_device_id *id) {
   ...
      retval = v4l2_int_device_register(&ipuv3_csi0_chess_int_device);
   ...
}
 

CSI 테스트 모드를 위한 BSP를 준비하려면 다른 파일도 수정해야 합니다. 이미지 변환기가 색 공간 변환을 수행하지 않고 CSI 테스트 모드 생성기에서 받은 입력이 메모리로 직접 전송되도록 ipu_bg_overlay_sdc.c 파일에서 sensor pixel format을 YUV에서 RGB565로 변경합니다. 또한 mxc_v4l2_capture.c를 수정하여 ipuv3_csi0_chess.c 파일의 ipuv3_csi0_chess_init_mode() 함수에 의해 설정된 CSI 테스트 모드 설정을 유지합니다.


  14.2.3 새 카메라에 대한 컴파일 플래그 추가

 

  카메라 파일이 생성되고 Kconfig 파일에 새 카메라에 대한 항목이 있으면 Makefile을 수정하여 컴파일 중에 새 카메라 모듈을 생성합니다.

  Makefile은 새 카메라 파일 및 Kconfig와 동일한 폴더(linux/drivers/media/video/mxc/capture)에 있습니다.

     1. i.MX 6Dual/6Quad/6Solo/6DualLite 카메라 지원 폴더에 다음을 입력합니다.

$ cd linux/drivers/media/video/mxc/capture

 

     2.    Open the i.MX 6Dual/6Quad/6Solo/6DualLite camera support Makefile.

$ gedit Makefile &

 

     3.    Add the CMOS driver compilation entry to the end of the Makefile.

ipuv3_csi0_chess_camera-objs := ipuv3_csi0_chess.o obj-$(CONFIG_MXC_IPUV3_CSI0_TEST_MODE) += ipuv3_csi0_chess_camera.o

 

 

  커널 객체는 ipuv3_csi0_chess.c 파일을 사용하여 생성됩니다. 출력에는 다음 파일이 있어야 합니다.
     • ipuv3_csi0_chess_camera.mod.c
     • ipuv3_csi0_chess.o
     • ipuv3_csi0_chess_camera.o
     • ipuv3_csi0_chess_camera.mod.o
     • ipuv3_csi0_chess_camera.ko

 

 

  14.3  I2C 인터페이스 사용하기

 

  많은 카메라 센서 모듈에는 초기화 및 구성을 위해 동기식 직렬 인터페이스가 필요합니다.

  이 섹션에서는 linux/drivers/media/video/mxc/capture/ov5642.c 파일을 예제 코드로 사용합니다. 이 파일에는 센서 구성을 위해 I2C 인터페이스를 사용하는 드라이버가 포함되어 있습니다.

  I2C 인터페이스가 실행된 후 카메라 버스를 처리할 새 I2C 장치를 만듭니다. 카메라 센서 파일(다음 예제 코드에서는 mycamera.c)이 ov5642.c와 동일한 폴더에 있는 경우 코드는 다음과 같습니다.

struct i2c_client * mycamera_i2c_client; static s32 mycamera_read_reg(u16 reg, u8 *val); static s32 mycamera_write_reg(u16 reg, u8 val); static const struct i2c_device_id mycamera_id[] = {
   {"mycamera", 0},
   {},
};
MODULE_DEVICE_TABLE(i2c, mycamera_id);
static struct i2c_driver mycamera_i2c_driver = {
      .driver = {
              .owner = THIS_MODULE,
        .name  = "mycamera",
              },
      .probe  = mycamera_probe,
      .remove = mycamera_remove,
      .id_table = mycamera_id,
};

static s32 my_camera_write_reg(u16 reg, u8 val)
{
   u8 au8Buf[3] = {0};    au8Buf[0] = reg >> 8;    au8Buf[1] = reg & 0xff;    au8Buf[2] = val;
   if (i2c_master_send(my_camera_i2c_client, au8Buf, 3) < 0) {       pr_err("%s:write reg error:reg=%x,val=%x\n",__func__, reg, val);
      return -1;
   }
   return 0;
}

static s32 my_camera_read_reg(u16 reg, u8 *val)
{
   u8 au8RegBuf[2] = {0};    u8 u8RdVal = 0;    au8RegBuf[0] = reg >> 8;    au8RegBuf[1] = reg & 0xff;
   if (2 != i2c_master_send(my_camera_i2c_client, au8RegBuf, 2)) {
      pr_err("%s:write reg error:reg=%x\n",__func__, reg);
      return -1;
   }
   if (1 != i2c_master_recv(my_camera_i2c_client, &u8RdVal, 1)) {//  @ECA       pr_err("%s:read reg error:reg=%x,val=%x\n",__func__, reg, u8RdVal);
   return -1;
   }
   *val = u8RdVal;    return u8RdVal;
}

static int my_camera_probe(struct i2c_client *client, const struct i2c_device_id
 *id)
{
   ...
   my_camera_i2c_client = client;
   ...
}
static __init int mycamera_init(void)
{    u8 err;
   err = i2c_add_driver(&mycamera_i2c_driver);
   if (err != 0)
      pr_err("%s:driver registration failed, error=%d \n",__func__, err);
   return err;
}
static void __exit mycamera_clean(void)
{
   i2c_del_driver(&mycamera_i2c_driver);
}
module_init(mycamera_init); module_exit(mycamera_clean);

 

전체 예제 코드는 ov5642.c를 확인하세요.
새 I2C 장치 드라이버를 생성한 후 플랫폼 dts 파일에 새 I2C 노드를 추가합니다.
이 시점에서 dts 파일을 수정하여 사용된 CSI 인터페이스(CSI0 또는 CSI1), MCLK 주파수 및 모듈과 관련된 일부 전원 공급 장치 설정과 같은 카메라에 대한 기능을 지정할 수 있습니다.
이제 다음을 사용하여 카메라 센서 파일의 센서를 읽고 쓸 수 있습니다.

retval = mycamera_write_reg(RegAddr, Val); retval = mycamera_read_reg(RegAddr, &RegVal);

 

 

 

  14.3.1  카메라 모듈 로드 및 테스트

 

이 섹션의 예와 같이 카메라 드라이버가 커널 모듈로 생성된 경우 카메라 요청을 시도하기 전에 모듈을 로드해야 합니다.
Makefile 정보에 따르면 카메라 모듈 이름은 ipuv3_csi0_chess_camera.ko입니다.
테스트 모드에서 V4L2 카메라 인터페이스와 CSI를 로드하려면 다음 명령을 실행하십시오.

root@ /unit_tests$ modprobe ipuv3_csi0_chess_camera

 

video0 입력(카메라)을 테스트하기 위해 mxc_v4l2_overlay 테스트가 BSP에 포함되어 있습니다. imx-test 패키지도 포함되어 있는 경우 단위 테스트 폴더를 열고 테스트를 실행합니다.

 

root@ ~$ cd /unit_tests/
root@ /unit_tests$ ./mxc_v4l2_overlay.out

 

 

  14.4  추가 reference information

 

  14.4.1 i.MX 6Dual/6Quad/6Solo/6DualLite에서 지원되는 CMOS 인터페이스

 

  i.MX 6Dual/6Quad/6Solo/6DualLite의 IPU(이미지 처리 장치) 모듈 일부인 카메라 센서 인터페이스는 CMOS 센서 인터페이스를 처리합니다. i.MX 6Dual/6Quad/6Solo/6DualLite IPU는 CSI 포트를 통해 두 개의 카메라 장치를 처리할 수 있습니다. 하나는 CSI0 포트에 연결되고 다른 하나는 CSI1 포트에 연결됩니다. 두 CSI 포트는 모두 동일하며 다양한 원시/스마트 센서 및 TV 디코더에 대한 글루리스 연결을 제공합니다.

각 카메라 포트에는 다음 기능이 포함되어 있습니다.
     • 병렬 인터페이스
        – 최대 20비트 입력 데이터 버스
        – 각 주기의 단일 값
        – 프로그래밍 가능한 극성
     • 다양한 데이터 형식
        – 인터리브된 색상 구성 요소, 값당 최대 16비트(구성 요소)
        – 입력 Bayer RGB, Full RGB 또는 YUV 4:4:4, YUV 4:2:2 구성요소 순서: UY1VY2 또는 Y1UY2V, 회색조 및 일반 데이터
     • 스캔 순서: 프로그레시브 또는 인터레이스
     • 프레임 크기: 최대 8192 x 4096픽셀
     • 동기화 비디오 모드
        – 센서는 픽셀 클록(PIXCLK) 및 동기화 신호의 마스터입니다.
        – 동기화 신호는 다음 방법 중 하나를 사용하여 수신됩니다.
        – 프로그래밍 가능한 펄스 폭과 극성을 갖춘 전용 제어 신호(VSYNC, HSYNC).
        – 코드 값과 위치의 유연성을 갖춘 BT.656 프로토콜을 느슨하게 따르는 데이터 스트림에 내장된 제어.
        – 이미지 캡처는 MCU 또는 외부 신호(예: 기계식 셔터)에 의해 트리거됩니다.
        – 동기화된 스트로브는 센서 및 카메라 주변 장치(플래시, 기계식 셔터...) 등 최대 6개 출력에 대해 생성됩니다.
     • 프레임을 주기적으로 건너뛰어 프레임 속도를 줄입니다.

  자세한 내용은, i.MX 6Dual/6Quad Applications Processor Reference Manual (IMX6DQRM) 또는 i.MX 6Solo/6DualLite Applications Processor Reference Manual (IMX6SDLRM) 의 " Image Processing Unit (IPU) " 장을 참조하세요. 다음 그림은 블록 다이어그램을 보여줍니다.

 

  여러 센서를 각 CSI에 연결할 수 있습니다. 동시 기능(데이터 전송용)은 다음과 같이 지원됩니다.
     • 두 센서는 각각 다른 포트를 통해 독립적으로 데이터를 보낼 수 있습니다.
     • 실시간 처리를 위해 하나의 스트림을 VDI 또는 IC로 전송하고 다른 하나는 시스템 메모리로 직접 전송할 수 있습니다.
  카메라 포트에서 지원하는 입력 속도는 다음과 같습니다.
     • 피크: 최대 180MHz(값/초).
     • YUV 4:2:2의 평균(블랭킹 오버헤드 35% 가정).
        – 한 주기의 픽셀(BT.1120): 최대 135MP/초(예: 15fps에서 9Mpixels).
        – 2주기의 픽셀(BT.656): 최대 67MP/초(예: 15fps에서 4.5M픽셀).
     • 실시간 처리는 더 낮은 입력 속도로 제한될 수 있습니다.
  필요한 경우 USB 포트를 통해 추가 카메라를 연결할 수 있습니다.

 

 

  14.4.2 i.MX 6Dual/6Quad/6Solo/6DualLite CSI 병렬 인터페이스

 

  CSI는 센서로부터 데이터를 획득하고, 데이터와 제어 신호를 IPU 클록(HSP_CLK)에 동기화하고, 데이터를 IC 및/또는 SMFC로 전송합니다.

  다음 그림에 표시된 대로 CSI 병렬 인터페이스는 센서에서 클록 입력 참조로 사용되는 클록 출력(MCLK)을 제공합니다. i.MX 6Dual/6Quad/6Solo/6DualLite는 프로세서와 카메라 모듈 간의 다른 인터페이스를 통해 비디오 또는 정지 이미지를 요청합니다. 대부분의 상황에서 인터페이스는 I2C와 같은 동기식 직렬 인터페이스입니다. 프레임이 요청된 후 카메라 모듈은 CSI 버스를 제어하고 동기화 신호 VSYNC, HSYNC, DATA_EN 및 PIXCLK를 사용하여 이미지 프레임을 i.MX 6Dual/6Quad/6Solo/6DualLite로 보냅니다. 카메라 센서는 MCLK 입력을 기반으로 PIXCLK를 생성합니다.

 

  병렬 인터페이스에서는 사이클당 두 개의 값이 도착하는 BT.1120 모드를 제외하고 각 클럭에 단일 값이 도착합니다. 각 값은 DATA_WIDTH 구성에 따라 8~16비트 폭이 될 수 있습니다. DATA_WIDTH가 N으로 구성되면 20-N LSB 비트가 무시됩니다.

 

  따라서 최대 픽셀 너비가 16(CSI0_DAT[19:4])이므로 BT.1120 모드를 사용하지 않는 한 CSI0_DAT[3:0]이 필요하지 않습니다. 확장 포트 2에는 CSI0_DAT[19:4]가 포함되어 있지만

  CSI0_DAT[19:10]은 CSI 데이터 버스(10비트 폭 데이터)에 사용됩니다. CSI0_DAT[9:4]는 다른 인터페이스와 공유되며 오디오 및 I2C에 사용됩니다.

  CSI는 SENS_DATA_FORMAT 구성에 따라 여러 데이터 형식을 지원할 수 있습니다. 데이터 형식이 YUV이면 데이터가 YUV422 형식으로 도착하더라도 CSI의 출력은 항상 YUV444입니다.

  입력 극성은 다음 레지스터를 사용하여 구성할 수 있습니다.
     • SENS_PIX_CLK_POL
     • DATA_POL
     • HSYNC_POL
     • VSYNC_POL

다음 표에서는 i.MX 6Dual/6Quad/6Solo/6DualLite에서 제공하는 카메라 병렬 인터페이스에 대해 설명합니다.

  ※ 표 6. CSI0 병렬 인터페이스 신호

Signal IPU Pin Description
MCLK CSI0_MCLK Master clock (Output)
PIXCLK CSI0_PIXCLK Pixel clock
VSYNC CSI0_VSYNC Vertical synchronization signal
HSYNC CSI0_HSYNC Horizontal synchronization signal
DATA_EN CSI0_DATA_EN Data enable or data ready
DATA[19:10] CSI0_DAT [19:10] Pixel data bus, optional to [19:4]

 

  다음 섹션에서는 타이밍 데이터 모드 프로토콜이 이러한 신호를 사용하는 방법을 설명합니다. 각 타이밍 데이터 모드 프로토콜에서 모든 신호가 사용되는 것은 아닙니다.

 

 

  14.4.3 타이밍 데이터 모드 프로토콜

 

  CSI 인터페이스는 다음 네 가지 타이밍/데이터 프로토콜을 지원합니다.
     • gated monde

        - 게이트 모드에서 VSYNC는 프레임의 시작을 나타내는 데 사용되고, HSYNC는 원시의 시작을 나타내는 데 사용됩니다. 센서 시계는 항상 똑딱거리고 있습니다.
     • non-gated mode

         - Non-gated 모드에서는 VSYNC를 사용하여 프레임의 시작을 표시하고 HSYNC는 사용하지 않습니다. 센서 시계는 데이터가 유효한 경우에만 작동합니다.
     • BT.656(프로그레시브 및 인터레이스)

        - BT.656 모드에서 CSI는 ITU-R BT.656 권장 사항에 따라 작동합니다. 타이밍 참조 신호(프레임 시작, 프레임 끝, 라인 시작, 라인 끝)는 데이터 버스 입력에 내장됩니다.
     • BT.1120(프로그레시브 및 인터레이스)
        - BT1120 모드에서 CSI는 ITU-R BT.1120 권장 사항에 따라 작동합니다. 타이밍 참조 신호(프레임 시작, 프레임 끝, 라인 시작, 라인 끝)는 데이터 버스 입력에 내장됩니다.

자세한 내용은 i.MX 6Dual/6Quad Applications Processor Reference Manual (IMX6DQRM) 또는 i.MX 6Solo/6DualLite Applications Processor Reference Manual (IMX6SDLRM)를 참조하세요.