이미지 센서, OV5640 데이터 시트 리딩 -1

728x90
반응형

임베디드를 전공했지만 카메라, 모니터 등은 제어해본 경험이 별로 없다. 특히나 카메라는 더 경험이 없다. ESP-EYE를 검토하면서 카메라 모듈을 제대로 이해해야겠다는 생각에 카메라 모듈에 대해 좀 찾아봤다. 거의 대부분 OmniVision의 image sensor를 사용하고 있고 OV264. OV5640등 2000년대 초반, 2010년대 초반에 나온 제품들이 주를 이루고 있었지만, 이 제품들은 더 이상 지원하지 않는다. 즉 단종 근데 왜 이렇게 많이 판매를 하고 있을까? 아는 영업사원의 말로는 중국에 떠돌아다니는 것들 이란다. 곧 다 사라지겠지?

그래서 OmniVision의 홈페이지에 들어가 봤더니 최신의 Image sensor들이 많이 출시되었지만 데이터 시트는 구할 수 없었다. 그렇지만 거의 대부분의 칩 제조사가 그러하듯 제품의 성능이 올라는 가지만 큰 틀에서 변화하지 않으므로 OV5640 데이터 시트를 리딩 해보면 다른 제품들도 조금 수월하게 접근할 수 있을 것 같아 시작해 보려 한다.

(confidential 이라는데 이미 구글링으로도 바로 찾을 수 있기 때문에 별 문제는 없겠지? ㅎㅎ 쫄보...)

 

시작하기 앞서 본 포스팅은 어디까지나 나의 개인적인 리딩이니 이걸 실무에 활용하지 않길 바랍니다. 그냥 참고(?) 정도만 하길 바랍니다. 

 

시. 작 ! 

 

1. 하드웨어 스펙

 

회로를 구성할때 가장 중요한 전압, 전류 스펙을 살펴보자.

 

I/O 전압은 1.8V / 2.8V, Analog 2.6~3.0V(2.8V Typical), core 1.5V ±5%(with emedded 1.5V regulator), 모듈을 직접 만들 경우 데이터 시트의 레퍼런스를 참고하면 될 듯하고, 시중의 모듈을 구매해서 사용하는 경우는 보통 3.3V를 공급해주면 모듈 내부의 전원 회로에서 알아서 처리해 줄 것이다.

 

전류 스펙은 동작시 140mA, 대기상태에서 20uA라고 한다. 흠 생각보다 많이 소모하네? 온도는 -30~70도라고 하니 뭐 큰 문제는 없을 것 같다. 

 

 

카메라에서 가장 중요한 부분인 해상도와 프레임에 대해서 조금 살펴보자.

 

해상도 프레임(fps)
2592x1944 15
1080p 30
1280x960 45
720p 60
VGA(640x480) 90
QVGA(320x240) 120

해상도는 최대 QVGA부터 WQXGA까지 지원한다. 해상도에 관한 내용은 링크 참조!

해상도/목록 - 나무위키 (namu.wiki)

 

 

 

2. OV5640 시스템 

 

 

OV5640의 블록다이어 그램이다. 복잡(?)해 보이지만 하나씩 살펴보자!

 

timing generator and system control logic 블록에 PWDN, RESETB, FREX, GPIO[3:0], PCLK, HREF, VSYNC, STROBE 이렇게 8 가지 기능이 포함되어 있고, 여기서 50/60Hz auto detection, gain control, 10-bit ADC, ISP, compression engine, formatter, FIFO, MIPI를 제어한다.  좌측 하단부터 살펴보도록 하겠다. 데이터 시트의 순서와는 관계없이 블록다이어 그램을 살펴보면서 관련된 내용을 함께 살펴보도록 하겠다. 

2.1 PLL XVCLK

H11핀이다. 가장 좌측의 PLL 은 XVCLK핀에서 clock를 공급 받는다. 여기에 입력되는 clock은  6(min)~27(max) MHz이고 보통 카메라 모듈을 사용하는 보드에서 공급해준다. 라고 맨 앞장에 써있었는데 XVCLK를 검색해보니 다른 내용이 나온다. 

jitter가 1ns라니... 굉장히 고 정밀 osc를 써야하나보다. 위 표를 봐서는 최대 54MHz까지 사용할 수 있다고 나오는데 사실 그정도까지 쓸일이 있을까? 뭐 아무튼 알아두자. clock은 굉장히 중요한 부분이니까.

 

2.3 PCLK(Parallel port output pixel Clock)

데이터를 출력하는 clock를 말하는것 같다. 

VGA YUV를 출력할 때는 48MHz를 사용하고, 그 이상은 96MHz를 사용하면 되는것 같다. 이 부분은 관련 설정이 좀 많아서 레지스터를 설정해가면서 직접 컨트롤해봐야 좀 더 이해가 될것같다. 

 

 

2.2 PWDN, RESETB

PWDN(D1핀), RESETB(E2핀) 두 핀 모두 모듈을 사용하는 보드에서 제어한다. 사용하지 않을 경우 PWDN은 GND에 RESETB는 VCC에 연결하면 된다. (사용하지 않을 경우가 있을까?)

 

전원의 사용은 I/O 전원(DOVDD J2, J3, K2, K3 핀, DOGND J11핀 DGND에 연결)을 1.8V 를 사용하는 경우와 2.8V를 사용하는 경우로 나눌 수 있다. 1.8V를 사용하는 경우 내부 regurator를 사용해 전원을 구성하고, 2.8V를 사용하는 경우 외부 전원을 사용하도록 권장하고 있다. 대부분의 경우 제조사에서 권장하는 대로 사용하는 것이 이롭다.(정신적으로, 회로적으로)

 

여기서 말하는 내부, 외부는 OV5640을 사용해서 카메라 모듈을 만들 경우 모듈을 기준으로 내부 외부를 말하는 듯 하다. 레퍼런스 회로를 보면 조금 더 이해가 쉬울 것 같다. 

 

PWDN 핀은 내부전원, 외부 전원에 관계없어 회로에 전원이 들어오고 5ms 뒤에 active LOW를 만들어주고, 다음 1ms 뒤에 RESETB 핀을 active High로 만들어준다. RESETB 핀이 active High 상태가 된 뒤 20ms 후에 SCCB를 사용할 수 있다.

 

외부 보드에서 제어할때 큰 어려움은 없을 것 같다. 제어 순서는 다음과 같이 하면 되지 않을까?

 

전원 On -> delay(5) -> PWDN Low -> delay(1) -> RESETB High -> delay(20) -> SCCB start

 

(카메라 통신 규격인 SCCB(Serial Camera Control Bus)는 OmniVision에서 I2C를 대체해 사용하는 프로토콜이다. 이부분은 따로 포스팅하도록 하겠다. )

 

RESETB는 하드웨어로도 가능하고 software reset 도 가능하다.  (아래 이미지는 내가 잘라서 만든거임.)

DVDD 에는 1.5V 를 공급해줘야한다. 이정도면 전원에 관련된건 모두 설명한것 같다. 

 

 

 

리딩을 하다보니 처음보는 단어/용어들은 검색해도 잘 나오지 않아 OV2640을 참조했다. 다음편에서는 clock에 대해 확실히 보고 넘어가야겠다.

 

오늘은 여기까지. 힘들다. 

 

- 끝- 

728x90
반응형