본문 바로가기
Digital Logic/Zybo z7 프로젝트

[Zybo z7-20 보드 실습] Pcam 5C 영상 출력 (OV5640 Register 제어)

by 고뭉나무 2021. 5. 21.

 

지난 포스팅에서 Zybo z7-20 보드를 통해 Pcam 5C로 영상을 출력했습니다.

2021.05.19 - [Digital Logic/FPGA] - [Zybo z7-20 보드 실습] Pcam 5C 영상 출력 (MIPI - HDMI)

PS의 main 코드에 올라와있던 카메라 Resolution 변경, AWB, Gamma correction 등을 수행했는데요.

 

해당 main 코드에는 자주 쓰이는 위 3가지 기능은 바로 적용할 수 있도록 꺼내놓았고 나머지 기능들은 직접 센서의 datasheet을 이용하여 Register를 접근하라고 안내했습니다.

 

그래서 이번 시간에는 Pcam 5C의 센서 OV5640의 Datasheet을 보면서 원하는 기능의 Register를 제어해보도록 하겠습니다.

 

Pcam 5C의 센서 OV5640의 Datasheet

출처: https://cdn.sparkfun.com/datasheets/Sensors/LightImaging/OV5640_datasheet.pdf

 

Sensor size는 2592 x 1944로 약 5MP이며, 8bit 와 10bit을 지원하네요.

Max SNR은 36dB로 보급형이라 다소 떨어지는 스펙을 갖고 있네요.

Shutter는 rolling shutter로 빠르게 움직이는 물체를 촬영하면 흐물 거리는 형상이 찍히겠습니다.

Key specifications
OV5640 Block diagram

이미지 센서를 제어하는 통신은 SCCB 입니다.

The Serial Camera Control Bus (SCCB) interface controls the image sensor operation.

SCCB interface timing

 

 

지금까지 센서의 전반적인 스펙을 살펴보았으니 이제 원하는 기능의 Register를 찾아 값을 대입해보겠습니다.

 

Pcam 5C (OV5640) Register 제어하기

이전 포스팅에서 언급했던 Pcam 5C (OV5640) Register 제어를 진행해보겠습니다.

Pcam 5C 영상 출력이 궁금하다면, 아래 이전 포스팅을 참고해주세요.

2021.05.19 - [Digital Logic/FPGA] - [Zybo z7-20 보드 실습] Pcam 5C 영상 출력 (MIPI - HDMI)

 

4 - Write a Register inside the Image Sensor
This option allows you to write a value to any register inside the Image sensor over the OmniVision SCCB interface. You will need to refer to the OV5640 datasheet for information on the register map. This option is very useful for exploring the features of the image sensor.

 

 

원하는 Value 값 환산하는 방법 (feat. Hexadeicmal (16bit))

OV5640 센서를 제어하기 위해서는 원하는 기능의 Register address를 찾고 그에 맞는 Value를 write 해주어야 한다.

Datasheet를 보면, Register와 Value 모두 Hex 값 (0x)로 되어 있는 것을 알 수 있다.

 

그럼 어떻게 값을 적용하면 되는 지 하나씩 확인해보자.

이해를 돕기 위해 아래 예시를 가져 왔다.

 

만약 내가 'SYSTEM RESET 00'이라는 항목에서 총 3가지의 Reset을 수행하고 싶다.

 

BIST, MCU, timing control

 

그럼 0x3000이라는 Register address에 Bit[7], Bit[5], Bit[1]에 모두 '1'을, 나머지 Bit에는 '0'이라는 값을 적용하면 된다.

 

  • Register address: '3000'이라는 값을 사용하면 된다. Register address는 총 4개의 인자를 가지며 PS(Xilinx SDK) 코드에서 Decimal로 변환해주어 값을 적용시킨다. (Decimal로 변환하면, 3x16^3 + 0x16^2 + 0x16^1 + 0x16^0 = 12,288) 
  • Value: Bit[7], Bit[5], Bit[1]에 모두 '1'을, 나머지 Bit에는 '0'이라는 값을 적용해야 한다. Value는 총 2개의 인자를 가지며 아래 방식을 따라서 하면 된다. 그래서 'A2'라는 값을 사용하면 된다.

 

Hexadecimal value 값 계산

 

 

센서의 여러 기능 제어하기

#ISP Mirror

출처: OV5640 Datasheet

결과 영상

https://www.youtube.com/watch?v=caslUSv0g4o 

 

#AEC #AGC #Exposure Output

AEC/AGC control registers

 

이번에는 위의 기능들을 이용하여 3가지 명령을 수행할 것이다.

1) '0x3503'에 '03'을 적용하여 Auto Exposure mode OFF, Auto Gain mode OFF를 한다.

2) '0x3501'에 '00'을 적용하여 Exposure time을 0s로 만든다. (화면이 black out 되는 지 확인)

3) '0x3501'에 여러 값을 적용하여 적절한 Exposure time을 설정한다. (적절한 Exposure time이란 화면 상에 포화 영역 안나타나는 최대 수치를 말한다.)

 

주의점.
해당 PS 소스코드는 알파벳 대소문자를 구분하는 것 같다. Register address 와 value 값을 대입할 때 무조건 '소문자'로 입력해야 정상적으로 적용된다.

 

 

아래와 같이 Return으로 Register에 잘 쓰여졌는 지 확인할 수 있다.

 

결과 영상

https://www.youtube.com/watch?v=JybQaa_zM_g 

 

 

#그 외 유용한 기능들

#Test pattern

카메라의 Test pattern은 디버깅을 할 때 활용된다. 센서에서 뿌려주는 경우와 FPGA에서 뿌려주는 경우로 나뉘어 bitloss가 나는 특정 Test pattern을 찾아 어느 부품이 문제인 지를 유추할 수 있다.

 

 

그 외에도 많은 기능들이 있으니 원하는 영상 프로세싱에 맞추어 필요한 기능을 제어하면 된다 :)

 

그럼 다음 포스팅에서는 Pcam 5C를 연결하였던 HW IP에 대해 분석해보도록 하겠습니다.

 

위 글이 도움이 되셨나면, 아래 하트를 눌러주세요↓

감사합니다 \( ˆoˆ )/​

반응형

댓글