6.1 Capture Overview (캡처 개요)
6.1.1 Introduction (소개)
i.MX 캡처 드라이버는 V4L2 인터페이스로 카메라 센서 컨트롤러와 인터페이스를 지원한다. 응용 프로그램은 카메라 드라이버를 직접 사용할 수 없다. 응용 프로그램은 대신에 V4L2 캡처 드라이버를 사용하여 미리 보기와 이미지 캡처를 위해 카메라를 open/close 하여, 카메라를 제어하고, 카메라에서 이미지를 가져오고, 카메라에서 미리 보기를 시작한다.
캡처 컨트롤러 목록은 다음과 같다 :
- Camera Serial Interface - CSI
- IPU-CSI
- Video Interface Unit -VIU
- Image Sensor Interface - ISI
- Image Sensor Processing - ISP
이미지 데이터 전송을 위한 캡처 인터페이스 목록은 다음과 같다
- Parallel-CSI
- MIPI-CSI2
- HDMI RX
- TV Decoder
이 장에서는 다양한 컨트롤러와 인터페이스 간의 차이점을 설명한다.
주의
IPU가 있는 i.MX 6은 V4L2 인터페이스로 internaldev를 사용하고, 다른 모든 제품은 V4L2 인터페이스로 subdev를 사용한다.
다음 표에서는 다양한 컨트롤러와 인터페이스 조합에 대해 설명한다.
Table 54. Camera Controllers and Interfaces
SoC | Controller | Interface |
6SLL | CSI | Parallel CSI |
6SoloX | VIU | Parallel CSI and TV Decoder |
6UltraLite/6ULL | CSI | Parallel CSI |
6DualLite/Solo | IPU-CSI | Parallel CSI internaldev IPU |
6QuadPlus/Quad/Dual | IPU-CSI | Parallel CSI internaldev IPU |
7Dual/Solo | CSI | MIPI-CSI2 using Samsung and Parallel CSI (MIPI-CSI2로 Samsung을 사용) |
8M Plus/8M Nano | ISI | MIPI-CSI2 |
8M Plus | ISP | MIPI-CSI2 |
8QuadMax | ISI | MIPI-CSI2 using Mixel and HDMI Receiver using Cadence (MIPI-CSI2로 Mixel 사용, HDMI RX로 Cadence 사용) |
8QuadXPlus | ISI | MIPI-CSI2 using Mixel and Parallel CSI using IMX8 (MIPI-CSI2로 Mixel 사용, Parallel CSI는 IMX8 사용) |
8M Quad | CSI | MIPI-CSI2 using Mixel (MIPI-CSI2는 Mixel 사용) |
8M Mini | CSI | MIPI-CSI2 using Samsung (MIPI-CSI2로 삼성 사용) |
몇 가지 추가 세부 정보는 다음과 같다 :
- ISP는 i.MX 8M Plus에 사용되는 새로운 컨트롤러이다.
- ISI 컨트롤러는 일부 i.MX 8 시리즈에 사용되는 새로운 컨트롤러이다.
- IPU가 없는 i.MX 6 SoC, i.MX 7Dual, i.MX 8M은 동일한 CSI 컨트롤러 드라이버를 사용한다.
- i.MX 8와 i.MX 8X 제품군은 최신 IMX8 CSI 드라이버를 사용한다.
- IPU가 있는 i.MX 6은 IPU 하드웨어와 인터페이스하는 커스텀마이즈된 CSI를 사용한다.
- 각 SoC는 이전 표에 설명된 대로 하나 이상의 인터페이스를 지원할 수 있다. 인터페이스는 Video for Linux V4L2 API와 일치한다.
- 어떤 경우에는 캡처 컨트롤러가 카메라 인터페이스가 아닌 비디오 입력 장치에 연결된다. 일부는 HDMI 수신기와도 연결된다.
6.1.2 Omnivision Camera
Omnivision 카메라는 여러 인터페이스와 카메라 유형을 지원한다. Omnivision 카메라는 저전력 소모형의 소형 카메라 센서와 렌즈 모듈이다.
Omnivision 카메라는 직렬 카메라 제어 버스(SCCB : serial camera control bus) 인터페이스를 사용하여 센서 운영을 위한 제어를 한다. 제어 운영은 I2C 클라이언트로 작업한다. 이 카메라는 CSI, MIPI-CSI2, Parallel-CSI 인터페이스의 전송 모드를 지원한다. MIPI 모드를 사용할 때, OV5640은 MIPI-CSI2 인터페이스로 i.MX 칩에 연결한다. MIPI는 센서 데이터를 수신하여 CSI로 전송한다.
아래 표에는 다양한 Omnivision 카메라와 지원되는 인터페이스가 나열되어 있다.
Table 55. Camera Controllers and Interfaces
Camera | Controller Interface |
OV5640 | CSI controller/MIPI-CSI2/Parallel CSI |
OV5642 | Parallel CSI |
OV10635 | MIPI-CSI2/Parallel CSI |
Omnivision 메뉴 구성에는 지원에 따라 여러 옵션이 있다.
최상위 선택은 다음과 같다 :
장치 드라이버 > 멀티미디어 지원 (MEDIA_SUPPORT [=y]) > V4L 플랫폼 디바이스 (V4L_PLATFORM_DRIVERS)
다음 단계 선택은 각 SoC에 대한 다양한 인터페이스를 기반으로 한다
- IPU가 있는 MX6의 경우 > MXC 카메라/V4L2 PRP 기능 지원과 > OmniVision ov5640 카메라 지원을 모두 선택한다.(MXC_CAMERA_OV5640)
- IPU가 없는 MX6의 경우 > OmniVision ov5640 카메라 지원을 선택한다.(MXC_CAMERA_OV5640_V2)
- MX7의 경우 > mipi를 사용하는 OmniVision ov5640 카메라 지원을 선택한다.(MXC_CAMERA_OV5640_MIPI_V2)
- MX8의 경우 > IMX8 카메라 ISI/MIPI 기능 지원(VIDEO_MX8_CAPTURE) > IMX8 카메라 컨트롤러(IMX8_CAPTURE_DRIVER)와 Maxim OV5640_V3 드라이버 지원(MXC_CAMERA_OV5640_V3)을 선택한다.
- MX8M의 경우 > OmniVision ov5640 카메라 지원(MXC_CAMERA_OV5640_V2)과 mipi를 사용하는 OmniVision ov5640 카메라 지원(MXC_CAMERA_OV5640_MIPI_V2)를 선택한다.
다음 표에서는 각각의 인터페이스에서 지원되는 카메라 기능을 설명한다.
Table 56. Capture Interface Features
Interface (인터페이스) | Features (기능) |
IPU_CSI |
|
CSI |
|
ISI-8QuadXPlus |
|
ISI-8QuadMax |
|
ISI-8M Plus |
|
ISI-8M Nano |
|
6.1.3 Parallel CSI
Parallel CSI 드라이버를 사용하면 외부 CMOS 센서와 CCIR656 비디오 소스에 직접 연결할 수 있다. CSI와 센서 드라이버는 이미지 캡쳐 드라이버와 비디오 출력 드라이버로 구성된 V4L2(Video for Linux Two) 드라이버 프레임워크에서 구현된다.
드라이버는 CSI 인터페이스를 초기화하고 CSI 모듈용 하드웨어 레지스터를 구성 및 작동한다. 다음 기능이 지원된다 :
- 가장 일반적으로 사용 가능한 CMOS 센서를 지원하는 구성 가능한 인터페이스 로직.
- 8-bit/pixel, 10-bit/pixel 또는 16-bit/pixel 데이터 포맷을 32-bit 수신 FIFO 패킹으로 완벽히 제어.
- 수신된 이미지 픽섹 데이터를 저장하기 위한 128x32 FIFO.
- FIFO 오버런 방지 메커니즘으로 수신.
- AHB 버스를 통해 수신 FIFO나 통계 FIFO에서 데이터를 전송하는 임베디드 DMA 컨트롤러.
- 외부 메모리에서 두 프레임의 이중 버퍼링 지원.
- 마스크 가능한 인터럽트 소스에서 인터럽트 컨트롤러하는 단일 인터럽트 소스 : 프레임 시작, 프레임 끝 등.
- 센서에 대한 구성 가능한 마스터 클럭 주파수 출력.
V4L2 CSI 캡처 디바이스는 캡처와 오버레이 인터페이스, 두 가지 인터페이스가 포함되어 있다. 캡처와 오버레이 인터페이스는 CSI에 내장된 DMA 컨트롤러를 사용하여 V4L2 API를 사용하여 기능을 구현한다. 다음은 캡처와 오버레이의 데이터 흐름이다.
- 카메라는 8-bit/10-bit 데이터 포트를 통해 데이터를 CSI 수신 FIFO로 보낸다.
- 내장된 DMA 컨트롤러는 AHB 버스를 통해 수신 FIFO에서 외부 메모리로 데이터를 전송한다.
- 데이터는 사용자 공간 메모리에 저장되거나 직접 프레임 버퍼에 출력된다.
IPU가 있는 i.MX 6은 IPU와 직접 인터페이스하는 IPU-CSI 드라이버를 사용한다. i.MX Quad Plus/Quad/Dual은 2개의 IPU-CSI 시나리오를 지원한다. IPU가 없는 i.MX 6와 i.MX 7Dual/Solo는 센서에 직접 인터페이스하는 별도의 CSI 센서 드러이버를 사용한다.
6.1.4 MIPI Camera Serial Interface (MIPI CSI)
MIPI CSI-2 D-PHY에는 PHY Adaptation Layer, Packet Analyzer, Image Date Interface와 Register Bank등 네가지 블럭이 있다.
MIPI CSI-2는 카레라 센서를 호스트 시스템에 연결하는 모바일 애플리케이션을 위한 고성능의 직렬 상호 버스가 있는 MIPI-Camera Serial Interface Host Controller이다. CSI-2 Host Controller는 MIPI CSI-2 사양에 정의된 모든 프로토콜 기능을 구현하는 디지털 코어이다. 이를 통해 시스템과 MIPI D-PHY 간의 인터페이스를 제공하고 MIPI CSI-2-compliant(호환) Camera Sensor와 통신할 수 있다.
MIPI CSI2 드라이버는 MIPI D-PHY를 관리하는 데 사용되며, MIPI 센서와 IPU CSI와 함께 작동한다. MIPI CSI2 드라이버는 다음과 같은 기능을 구현한다 :
- MIPI D-PHY 레지스터와 클럭 관리를 위한 MIPI CSI-2 저수준 인터페이스
- MIPI 센서와 MIPI D-PHY 사이의 통신을 위한 MIPI CSI-2 공통 API
MIPI 공통 API를 호출하여, MIPI 센서는 D-PHY를 구성하기 위해 MIPI CSI2 드라이버로 센서에 대한 특정 정보(데이터 유형, lanes 번호 등)를 설정할 수 있다. IPU CSI 모듈 드라이버가 올바른 구성을 가지고, 적절한 데이터를 수신하고, 올바르게 처리하려면 센서에 대한 정보(데이터 유형, 가상 채널, IPU ID, CSI ID 등)를 MIPI CSI2 드라이버에서 수신해야 한다.
기능 및 운영은 다음과 같다 :
- PHY Adaptation Layer는 PHY 오류 처리를 포함한 D-PHY 인터페이스 관리를 담당한다.
- Packet Analyzer는 헤더 디코딩, 오류 감지/수정, 프레임 크기 오류 감지와 CRC 오류 감지와 함께 필요한 경우 데이터 레인 병합을 담당한다.
- Image Date Interface는 CSI-2 패킷 헤더 정보를 분리하고 메모리 저장 형식에 따라 데이터를 재정렬한다. 또한 정확한 타이밍에 비디오 동기화 신호를 생성한다. frame-level과 line-level에서도 여러 오류 감지가 수행된다.
- Register Bank는 표준 AMBA-APB 슬레이브 인터페이스를 통해 접근할 수 있으며 구성과 제어를 위해 CSI-2 Host Controller register에 대한 접근을 제공한다. 또한 특정 이벤트를 시스템에 알리는 완전히 프로그램밍 가능한 인터럽트 생성기가 있다.
Linux OS용 MIPI CSI2 드라이버는 두 부분으로 구성된다. 하나는 mipi_csi2_info 구조체를 초기화하는 MIPI CSI2 드라이버 초기화 작업이고, 나머지 하나는 CSI 모듈 드라이버와 MIPI 센서 드라이버를 위한 API를 외부에 노출하는 MIPI CSI2 공통 API이다.
6.1.5 HDMI
HDMI 비디오는 ISI(Image Sensor Interface)와 인터페이스한다.
i.MX 8QuadMax에서 HDMI 수신기 비디오 인터페이스는 1포트의 HDMI 2.0 4K30을 지원한다.
6.1.6 Software Operation
캡처 지원 모드, 사진 형식과 크기에 대한 V4L2 옵션은 각 캡처 인터페이스에 따라 달라진다.
imx-test repo의 mxc_v4l2_test에 이러한 인터페이스에 대한 단위 테스트가 있다. 테스트 실행 방법에 대한 자세한 내용은 README를 참조한다.
6.1.7 V4L2 Capture
Video for Linux Two(V4L2)는 Linux 표준이다. API 사양은 https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/v4l2.html에서 확인할 수 있다.
V4L2 캡처 디바이스는 두 가지 인터페이스가 포함되어 있는데, 캡처와 오버레이 디바이스용 V4L2 API를 사용하는 캡처와 오버레이 인터페이스이다.
다음은 V4L2 캡처 API의 몇 가지 샘플 사용 사례이다 :
- IOCTL의 VIDIOC_S_FMT를 사용하여 캡처 픽셀 형식과 크기를 설정한다.
- IOCTL의 VIDIOC_S_CTRL를 사용하여 회전을 위한 제어 정보를 설정한다.
- IOCTL의 VIDIOC_REQBUFS를 사용하여 버퍼를 요청한다.
- 메모리는 버퍼를 사용자 공간에 매핑한다.
- IOCTL의 VIDIOC_DQBUF를 실행한다.
- 후처리가 필요한 데이터 버퍼를 전달한다.
- IOCTL의 VIDIOC_QBUF를 사용하여 버퍼를 큐에 넣는다.
- IOCTL의 VIDIOC_STREAMON을 실행하여 스트림을 시작한다.
- VIDIOC_STREAMON과 VIDIOC_OVERLAY는 동시에 활성화할 수 없다.
다음 표에는 i.MX 캡처 드라이버에서 사용되는 V4L2 캡처 ioctl이 나열되어 있다. 자세한 내용은 V4L2 장을 참조한다.
Table 57. V4L2 Capture API IOCTLs
IOCTL | Description |
VIDIOC_QUERYCAP | 디바이스 기능 질의 |
VIDIOC_G_FMT VIDIOC_S_FMT | 데이터 형식 획득/설정 |
VIDIOC_S_DEST_CROP | 잘라낼 사각형 영역 설정 |
VIDIOC_REQBUFS | 메모리 매핑 시작 |
VIDIOC_QueryBUF | 버퍼의 상태를 질의 |
VIDIOC_QBUF, VIDIOC_DQBUF | 드라이버와 버퍼 교환 |
VIDIOC_STREAMON, VIDIOC_STREAMOFF | 스트리밍 시작/정지 |
VIDIOC_G_CTRL, VIDIOC_S_CTRL | |
VIDIOC_CROPCAP | 자르기 기능 질의 |
VIDIOC_G_CROP, VIDIOC_S_CROP | 자르기 정보 획득/설정 |
VIDIOC_OVERLAY | 비디오 오버레이 시작/정지 |
VIDIOC_G_FBUF, VIDIOC_S_FBUF | 프레임 버퍼 오버레이 파라미터 획득/설정 |
VIDIOC_G_PARM, VIDIOC_S_PARM | 스트리밍 파라미터 획득/설정 |
VIDIOC_G_STD, VIDIOC_S_STD | 비디오 표준 획득/설정 |
VIDIOC_G_OUTPUT, VIDIOC_S_OUTPUT | 비디오 출력 획득/설정 |
VIDIOC_G_INPUT, VIDIOC_S_INPUT | 비디오 입력 획득/설정 |
VIDIOC_ENUMSTD | 비디오 표준 열거 |
VIDIOC_ENUMOUTPUT, VIDIOC_ENUMINPUT | 입력과 출력 열거 |
VIDIOC_ENUM_FMT | 이미지 형식 열거 |
VIDIOC_ENUM_FRAMESIZE, VIDIOC_ENUM_FRAMEINTERVALSS | 프레임 크기와 인터벌 열거 |
VIDIOC_DBG_G_CHIP_IDENT | 칩 식별자 |
6.1.8 Source Code Structure
아래 표는 캡처 드라이버 소스 파일을 보여준다. i.MX 6와 i.MX 7의 경우 소스 파일은 drivers/media/platform/mxc/capture에 있다. i.MX 8 시리즈의 경우 소스 파일은 drivers/media/platform/imx8에 있다. MIPI-CSI의 경우 소스 파일은 drivers/mxc/mipi에 있다.
Table 58. Omnivision V4L2 Camera Driver Files
i.MX 8 MIPI-CSI2 Parallel-CSI 인터페이스 드라이버
File | Description |
|
i.MX 8 MIPI-CSI2 캡처 인터페이스 드라이버 |
|
i.MX 8 MIPI-CSI2 Parallel-CSI 인터페이스 드라이버 |
|
i.MX 8 ISI 캡처 컨트롤러 드라이버 |
|
i.MX 8 Omnivision Camera V3 카메라 인터페이스 |
|
i.MX 8 JPEG 하드웨어 인터페이스 |
|
MX6와 MX7 MIPI-CSI2 인터페이스 코어 드라이버 |
|
i.MX 6 IPU V4L2 플러그인 |
|
CSI Omnivision Camera V4L2 플러그인 |
|
Parallel CSI Omnivision Camera V4L2 플러그인 |
|
MIPI-CSI Omnivision Camera V4L2 플러그인 |
|
MIPI-CSI2 Omnivision Camera V4L2 플러그인 |
|
TV 디코더 ADV7180 V4L2 |
'NXP i.MX SoC Family > i.MX Linux Reference Manual' 카테고리의 다른 글
i.MX Linux Reference Manual - Video - Video for Linux 2 (V4L2) (0) | 2022.05.20 |
---|---|
i.MX Linux Reference Manual - Video - Display Interfaces (0) | 2022.05.09 |
i.MX Linux Reference Manual - Video - Display Controllers (0) | 2022.04.26 |
i.MX Linux Reference Manual - Video - Display Overview (0) | 2022.04.25 |
i.MX Linux Reference Manual - Video (0) | 2022.04.22 |