6 Porting new camera
이 섹션에서는 i.MX 8M 시리즈 프로세서에 새로운 카메라를 포팅하는 방법을 설명한다. i.MX 8M 시리즈 MIPI 캡처 시스템을 구성하는 방법을 보여주기 위해 AR0144(1280x800@60fps, RAW12, 2 레인, 레인당 445.5 Mbps)를 예로 들었다.
참고:
기본 BSP 릴리스를 통하여, 8M 시리즈 MIPI 캡처 시스템은 YUV422 형식 카메라 입력만 지원할 수 있다. 이 섹션에서는 RAW8, RAW10, RAW12, RGB565, RGB888과 같은 다른 형식의 카메라 입력을 지원하는 방법을 보여준다.
6.1 Sensor initialization
사용자는 다음 단계를 통해 센서가 제대로 작동하는지 확인해야 한다:
- 모든 공급 전압을 확인한다.
- 센서의 MCLK 주파수를 확인한다.
- 리셋과 파워 시퀀스를 확인한다.
- 센서와 SoC 사이의 I2C 통신이 작동하는지 확인한다.
- 센서 초기화 레지스터가 올바르게 구성되었는지 확인한다.
- 센서 데이터 레인과 클럭 레인 신호를 확인한다.
- 센서 출력 스트림이 SoC MIPI 캡처 기능 내에 있는지 확인한다(Section 5 참조).
6.2 MIPI CSI-2 Rx subsystem configuration
기본적으로 사용자는 센서 출력에 따라 i.MX 8M 시리즈 MIPI CSI-2 Rx 서브시스템을 구성해야 한다. 이러한 모든 구성은 Linux dts와 MIPI CSI-2 드라이버에서 수행할 수 있다. 그리고 사용자는 관련 레지스터 필드의 값을 읽어 이러한 파라미터가 올바르게 구성되었는지 확인할 수 있다(Section 3.1.6과 Section 3.2.6, “Register Definition” 참조).
▶ CSI-2 DPHY에서 데이터 레인 수를 구성한다.
Table 38. The number of data lanes in CSI-2 DPHY
SoC | Register | Field | Value |
---|---|---|---|
i.MX 8MQ | CSI2RX_CFG_NUM_LANES | 1-0 csi2rx_cfg_num_lanes |
01b |
CSI2RX_CFG_DISABLE_DATA_LANES | 3-0 csi2rx_cfg_disable_data_lanes |
1100b | |
i.MX 8MM i.MX 8MN i.MX 8MP |
MIPI_CSIx_CSIS_COMMON_CTRL | 9-8 LANE_NUMBER |
01b |
MIPI_CSIx_DPHY_COMMON_CTRL | 4-1 ENABLE_DAT |
0011b |
참고:
이 섹션에서 모든 테이블의 "value" 열은 AR0144에 대한 레퍼런스 설정을 보여준다.
▶ 센서의 데이터 속도에 따라 CSI-2 DPHY에서 high-speed settle timer를 구성한다(Section 3.1.5와 Section 3.2.5, “DPHY High-Speed Settle Timer” 참조).
Table 39. High-speed settle timer in CSI-2 DPHY according to the data rate of sensor
SoC | Register | Field | Value |
---|---|---|---|
i.MX 8MQ | IOMUXC_GPR_GPR34/41 | 7–2 CSI2_x_S_PRG_RXHS_SETTLE |
0x6 |
i.MX 8MM i.MX 8MN i.MX 8MP |
MIPI_CSIx_DPHY_COMMON_CTRL | 31-24 HSSETTLE |
0x9 |
▶ CSI-2 컨트롤러에서 이미지 데이터 유형, 수직/수평 이미지 해상도를 구성한(i.MX 8MM, i.MX 8MN, i.MX 8MP에만 해당).
Table 40. The image data type, vertical/horizontal image resolution in CSI-2 controller
SoC | Register | Field | Value |
---|---|---|---|
i.MX 8MM i.MX 8MN i.MX 8MP |
MIPI_CSIx_ISP_CONFIG0 | 7–2 DATAFORMAT |
0x2C |
MIPI_CSIx_ISP_RESOLUTION0 |
31-16 VRESOL |
0x320 | |
15-0 HRESOL |
0x500 |
▶ Gasket에서 이미지 데이터 유형, 수직/수평 이미지 해상도를 구성한다(i.MX 8MN, i.MX 8MP에만 해당).
Table 41. The image data type, vertical/horizontal image resolution in Gasket
SoC | Register | Field | Value |
---|---|---|---|
i.MX 8MN i.MX 8MP |
GASKET_x_CTRL | 13-8 GASKET_x_DATA_TYPE |
0x2C |
GASKET_x_HSIZE | 31-0 GASKET_x_HSIZE |
0x500 | |
GASKET_x_VSIZE | 31-0 GASKET_x_VSIZE |
0x320 |
6.3 Imaging subsystem configuration
또한 사용자는 센서 출력, 특히 형식과 이미지 크기 관련 레지스터 필드에 따라 i.MX 8M 시리즈 이미징 서브시스템을 구성해야 한다.
6.3.1 i.MX 8MQ/i.MX 8MM CSI bridge configuration
RAW, RGB 또는 YUV 형식 카메라 입력을 지원하려면 다음 CSI Bridge 레지스터 필드를 올바르게 구성해야 한다.
- CSI_CR3[SENSOR_16BITS]
- CSI_CR18[PARALLEL24_EN]
- CSI_CR18[MIPI_DATA_FORMAT]
Table 42는 RAW, RGB, YUV 형식의 센서를 지원하도록 CSI Bridge를 구성하는 방법을 보여준다.
Table 42. CSI Bridge configuration for RAW, RGB, and YUV format sensor
Sensor Format | CSI_CR3 [SENSOR_16BITS] |
CSI_CR18 [PARALLEL24_EN] |
CSI_CR18 [MIPI_DATA_FORMAT] |
---|---|---|---|
RAW8 | 0 | 0 | 0x2A |
RAW10 | 1 | 0 | 0x2B |
RAW12 | 1 | 0 | 0x2C |
RGB565 | 1 | 0 | 0x22 |
RGB888 | 1 | 1 | 0x24 |
YUV422 | 1 | 0 | 0x1E |
참고:
YUV422 형식 지원과 관련하여 i.MX 8MQ와 i.MX 8MM 사이에는 약간의 차이가 있다. i.MX 8MQ에서 YUV422 형식 센서의 경우, CSI_CR3[SENSOR_16BITS]를 1로 설정해야 한다. i.MX 8MM에서 YUV422 형식 센서의 경우, CSI_CR3[SENSOR_16BITS]를 0(단일 픽셀 모드) 또는 1(듀얼 픽셀 모드)로 설정할 수 있다. YUV422 형식의 듀얼 픽셀 모드를 지원하려면, CSI_CR18[MIPI_DOUBLE_CMPNT]를 1로 설정하고 MIPI_CSIx_ISP_CONFIG0[PIXEL_MODE]를 01b로 설정해야 한다.
또한, CSI_IMAG_PARA[IMAGE_WIDTH, IMAGE_HEIGHT] 필드는 활성 센서 출력 크기에 따라 올바르게 구성되어야 한다.
6.3.2 i.MX 8MN/i.MX 8MP ISI configuration
RGB 또는 YUV 형식 입력의 경우, ISI 블럭은 형식 변환(예: YUV422에서 YUV420으로)과 색 공간 변환(예: RGB에서 YUV로)을 지원할 수 있다. 그러나 RAW 형식 입력의 경우 픽셀 변경 없이 메모리에 복사된다.
ISI 출력 형식은 CHNL_IMG_CTRL[FORMAT]에서 구성되며, Table 43은 RAW, RGB, YUV 형식 센서를 지원하도록 ISI를 구성하는 방법을 보여준다.
Table 43. ISI configuration for RAW, RGB, and YUV format sensor
Sensor Format | CHNL_IMG_CTRL[FORMAT] | |
---|---|---|
No processing | RAW10 | 001100b - RAW10 |
RGB888 | 000110b - RGB888P | |
YUV422 | 100000b - YUV422_1P8P | |
Format Conversion | YUV422 | 110001b - YUV420_2P8P |
Color Space Conversion | YUV422 | 000110b - RGB888P |
RGB565 | 100000b - YUV422_1P8P |
참고:
프로세싱하지 않는 경우, CHNL_IMG_CTRL[FORMAT]은 입력 카메라 센서와 동일한 형식으로 설정해야 한다. 형식 변환과 색 공간 변환 사례의 경우, Table 43에 레퍼런스 ISI 설정이 나열되어 있다. 더 많은 출력 형식이 지원될 수 있다. Section 4.2, “Register Definition”의 CHNL_IMG_CTRL[FORMAT] 필드 설명을 참조한다.
또한, CHNL_IMG_CFG[HEIGHT, WIDTH] 필드는 활성 센서 출력 크기에 따라 올바르게 구성되어야 한다.
6.4 Debug tips
8M 시리즈 프로세서에 새로운 카메라를 포팅할 때, 사용자는 캡처 중단 문제를 마주칠 수 있다. 즉, 센서 데이터를 메모리에 저장할 수 없다. 사용자는 아래 단계에 따라 이 문제를 디버깅할 수 있다.
- MIPI CSI-2 Rx 서브시스템의 인터럽트 상태 확인
- i.MX 8MQ의 경우, CSI2RX_IRQ_STATUS 레지스터 확인
- DPHY ErrSotHS 및/또는 ErrSotSync_HS 오류가 트리거되면, hs_settle이 올바르게 구성되었는지 확인한다.
- 다른 오류가 트리거되면, 카메라 스트림이 안정적이고 MIPI 사양을 준수하는지 확인한다.
- i.MX 8MM/i.MX 8MN/i.MX 8MP의 경우, MIPI_CSIx_DPHY_STATUS와 MIPI_CSIx_INTERRUPT_SOURCE_0 레지스터 확인
- 4레인 카메라가 연결된 경우, MIPI_CSIx_DPHY_STATUS[STOPSTATEDAT]는 0x0과 0xF 사이에서 변경되어야 한다.
- 연결된 카메라가 비연속 클럭 모드에서 작동하는 경우, MIPI_CSIx_DPHY_STATUS [STOPSTATECLK]는 0과 1 사이에서 변경되어야 한다. 연결된 카메라가 연속 클럭 모드에서 작동하는 경우, 항상 0이어야 한다.
- 데이터 레인이나 클럭 레인이 정지 상태나 ULPS 상태로 남아 있으면, 정상적으로 카메라가 잘 작동하지 않는 것이다. 센서 데이터 레인과 클럭 레인 신호를 확인하고 MIPI 사양을 준수하는지 확인한다.
- i.MX 8MQ의 경우, CSI2RX_IRQ_STATUS 레지스터 확인
참고:
i.MX 8MM, i.MX 8MN, i.MX 8MP는 Rx DPHY를 활성화하기 전에 연결된 카메라가 LP 상태에서 작동해야 한다. 그러나 카메라가 연속 클럭 모드에서 작동하는 경우, 클럭 레인은 항상 HS 모드에 있을 수 있다. 이 경우, Rx DPHY는 HS 모드를 감지하지 못하고 중지나 ULPS 상태로 잘못 유지될 수 있다.
- MIPI_CSIx_INTERRUPT_SOURCE_0[ERR_SOT_HS]가 어설션되면, hs_settle이 올바르게 구성되었는지 확인한다.
- MIPI_CSIx_INTERRUPT_SOURCE_0[ERR_OVER]가 어설션되면, 카메라 데이터 속도를 낮춘다.
- MIPI_CSIx_INTERRUPT_SOURCE_0[FRAME_START/FRAME_END]가 어설션되지 않거나 다른 오류가 어설션되면, 센서가 안정적으로 작동하는지 확인한다.
- Imaging 서브시스템의 인터럽트 상태를 확인한다.
- i.MX 8MQ, i.MX 8MM의 경우, CSI_SR 레지스터를 확인한다.
- 캡처 파이프라인이 제대로 작동하는 경우, DMA_TSF_DONE_FB1와 DMA_TSF_DONE_FB2 인터럽트가 차례로 트리거되어야 하며 이러한 각 인터럽트 사이의 시간 간격은 입력 카메라 스트림의 프레임 간격과 동일해야 한다.
- SOF_INT 및/또는 EOF_INT가 어설션되지 않으면, CSI Bridge가 MIPI CSI-2 Rx 서브시스템에서 데이터를 수신할 수 없다는 것을 의미한다. 카메라와 MIPI CSI-2 Rx 서브시스템이 올바르게 구성되었는지 확인한다.
- BASEADDR_CHHANGE_ERROR가 여러 번 트리거되면, 일반적으로 CSI Bridge의 크기 및/또는 형식 관련 레지스터가 제대로 구성되지 않았다는 것을 나타낸다. 사용자는 CSI_CR18[BASEADDR_SWITCH_EN]에 0을 설정하여 이 인터럽트를 비활성화할 수 있다.
- RF_OR_INT가 어설션되면, 카메라 데이터 속도를 낮춘다.
- i.MX 8MQ, i.MX 8MM의 경우, CSI_SR 레지스터를 확인한다.
참고:
i.MX 8MQ의 경우, CSI Bridge Rx FIFO 오버플로로 인해 시스템 중단이 발생할 수 있는 알려진 문제가 있다. 자세한 내용과 해결 방법은 ERR050384를 확인한다.
- i.MX 8MN, i.MX 8MP의 경우, CHNL_STS 레지스터를 확인한다.
- 캡처 파이프라인이 잘 작동하는 경우, BUF1_ACTIVE와 BUF2_ACTIVE 비트가 차례로 어설션되어야 한다. 그리고 각 FRM_STRD 인터럽트의 시간 간격은 카메라 입력 스트림의 프레임 간격과 동일해야 한다.
- LINE_STRD와 FRM_STRD가 어설션되지 않으면, ISI가 MIPI CSI-2 Rx 서브시스템에서 데이터를 수신할 수 없다는 것을 의미한다. 카메라와 MIPI CSI-2 Rx 서브시스템이 올바르게 구성되었는지 확인한다.
- OFLW_Y/U/V_BUF 오류가 어설션되면, 카메라 데이터 속도를 낮춘다.