정보
IMXBSPPG
Rev. LF5.15.5_1.0.0, 31 March 2022를 기준으로 작성
Chapter 14 Supporting Cameras with CSI
14.1 Introduction
이 장에서는 새로운 카메라 센서에 대한 지원을 포함하는 확장 커넥터의 사용 방법에 대한 정보를 제공한다.
카메라 센서는 모든 i.MX에서 지원되지만, 서로 다른 캡처 컨트롤러를 사용하여 구성된다. 자세한 내용은 i.MX Linux Reference Manual (IMXLXRM)의 "Video" 장의 "Capture Overview" 섹션을 참조한다. IPU가 있는 i.MX 6의 경우, CSI 인터페이스는 IPU를 통해 이루어지지만 다른 부분에서는 Parallel CSI 드라이버를 사용하여 CSI 인터페이스를 지원한다. i.MX QuadXPlus의 경우, ISI 컨트롤러와 사용자 정의 Parallel CSI 인터페이스 드라이버를 사용한다.
이 장에서는 아래 작업에 대해 설명한다 :
- 테스트 모드에서 CSI 장치 구성 (14.1.3 Configuring the CSI unit in test mode)
- i.MX 6Dual/6Quad/6Solo/6DualLite BSP에서 새로운 CMOS 센서에 대한 지원 추가 (14.2 Adding support for a new CMOS camera sensor)
- 카메라 버스를 처리하기 위해 I2C 인터페이스 설정 및 사용 (14.3 Using the I2C Interface)
- 카메라 모듈 로드 및 테스트 (14.3.1 Loading and testing the camera module)
또한 IPU를 사용하는 i.MX에서 CSI 인터페이스 구성에 대한 레퍼런스 정보를 제공한다 :
- 필요한 소프트웨어와 하드웨어
- 레퍼런스 IPU-CSI 인터페이스 레이아웃 (14.1.2 i.MX 6Dual/6Quad/6Solo/6DualLite CSI interfaces layout)
- CMOS 센서 인터페이스 (IPU-CSI) (14.4.1 CMOS interfaces supported by the i.MX 6Dual/6Quad/6Solo/6DualLite)
- Parallel 인터페이스 (14.4.2 i.MX 6Dual/6Quad/6Solo/6DualLite CSI parallel interface)
- CSI 테스트 모드 (14.4.3 Timing data mode protocols)
14.1.1 Required software
i.MX BSP에서, 모든 캡처 디바이스는 V4L2 표준을 지원한다. 따라서 새로운 CMOS 센서를 포함하도록 CMOS에 종속된 레이어만 수정하면 된다. 다른 모든 레이어는 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 장치를 구성한다. ipu_csi_unit_interface()를 호출하여 CSI 인터페이스 프로토콜, 형식(format), 기능(feature)을 구성한다.
Table 3. Setting for Test Mode
Bit Field | Value | Description |
CSI0_DATA_DEST | 0x4 | 대상은 SMFC를 통한 IDMAC이다. |
CSI0_DIV_RATIO | 0x0 | SENSB_MCLK rate = HSP_CLK rate. |
CSI0_EXT_VSYNC | 0x01 | 외부 VSYNC 모드 |
CSI0_DATA_WIDTH | 0x01 | 색상당 8비트 |
CSI0_SENS_DATA_FORMAT | 0x0 | 전체 RGB나 YUV444 |
CSI0_PACK_TIGHT | 0x0 | 각 컴포넌트는 MSB가 비트 #15에 저장되는 16비트 word로 저장된다. 나머지 최하위 비트에 대해 색상 확장이 수행된다. |
CSI0_SENS_PRTCL | 0x1 | non-gated clock sensor timing/data mode |
CSI0_SENS_PIX_CLK_POL | 0x1 | 픽셀 clock은 내부 회로에 적용되기 전에 반전된다. |
CSI0_DATA_POL | 0x0 | 데이터 라인은 내부 회로에 직접 적용된다. |
CSI0_HSYNC_POL | 0x0 | HSYNC는 내부 회로에 직접 적용된다. |
CSI0_VSYNC_POL | 0x0 | VSYNC는 내부 회로에 직접 적용된다. |
14.2 Adding support for a new CMOS camera sensor
새로운 CMOS 카메라 센서에 대한 지원을 BSP에 추가하려면, 이를 지원하는 디바이스 드라이버를 만든다.
이 디바이스 드라이버는 초기화 루틴, 파워업 시퀀스, 전원 공급 장치 설정, 리셋 신호, CMOS 센서에 필요한 기타 기능을 구현하기 위한 최적의 장소이다. 또한 카메라와 i.MX 6Dual/6Quad/6Solo/6DualLite 사이에 사용되는 parallel 프로토콜을 설정하기 위한 최적의 장소이다.
i.MX 6Dual/6Quad/6Solo/6DualLite BSP에서 아래 세 단계를 수행하여 디바이스 드라이버를 만든다.
- Kconfig에 카메라 센서 항목을 추가한다.
- 카메라 파일을 생성한다.
- 새로운 카메라 센서에 대한 컴파일 플래그를 추가한다.
이러한 단계는 아래의 하위 섹션에 자세히 설명되어 있다.
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 Featuressupport
Kconfig 카메라 파일에 새로운 센서 항목을 추가하려면, 아래 단계를 수행한다 :
- 표시될 지정 폴더로 아래 명령어을 입력한다 :
$ cd linux/drivers/media/video/mxc/capture
- Kconfig 파일을 연다 :
$ gedit Kconfig &
- 표시할 항목을 추가한다 :
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
카메라 센서 파일은 카메라 초기화, 리셋 신호 생성, 전원 설정, 모든 센서 지정 코드를 활성화한다.
참고
카메라 센서를 i.MX 6Dual/6Quad/6Solo/6DualLite 보드에 연결하기 전에, 센서에 적절한 전압이 공급되는지, 센서 데이터 인터페이스에 올바른 VIO 값을 가지는지 확인한다. 공급 전원이 일치하지 않으면 CMOS나 i.MX 6Dual/6Quad/6Solo/6DualLite가 손상될 수 있다.
아래 경로에 필요한 패널별 함수와 함께 파일을 생성한다 :
linux/drivers/media/video/mxc/capture/
ipuv3_csi0_chess.c 카메라 파일은 아래 테이블에 설명된 함수를 포함해야 하고 드라이버에 필요한 추가 함수와 매크로를 포함할 수 있다.
Table 4. Required functions
Function name | Function declaration | Description |
ioctl_g_ifparm | static int ioctl_g_ifparm( struct v4l2_int_device *s, struct v4l2_ifparm *p) |
VIDIOC_G_PARM ioctl용 V4L2 센서 인터페이스 핸들러 |
ioctl_s_power | static int ioctl_s_power( struct v4l2_int_device *s, int on) |
VIDIOC_S_POWER ioctl용 V4L2 센서 인터페이스 핸들러. 센서 모듈의 전원 모드를 설정한다.(켜기나 끄기) |
ioctl_g_parm | static int ioctl_g_parm( struct v4l2_int_device *s, struct v4l2_streamparm *a) |
VIDIOC_G_PARM ioctl용 V4L2 센서 인터페이스 핸들러. 스트리밍 파라미터를 가져온다. |
ioctl_s_parm | static int ioctl_s_parm( struct v4l2_int_device *s, struct v4l2_streamparm *a) |
VIDIOC_S_PARM ioctl용 V4L2 센서 인터페이스 핸들러. 스트리밍 파라미터를 설정한다. |
ioctl_g_fmt_cap | static int ioctl_g_fmt_cap( struct v4l2_int_device *s, struct v4l2_format *f) |
v4l2_format 파라미터에서 센서의 현재 픽셀 형식(format)을 반환한다. |
ioctl_g_ctrl | static int ioctl_g_ctrl( struct v4l2_int_device *s, struct v4l2_control *vc) |
VIDIOC_G_CTRL용 V4L2 센서 인터페이스 핸들러. 요청된 컨트롤이 지원되는 경우, video_control[] 배열에서 컨트롤의 현재 값을 반환한다. 그렇지 않고 컨트롤에서 지원이 되지 않으면, -EINVAL를 반환한다. |
ioctl_s_ctrl | static int ioctl_s_ctrl( struct v4l2_int_device *s, struct v4l2_control *vc) |
VIDIOC_S_CTRL용 V4L2 센서 인터페이스 핸들러. 요청된 컨트롤이 지원되는 경우, HW에 컨트롤의 현재 값을 설정한다(그리고 video_control[] 배열을 업데이트함). 그렇지 않고 컨트롤에서 지원이 되지 않으면, -EINVAL을 반환한다. |
ioctl_init | static int ioctl_init( struct v4l2_int_device *s) |
VIDIOC_INT_INIT용 V4L2 센서 인터페이스 핸들러. 센서 인터페이스를 초기화한다. |
ioctl_dev_init | static int ioctl_dev_init( struct v4l2_int_device *s) |
슬레이브가 마스터에 연결되면 디바이스를 초기화한다. |
ioctl_dev_exit | static int ioctl_dev_exit( struct v4l2_int_device *s) |
슬레이브가 마스터에서 분리되면 디바이스를 해제한다. |
함수가 생성된 후에, 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를 준비하기 위해 다른 파일의 수정이 필요하다. ipu_bg_overlay_sdc.c 파일에서 센서 픽셀 형식을 YUV에서 RGB565로 변경하여 이미지 변환기가 색 공간 변환을 수행하지 않고, CSI 테스트 모드 생성기에서 수신된 입력이 메모리로 직접 전송되도록 한다. 또한 ipuv3_csi0_chess.c 파일에서 ipuv3_csi0_chess_init_mode() 함수로 설정한 CSI 테스트 모드 설정을 유지하도록 mxc_v4l2_capture.c를 수정한다.
14.2.3 Adding a compilation flag for the new camera
카메라 파일이 생성되고 Kconfig 파일에 새로운 카메라에 대한 항목이 있으면, 컴파일하는 동안 새로운 카메라 모듈을 생성하기 위해 Makefile을 수정한다.
Makefile은 새로운 카메라 파일 및 Kconfig와 같은 폴더(linux/drivers/media/video/mxc/capture)에 위치한다.
- i.MX 6Dual/6Quad/6Solo/6DualLite 카메라 지원 폴더에 아래 명령어를 입력한다 :
$ cd linux/drivers/media/video/mxc/capture
- i.MX 6Dual/6Quad/6Solo/6DualLite 카메라를 지원하는 Makefile을 연다.
$ gedit Makefile &
- Makefile 마지막에 CMOS 드라이버 컴파일 항목을 추가한다.
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 Using the I2C interface
많은 카메라 센서 모듈은 초기화와 구성을 위해 동기식 시리얼 인터페이스가 필요하다.
이 섹션에서는 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 노드를 추가한다.
사용된 CSI 인터페이스(CSI0나 CSI1), MCLK 주파수, 모듈과 관련된 일부 전원 공급 장치의 설정과 같은, 카메라에 대한 기능을 지정하기 위해 이 시점에서 dts 파일을 수정할 수 있다.
이제 다음을 사용하여 카메라 센서 파일의 센서로부터 읽고 쓸 수 있다 :
retval = mycamera_write_reg(RegAddr, Val);
retval = mycamera_read_reg(RegAddr, &RegVal);
14.3.1 Loading and testing the camera module
이 섹션의 예에서와 같이 카메라 드라이버가 커널 모듈로 생성된 경우, 카메라로 어떤 요청이 시도되기 전에 모듈은 로드되어야 한다.
Makefile 정보에 따라 카메라 모듈의 이름은 ipuv3_csi0_chess_camera.ko 이다.
테스트 모드에서 V4L2 카메라 인터페이스와 CSI를 로드하려면, 아래 명령어를 실행한다 :
root@ /unit_tests$ modprobe ipuv3_csi0_chess_camera
root@ /unit_tests$ modprobe mxc_v4l2_capture
video0 입력(카메라)을 테스트하기 위해 mxc_v4l2_overlay 테스트가 BSP에 포함된다. imx-test 패키지도 포함되어 있으면, unit test 폴더를 열고 테스트를 실행한다.
root@ ~$ cd /unit_tests/
root@ /unit_tests$ ./mxc_v4l2_overlay.out
14.4 Additional reference information
14.4.1 CMOS interfaces supported by the i.MX 6Dual/6Quad/6Solo/6DualLite
i.MX 6Dual/6Quad/6Solo/6DualLite에 IPU(image processing unit) 모듈의 일부인 카메라 센서 인터페이스는 CMOS 센서 인터페이스를 처리한다. i.MX 6Dual/6Quad/6Solo/6DualLite IPU는 CSI 포트를 통해 두 개의 카메라 디바이스를 처리할 수 있다. 하나는 CSI0 포트에 연결되고 다른 하나는 CSI1 포트에 연결된다. 두 CSI 포트는 동일하고 다양한 raw/smart 센서와 TV 디코더에 글루리스(glueless) 연결을 제공한다.
각 카메라 포트에는 아래 기능이 포함되어 있다 :
- 병렬 인터페이스
- 최대 20비트 입력 데이터 버스
- 주기마다 단일 값
- 프로그래밍 가능한 극성
- 다양한 데이터 형식
- 인터리브 색상 구성 컴포넌트, 값(컴포넌트)마다 최대 16비트
- 입력 Bayer RGB, Full RGB 또는 YUV 4:4:4, YUV 4:2:2, 컴포넌트 순서 : UY1VY2 또는 Y1UY2V, 그레이스케일과 일반 데이터
- Scan order(스캔 순서) : progressive나 interlaced
- Frame size (프레임 크기) : 최대 8192 x 4096 픽셀
- Synchronization-video mode (동기 비디오 모드)
- 센서는 픽셀 clock(PIXCLK)과 동기화 신호의 마스터이다.
- 동기화 신호는 아래 방법 중 하나를 사용하여 수신된다 :
- 프로그래밍 가능한 pulse width와 polarity이 있는 전용 컨트롤 신호(VSYNC, HSYNC)
- 코드 값 및 위치에 유연함으로 BT.656 프로토콜을 느슨하게 따르는 데이터 스트림에 임베디드된 컨트롤.
- 이미지 캡처는 MCU나 외부 신호(기계식 셔터와 같은)에 의해 트리커된다.
- 동기화된 strobe는 최대 6개의 출력(센서와 카메라 주변 장치(플래시, 기계식 셔터...))을 생성한다.
- 프레임을 주기적으로 건너뛰어(skip) 프레임 속도를 감소
자세한 내용은 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로 전송될 수 있다.
카메라 포트에서 지원하는 입력 속도(input rate)는 아래와 같다 :
- Peak : 최대 180MHz (values/sec)
- YUV 4:2:2의 평균(35% 블랭킹 오버헤드 가정).
- 한 주기의 픽셀(BT.1120) : 최대 135 MP/sec (15fps에서 9Mpixels)
- 두 주기의 픽셀(BT.656) : 최대 67 MP/sec (15fps에서 4.5Mpixels)
- 즉시 처리는 더 낮은 입력 속도(input rate)로 제한될 수 있다.
필요한 경우, USB 포트를 통해 추가 카메라를 연결할 수 있다.
14.4.2 i.MX 6Dual/6Quad/6Solo/6DualLite CSI parallel interface
CSI는 센서에서 데이터를 얻고, IPU clock(HSP_CLK)으로 데이터와 컨트롤 신호를 동기화 시키고 데이터를 IC와 SMFC로 전송한다.
아래 그림과 같이 CSI 병렬 인터페이스는 clock output(MCLK)을 제공하며, 이는 센서에서 clock input 레퍼런스로 사용된다. 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이다.
입력 polarity는 아래 레지스터를 사용하여 구성할 수 있다 :
- SENS_PIX_CLK_POL
- DATA_POL
- HSYNC_POL
- VSYNC_POL
아래 테이블은 i.MX 6Dual/6Quad/6Solo/6DualLite에서 제공되는 카메라 병렬 인터페이스를 설명한다 :
Table 5. CSI0 parallel interface signals
Signal | IPU Pin | Description |
MCLK | CSI0_MCLK | 마스터 clock (출력) |
PIXCLK | CSI0_PIXCLK | 픽셀 clock |
VSYNC | CSI0_VSYNC | 수직 동기화 신호 |
HSYNC | CSI0_HSYNC | 수평 동기화 신호 |
DATA_EN | CSI0_DATA_EN | 데이터 활성화나 데이터 준비 완료 |
DATA[19:10] | CSI0_DAT [19:10] | 픽셀 데이터 버스, [19:4]는 선택 사항 |
아래 섹션에서는 타이밍 데이터 모드 프로토콜이 이러한 신호를 사용하는 방법을 설명한다. 모든 신호가 타이밍 데이터 모드 프로토콜마다 사용되는 것은 아니다.
14.4.3 Timing data mode protocols
CSI 인터페이스는 아래 네 가지 타이밍/데이터 프로토콜을 지원한다 :
- Gated mode
- Non-gated mode
- BT.656 (progressive와 interlaced)
- BT.1120 (progressive와 interlaced)
Gated mode에서 VSYNC는 프레임의 시작을 나타내고 HSYNC는 raw(실제 이미지 데이터)의 시작을 나타낸다. 센서 clock은 항상 동작(ticking)한다.
Non-gated mode에서 VSYNC는 프레임의 시작을 나타내고 HYSNC는 사용되지 않는다. 센서 clock은 단지 데이터가 유효한 경우에만 동작(tick)한다.
BT.656 모드에서 CSI는 ITU-R BT.656 권장 사항에 따라 작동한다. 타이밍 레퍼런스 신호(프레임 시작, 프레임 마지막, 라인 시작, 라인 마지막)는 데이터 버스 입력에 포함된다.
BT.1120 모드에서 CSI는 ITU-R BT.1120 권장 사항에 따라 작동한다. 타이밍 레퍼런스 신호(프레임 시작, 프레임 마지막, 라인 시작, 라인 마지막)는 데이터 버스 입력에 포함된다.
자세한 내용은 i.MX 6Dual/6Quad Applications Processor Reference Manual (IMX6DQRM)나 i.MX 6Solo/6DualLite Applications Processor Reference Manual (IMX6SDLRM)을 참조한다.
※ glueless 연결 : 추가적인 IC없이 직접 연결. glueless가 접착제 없이라는 의미이고 이는 두 개의 연결을 위한 매개체가 필요 없다는 것을 의미한다.
'NXP i.MX SoC Family > i.MX BSP Porting Guide' 카테고리의 다른 글
i.MX BSP Porting Guide - Porting HiFi 4 (0) | 2022.07.08 |
---|---|
i.MX BSP Porting Guide - Porting Audio Codecs (0) | 2022.07.08 |
i.MX BSP Porting Guide - Connection MIPI-DSI Panel (0) | 2022.07.06 |
i.MX BSP Porting Guide - Connecting LVDS Panel (0) | 2022.07.06 |
i.MX BSP Porting Guide - Configuring SPI NOR (0) | 2022.07.06 |