Embedded Camera Module Selection Handbook — From Basics to Purchasing Reference
About This Handbook
This handbook is a revised edition of my own “Embedded Camera Module Technical Manual” that I previously compiled and shared online. The original covered eight mainstream sensors: OV2640, OV5640, OV7725, GC0309, OV7670, OV3660, GC2053, and GC4653. This revision expands coverage with 12 additional sensors (OV9281, OV5647, IMX219, IMX273, IMX296, IMX307, IMX335, IMX415, IMX477, IMX678, IMX708, IMX766), for a total of 20. The content was comprehensive, but when I sat down to use it as a purchasing reference, I felt uneasy — a single wrong voltage parameter can fry a board, and I didn’t want to ship mistakes I couldn’t vouch for.
So I did one thing: verified every key parameter against official datasheets. Sources include OmniVision’s official product pages, GalaxyCore datasheets, SparkFun / DigiKey / Mouser datasheet mirrors, and Espressif’s official esp32-camera driver source code.
The result: most parameters were correct, but there were several critical errors, especially around voltage, frame rates, and some marketing terminology. This handbook is the corrected version — every error-prone parameter is annotated with reliability status and evidence. Use it as a purchasing checklist with confidence.
Reliability annotation legend
- ✅ Verified: Parameter matches official datasheet exactly
- ⚠️ Note: Original had errors or was misleading; corrected with evidence
- 🔍 Unconfirmed: Official datasheet unclear, or varies by module manufacturer
Quick Selection Guide
Start with this table to find your use case, then read the details below.
| Use Case | Top Pick | Resolution | Interface | Key Advantage | Price Tier |
|---|---|---|---|---|---|
| Education (Arduino/STM32) | OV7670 | 0.3MP | DVP | Richest ecosystem, most tutorials | Very low |
| Wi-Fi streaming (ESP32-CAM) | OV2640 | 2MP | DVP | Built-in JPEG compression | Low-mid |
| High-res photo + autofocus | OV5640 | 5MP | DVP/MIPI | Only entry-level with AF | Mid-high |
| Night vision / machine vision | OV7725 | 0.3MP | DVP | 6.0µm pixels, low-light king | Mid |
| Ultra low cost (access/POS) | GC0309 | 0.3MP | DVP | Lowest price | Very low |
| 3MP upgrade (ESP32) | OV3660 | 3MP | DVP | BSI tech, drop-in for OV2640 | Low-mid |
| Security / surveillance | GC2053 | 2MP | DVP/MIPI | 1/2.9" sensor + 2.8µm pixels | Mid |
| High-end security / AI vision | GC4653 | 4MP | MIPI only | 4MP + BSI high sensitivity | Mid-high |
| Raspberry Pi / Jetson entry | IMX219 | 8MP | MIPI 2L | Pi V2 standard, most mature driver | Low |
| 4K security / NVR | IMX415 | 8MP | MIPI 2/4L | 4K STARVIS, rich module ecosystem | Mid-high |
| High-end 4K security (2024) | IMX678 | 8MP | MIPI 2/4/8L | STARVIS 2 + Clear HDR | High |
| 1080P night security | IMX307 | 2MP | MIPI 2/4L | 2.9µm + STARVIS, strong night vision | Mid |
| Industrial FA / global shutter | IMX273 | 1.58MP | MIPI 1L | Pregius global shutter, 226fps | High |
⚠️ ESP32 users note: ESP32 series only supports DVP-interface sensors. GC4653 is MIPI-only and cannot be used with ESP32. OV3660 also only supports DVP (claims of MIPI support in the original document are wrong — see below).
DVP Interface Basics
DVP (Digital Video Port) transmits uncompressed raw image data via parallel data lines with a sync clock. Understanding DVP signals and timing is prerequisite for wiring and debugging all DVP modules.
Signal Definitions
| Signal | Direction | Description | Typical Level |
|---|---|---|---|
| XCLK | Input | External master clock, typically 6–24 MHz ✅ | 3.3V |
| PCLK | Output | Pixel clock for synchronous data sampling ✅ | 3.3V |
| VSYNC | Output | Frame sync signal ✅ | 3.3V |
| HREF / HSYNC | Output | Line sync signal ✅ | 3.3V |
| D[7:0] | Output | 8-bit parallel pixel data bus ✅ | 3.3V |
| SIOC / SCL | Input | SCCB / I²C clock ✅ | 3.3V |
| SIOD / SDA | Bidirectional | SCCB / I²C data ✅ | 3.3V |
| PWDN | Input | Power-down control | 3.3V |
| RESET | Input | Hardware reset (active low) | 3.3V |
Timing
A complete frame is bounded by VSYNC. Within a frame, multiple HREF pulses occur, each corresponding to one line of valid pixel data. When both VSYNC and HREF are active, D[7:0] data latched on PCLK rising edge is valid pixel data.
SCCB Control Interface
SCCB (Serial Camera Control Bus) is OmniVision’s I²C-compatible 2-wire serial protocol. SCL clock frequency supports up to 400 kHz ✅ (OV2640 datasheet Table 9 confirms). If your MCU lacks internal pull-ups, add 4.7 kΩ pull-up resistors on SCL and SDA to 3.3V ✅.
⚠️ I²C addresses are sensor-specific, NOT uniform 0x30/0x60!
Many online sources casually claim “OV series address is 0x30/0x60” — this is wrong. Verified 7-bit slave addresses per sensor:
Sensor 7-bit Address Evidence OV2640 0x30 Datasheet: 8-bit write 0x60 / read 0x61 OV5640 0x3C Datasheet: 8-bit write 0x78 / read 0x79 OV7725 0x21 Datasheet: 8-bit write 0x42 / read 0x43 OV7670 0x21 Linux kernel driver ov7670.c GC series Vendor-defined Check specific datasheet If SCCB configuration fails, verify I²C address first, not just pull-ups.
MIPI CSI-2 Interface Basics
When resolution and frame rate go up (1080P@30fps+), DVP’s 8-bit parallel bus can’t keep up — too many wires, limited speed, poor noise immunity. All Sony IMX sensors below use MIPI CSI-2. Here’s the foundation.
DVP vs MIPI CSI-2
| Feature | DVP | MIPI CSI-2 |
|---|---|---|
| Data lines | 8–10 parallel + sync signals | 1–4 differential pairs (lanes) |
| Clock | Single-ended XCLK / PCLK | Differential clock lane |
| Bandwidth | ≤ ~200 MB/s | Up to ~2.5 GB/s (4-lane) |
| Noise immunity | Poor, long cables cause artifacts | Good, differential rejects common-mode noise |
| Controller complexity | Low (straight to FIFO) | High (needs D-PHY + CSI-2 controller) |
| Typical controllers | ESP32, STM32, RP2040 | Raspberry Pi, Jetson, Hi3516, RV1106 |
| Typical sensors | OV2640, OV5640, OV7670 | IMX219, IMX415, IMX678 |
Lane Count and Bandwidth
| Lanes | Total Bandwidth | Suitable For |
|---|---|---|
| 1-lane | ~500 MB/s | 1080P@30fps RAW8 |
| 2-lane | ~1 GB/s | 1080P@60fps or 4K@15fps |
| 4-lane | ~2 GB/s | 4K@30fps+ |
Purchasing note: More lanes isn’t always better — your controller’s MIPI receiver must support the lane count. For example, RV1106 supports 2-lane/4-lane MIPI input; connecting a 1-lane IMX273 may not work. Check controller specs before buying.
ESP32 users note: ESP32 (including ESP32-S3) has no MIPI CSI-2 receiver. None of the Sony IMX sensors below work with ESP32. You need a MIPI-capable controller like Raspberry Pi, Jetson, RV1106, Hi3516, etc.
Sensor Technology Principles
Shutter Types: Rolling vs Global
Most sensors in this handbook use rolling shutter — exposing rows sequentially with a time gap between rows. Fast-moving objects appear skewed/warped (jello effect). Only IMX273, OV9281, and IMX296 use global shutter — the entire frame is exposed simultaneously, zero motion distortion.
Backside Illumination (BSI) vs Frontside Illumination (FSI)
Traditional CMOS sensors (FSI) have metal wiring above the photodiode, blocking some light. BSI (Backside Illumination) flips the sensor so light enters from the back, reaching the photodiode directly — 30%–60% more light. STARVIS, Exmor R, and OmniBSI all use BSI technology.
HDR Multi-Exposure Fusion
In backlit scenes, short exposure captures highlights (sky) but shadows are black; long exposure captures shadows but highlights are blown. HDR merges multiple exposures into one image, preserving both highlight and shadow detail. IMX307/IMX335/IMX678 all support hardware-level HDR.
Quad Bayer Pixel Binning
High-resolution sensors (e.g., IMX766 50MP) have tiny pixels (1.0µm) with insufficient light per pixel. Quad Bayer groups 4 adjacent same-color pixels, reading them as 1 larger pixel — 4× area, effective pixel size doubles (1.0µm → 2.0µm), dramatically improving low-light performance. Full resolution by day, auto-binned by night.
OV2640 Module
OmniVision 1/4-inch, 2MP CMOS sensor with built-in JPEG compression engine. The standard choice for ESP32-CAM.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | OmniVision OV2640 | ✅ |
| Optical format | 1/4 inch | ✅ |
| Effective pixels | 2MP (1600 × 1200) | ✅ |
| Pixel size | 2.2 µm × 2.2 µm | ✅ |
| Shutter | Electronic rolling | ✅ |
| Interface | DVP 8-bit parallel + SCCB | ✅ |
| Output formats | YUV422, YUV420, RGB565, RGB555, RAW RGB, JPEG | ✅ |
| Max frame rate | UXGA@15fps, SVGA@30fps, CIF@60fps | ✅ |
| Master clock XCLK | 6 – 24 MHz (typical 24 MHz) | ✅ |
| Operating voltage | Analog 2.5–3.0V, I/O 1.7–3.3V, Core 1.2/1.3V | ✅ |
| Power | ~125 mW (15fps UXGA YUV), ~140 mW (JPEG mode) | ✅ |
Source: Official OmniVision OV2640 datasheet (uctronics.com/download/OV2640_DS.pdf)
Resolution & Frame Rate
| Resolution | Size | Typical fps |
|---|---|---|
| UXGA | 1600 × 1200 | 15 fps |
| SXGA | 1280 × 1024 | 15 fps |
| SVGA | 800 × 600 | 30 fps |
| VGA | 640 × 480 | 30 fps |
| QVGA | 320 × 240 | 60 fps |
Typical Pinout (24-PIN FPC)
✅ Verified: OV2640 modules do use 24-pin 0.5mm pitch FPC (confirmed by OV2640FSL datasheet, Arducam module spec). However, pin order may vary by module manufacturer — always check your specific board’s datasheet.
| Pin | Function | Pin | Function |
|---|---|---|---|
| 1 | GND | 13 | D3 |
| 2 | VCC (3.3V) | 14 | D4 |
| 3 | GND | 15 | D5 |
| 4 | PWDN | 16 | D6 |
| 5 | RESET | 17 | D7 |
| 6 | XCLK | 18 | NC |
| 7 | VSYNC | 19 | SIOC (SCL) |
| 8 | HREF | 20 | SIOD (SDA) |
| 9 | PCLK | 21 | NC |
| 10 | D0 | 22 | NC |
| 11 | D1 | 23 | NC |
| 12 | D2 | 24 | NC |
Purchasing tip: OV2640’s built-in JPEG compression outputs compressed streams directly, significantly reducing MCU RAM and bus bandwidth requirements. Best price/performance for ESP32-CAM.
OV5640 Module
OmniVision 1/4-inch, 5MP CMOS sensor with integrated autofocus (AF) voice coil motor driver. The image quality ceiling for entry-level.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | OmniVision OV5640 | ✅ |
| Optical format | 1/4 inch | ✅ |
| Effective pixels | 5MP (2592 × 1944) | ✅ |
| Pixel size | 1.4 µm × 1.4 µm | ✅ |
| Shutter | Electronic rolling | ✅ |
| Interface | DVP 8/10-bit OR MIPI CSI-2 (2-lane) | ✅ |
| Output formats | RAW RGB, RGB565/555/444, YCbCr422, JPEG | ✅ |
| Max frame rate | QSXGA@15fps, 1080P@30fps, 720P@60fps, VGA@90fps | ✅ |
| Master clock XCLK | 6 – 27 MHz (typical 24 MHz) | ✅ |
| Autofocus | Integrated VCM driver, contrast-detect AF | ✅ |
| Features | OmniBSI, HDR, AE/AG/AWB, 2D NR, lens correction, anti-shake | ✅ |
| Current | ~140 mA (active), 20 µA (standby) | ✅ |
Source: OV5640 datasheet v2.03 (cdn.sparkfun.com), OV5640 Product Brief (media.digikey.com)
Interface note: OV5640 supports both DVP and MIPI CSI-2. Cheap modules typically use DVP 8-bit parallel. MIPI versions are usually for phone/tablet designs. For AF versions, verify AF_VCC supply — the VCM motor needs separate power.
OV7725 Module
OmniVision high-performance 1/4-inch VGA sensor using OmniPixel² technology, focused on high sensitivity, low noise, and low-light performance. At 6.0 µm pixel size, it’s the strongest low-light performer in the 0.3MP class.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | OmniVision OV7725 | ✅ |
| Optical format | 1/4 inch | ✅ |
| Effective pixels | 0.3MP (640 × 480) | ✅ |
| Pixel size | 6.0 µm × 6.0 µm | ✅ |
| Interface | DVP 8/10-bit parallel + SCCB | ✅ |
| Output formats | RAW RGB, RGB565/555/444, YCbCr422 | ✅ |
| Max frame rate | VGA@60fps, QVGA@120fps | ✅ |
| Operating temp | -20°C to +70°C | ✅ |
| Sensitivity | 3800 mV/Lux-sec (extremely high) | ✅ |
| Dynamic range | 60 dB | ✅ |
| Features | OmniPixel², high sensitivity low-light, AE/AG/AWB, edge enhancement, noise suppression | ✅ |
Source: OV7725 official product page (ovt.com/products/ov7725), OV7725 datasheet
⚠️ EOL notice: OV7725 is marked End-of-Life on OmniVision’s website. For new production designs, evaluate alternatives. But surplus/secondhand stock remains plentiful.
Why is 6.0µm so big? Both OV7670 and OV7725 are 0.3MP, but OV7670 pixels are only 3.6µm while OV7725 reaches 6.0µm — nearly 3x the pixel area, meaning 3x the light gathering. This is why it crushes same-resolution competitors in low light. For night vision, license plate recognition, or industrial inspection, this is the one.
GC0309-8225N V2 Module
Based on GalaxyCore GC0309, a 0.3MP fixed-focus module with DVP interface, focused on ultra-high cost-effectiveness.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | GalaxyCore GC0309 | ✅ |
| Optical format | 1/9 inch | ✅ |
| Effective pixels | 0.3MP (640 × 480, actual 648×488) | ✅ |
| Pixel size | 2.5 µm × 2.5 µm | ✅ |
| Pixel structure | 4-transistor (4T), low noise | ✅ |
| Shutter | Electronic rolling | ✅ |
| Interface | DVP 8-bit parallel | ✅ |
| Output formats | YCbCr422, RGB565, RAW Bayer | ✅ |
| Max frame rate | VGA@30fps (24MHz clock) | ✅ |
| Operating voltage | 2.8V typical (2.7–3.3V range) | ⚠️ see below |
| Lens | Fixed focus, typical 62° FOV | 🔍 module-vendor defined |
| Features | On-chip 10-bit ADC, embedded ISP, AE, AWB | ✅ |
Source: GC0309 official datasheet V1.0 (2009-12-28, GalaxyCore Inc.)
⚠️ Voltage correction: The original document’s “3.3V single supply” is inaccurate. The official datasheet explicitly states “Single power supply requirement (2.8V)”, typical 2.8V, range 2.7–3.3V. Recommended supply is 2.8V LDO — 3.3V is within range but not the optimal operating point.
Note: GC0309-8225N V2 is a complete module model customized by module vendors based on the GC0309 sensor. Pin definitions, lens parameters, and FPC interfaces may vary between vendors. Always refer to your specific module’s datasheet.
OV7670 Module
OmniVision’s classic 1/6-inch VGA sensor — the most historically significant and ecosystem-mature sensor in embedded vision. The de facto standard for Arduino, STM32, and FPGA education.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | OmniVision OV7670 | ✅ |
| Optical format | 1/6 inch | ✅ |
| Effective pixels | 0.3MP (640 × 480) | ✅ |
| Pixel size | 3.6 µm × 3.6 µm | ✅ |
| Shutter | Electronic rolling | ✅ |
| Interface | DVP 8-bit parallel + SCCB | ✅ |
| Output formats | YUV422, RGB565, RGB555, RAW RGB, Processed Bayer | ✅ |
| Max frame rate | VGA@30fps, QVGA@60fps, CIF@60fps | ✅ |
| Master clock XCLK | 10 – 24 MHz (typical 24 MHz) | ✅ |
| Power | ~60 mW (15fps VGA YUV), standby <20 µA | ✅ |
Source: OV7670 official datasheet (w2.electrodragon.com/Chip-dat/OmniVision-dat/OV7670-dat/OV7670-ds.pdf)
⚠️ Voltage correction (important): The original’s “2.5–3.0V single voltage” is simplified and misleading. OV7670 actually requires three separate supply domains:
Supply Domain Voltage Range Notes DVDD (digital core) 1.8V Requires dedicated LDO AVDD (analog) 2.45–3.0V DOVDD (I/O) 1.7–3.0V Can connect to 3.3V Purchasing note: Cheap non-FIFO modules typically only expose DOVDD — DVDD and AVDD are stepped down via on-board LDOs. But bare minimum boards may require external regulation. Non-FIFO versions are extremely demanding on MCU real-time performance; with STM32, pair with AL422B FIFO buffer chip.
OV3660 Module
OmniVision 3MP (2048×1536) sensor using OmniBSI backside-illumination technology. Natively supported by ESP32’s esp32-camera library.
⚠️ Multiple corrections in this section — read carefully. My original version had errors in interface, frame rate, voltage, and current — all corrected against the official datasheet below.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | OmniVision OV3660 | ✅ |
| Optical format | 1/5 inch | ✅ |
| Effective pixels | 3MP (2048 × 1536) | ✅ |
| Pixel size | 1.4 µm × 1.4 µm (OmniBSI) | ✅ |
| Shutter | Electronic rolling | ✅ |
| Interface | DVP 8-bit parallel ONLY | ⚠️ see below |
| Output formats | RAW RGB, RGB565/555/444, YCbCr422, JPEG compression | ✅ |
| Max frame rate | QXGA@15fps, 1080P@20fps, 720P@45fps, VGA@60fps | ⚠️ see below |
| Operating voltage | Core 1.5V, I/O 1.8V/2.8V, Analog 2.6–3.0V | ⚠️ see below |
| Current | ~98 mA (active), 20 µA (standby) | ⚠️ see below |
| Sensitivity | 670 mV/Lux-sec | ✅ |
| Dynamic range | 70 dB @ 8x gain | ✅ |
| Operating temp | -20°C to 70°C | ✅ |
| XCLK | 6 – 27 MHz | ✅ |
Source: OV3660 official datasheet (download.kamami.pl/p1196945-OV3660%20Datasheet.pdf), ESP32 Camera Driver (github.com/espressif/esp32-camera)
⚠️ Correction 1 — No MIPI: The original claimed OV3660 supports “DVP 8-bit OR MIPI CSI-2 (1-lane)” — this is wrong. The official datasheet only mentions Digital Video Parallel Port with no MIPI interface description. ESP32 can use it precisely because it’s DVP.
⚠️ Correction 2 — Frame rate: Original claimed 1080P@30fps, 720P@60fps; actual is 1080P@20fps, 720P@45fps. Original overstated by ~33%.
⚠️ Correction 3 — Voltage: Original “I/O 1.8–3.3V, core 1.2V, analog 2.8V” is wrong. Actual: core 1.5V, I/O 1.8V or 2.8V, analog 2.6–3.0V.
⚠️ Correction 4 — Current: Original “~130mA” is too high; datasheet specifies 98mA active.
Purchasing tip: OV3660 offers 50% higher resolution than OV2640 (3MP vs 2MP) with better low-light performance via BSI. If your project already uses OV2640 and you want to upgrade image quality while staying on ESP32, OV3660 is the best drop-in replacement (both DVP, directly supported by esp32-camera).
GC2053 Module
GalaxyCore 2MP (1920×1080) sensor with 1/2.9-inch large sensor and 2.8µm large pixels, supporting both MIPI and DVP interfaces. Standout low-light performance in its price tier.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | GalaxyCore GC2053 | ✅ |
| Optical format | 1/2.9 inch | ✅ |
| Effective pixels | 2MP (1920 × 1080) | ✅ |
| Pixel size | 2.8 µm × 2.8 µm | ✅ |
| Shutter | Electronic rolling | ✅ |
| Interface | MIPI CSI-2 (2-lane) or DVP | ✅ |
| Output formats | RAW Bayer 10-bit / 8-bit | ✅ |
| Max frame rate | 1080P@30fps, 720P@60fps | ✅ |
| Operating voltage | AVDD 2.8V, DVDD 1.2V, IOVDD 1.8V | ✅ |
| Current | ~57 mA total (analog 17.3 + digital 37.4 + I/O 2.5) | ⚠️ see below |
| ADC | 10-bit | ✅ |
Source: GC2053 datasheet V1.1 (2018-11-29, GalaxyCore / CK Vision)
⚠️ Current correction: Original claimed “~95 mA”; datasheet measures approximately 57mA total (analog 17.3mA + digital 37.4mA + I/O 2.5mA). Actual power consumption is lower than original — thermal and power design can be more relaxed. MIPI 2-lane bandwidth of 1.5Gbps/lane 🔍 pending final datasheet confirmation.
Why choose GC2053: The 1/2.9-inch sensor is larger than both OV2640 (1/4") and OV5640 (1/4"), and 2.8µm pixels are also bigger. Bigger sensor + bigger pixels = more light per pixel = better low-light performance. It has a clear advantage over same-price OV solutions for security surveillance.
GC4653 Module
GalaxyCore’s high-performance 4MP sensor using BSI backside-illumination technology for enhanced low-light sensitivity. A high-end choice for security cameras and intelligent vision applications.
⚠️ “STARVIS” terminology correction. The original claimed GC4653 uses “STARVIS architecture technology” — this is incorrect. STARVIS is Sony’s registered trademark and exclusive technology; GalaxyCore does not use STARVIS. GC4653 actually uses in-house BSI (backside-illuminated) pixel technology for high sensitivity.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | GalaxyCore GC4653 | ✅ |
| Optical format | 1/3 inch | ✅ |
| Effective pixels | 4MP (2560 × 1440) | ✅ |
| Pixel size | 2.0 µm × 2.0 µm (BSI) | ✅ |
| Shutter | Electronic rolling | ✅ |
| Interface | MIPI CSI-2 ONLY (2-lane, RAW12/RAW10) | ✅ |
| Output formats | RAW Bayer 12-bit / 10-bit | ✅ |
| Max frame rate | 4MP@30fps, 1080P@60fps | ✅ |
| Operating voltage | AVDD 2.8V, DVDD 1.2V, I/O 1.8V | ✅ |
| Current | ~120 mA | 🔍 pending datasheet |
| Features | BSI high-sensitivity low-light, HDR, PDAF phase AF, 2D/3D noise reduction | ⚠️ see above |
Source: GC4653 datasheet (Camemaker), Sipeed Wiki, Sony Semiconductor official site (STARVIS trademark confirmation)
⚠️ ESP32 incompatible: GC4653 is MIPI-only, incompatible with traditional DVP parallel interface. ESP32 series has no MIPI CSI-2 receiver capability and cannot use this sensor. Requires a controller with MIPI CSI-2, such as HiSilicon Hi3516, Ingenic T31, Rockchip RV1106, etc.
Purchasing tip: Confirm your controller has MIPI CSI-2 before choosing GC4653. If you’re doing an ESP32 project, don’t buy this sensor — you won’t be able to light it up.
OV9281 Module
OmniVision 1/4-inch 1MP global shutter sensor using OmniPixel®3-GS technology. Like the IMX273, it’s a global shutter sensor, but much cheaper with DVP+MIPI dual interface — the most affordable global shutter option for makers.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | OmniVision OV9281 | ✅ |
| Optical format | 1/4 inch | ✅ |
| Effective pixels | 1MP (1280 × 800) | ✅ |
| Pixel size | 3.0 µm × 3.0 µm | ✅ |
| Shutter type | Global Shutter (OmniPixel®3-GS) | ✅ |
| Interface | MIPI CSI-2 (2-lane) + DVP | ✅ |
| Output format | RAW8 / RAW10 | ✅ |
| Max frame rate | 120 fps (1280×800), 180fps (VGA) | ✅ |
| Operating voltage | AVDD 2.8V, DVDD 1.2V, IOVDD 1.8V | ✅ |
| Power | 156 mW (active), 150 µA (standby) | ✅ |
| S/N ratio | 38 dB | ✅ |
| Dynamic range | 68 dB | ✅ |
| Production status | In production | ✅ |
| Typical applications | Machine vision, drones, barcode scanning, AR/VR, 3D depth | ✅ |
Source: OmniVision OV9281 Product Brief v1.4 (ovt.com/wp-content/uploads/2024/05/OV9281-PB-v1.4-WEB.pdf)
⚠️ ESP32 compatibility: OV9281 is NOT in the esp32-camera library (classic ESP32/S2/S3). ESP32-P4 has experimental support but unstable (esp-idf #17795). For global shutter on ESP32, there’s currently no good option; use Raspberry Pi + Arducam OV9281 module instead.
Why OV9281 over IMX273: Both are global shutter, but OV9281 is much cheaper ($15-25 vs $50+) and supports both DVP and MIPI. Downsides: lower resolution (1MP vs 1.58MP) and monochrome only (no color version).
OV5647 Module
OmniVision 1/4-inch 5MP CMOS sensor with OmniBSI technology. The original Raspberry Pi Camera Module V1 (2013) sensor.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | OmniVision OV5647 | ✅ |
| Optical format | 1/4 inch | ✅ |
| Effective pixels | 5MP (2592 × 1944) | ✅ |
| Pixel size | 1.4 µm × 1.4 µm | ✅ |
| Shutter type | Rolling shutter | ✅ |
| Technology | OmniBSI backside illumination | ✅ |
| Interface | MIPI CSI-2 (2-lane) + DVP | ✅ |
| Output format | RAW8 / RAW10 | ✅ |
| Max frame rate | 5MP@15fps, 1080P@30fps, 720P@60fps, VGA@90fps | ✅ |
| Operating voltage | Analog 2.6–3.0V (typical 2.8V), Core 1.5V, I/O 1.7–3.0V | ✅ |
| Production status | ❌ End-of-Life (EOL) | ⚠️ see below |
| Typical applications | Raspberry Pi Camera V1, phones, notebooks | ✅ |
Source: OmniVision OV5647 datasheet (v-visiontech.com/web/userfiles/download/OV5647DS.pdf), Raspberry Pi official documentation
⚠️ Discontinued (EOL): OV5647 is on OmniVision’s discontinued product list. Surplus stock still available ($8-15), but not recommended for new designs.
Selection comparison: OV5647 vs OV5640 — both 5MP. OV5647 is the Pi V1 sensor; OV5640 is the ESP32 ecosystem 5MP option (with AF). Pins and drivers are incompatible. For Pi projects on a budget, OV5647 surplus still works; for ESP32, use OV5640.
NOT in esp32-camera support list. ESP32 users should use OV2640 or OV5640.
IMX219 Module
Sony 1/4-inch 8MP CMOS sensor with Exmor R backside-illumination technology. The standard sensor for Raspberry Pi Camera Module V2, and the most ubiquitous MIPI camera in the Raspberry Pi ecosystem.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | Sony IMX219 | ✅ |
| Optical format | 1/4 inch | ✅ |
| Effective pixels | 8MP (3280 × 2464) | ✅ |
| Pixel size | 1.12 µm × 1.12 µm | ✅ |
| Technology | Exmor R BSI (NOT STARVIS) | ⚠️ see below |
| Interface | MIPI CSI-2 (2-lane) | ✅ |
| Output format | RAW10 | ✅ |
| Max frame rate | 1080P@30fps, 720P@60fps, VGA@90fps | ✅ |
| Operating voltage | AVDD 2.8V, DVDD 1.2V, IOVDD 1.8V | ✅ |
| Power | ~38 mA @2.8V + ~160 mA @1.2V (≈ 0.26 W) | ✅ |
| Production status | In production (at least until Jan 2028) | ✅ |
Source: Sony IMX219 datasheet (dlscorp.com), Raspberry Pi official documentation
⚠️ Exmor R is NOT STARVIS: Some online articles classify IMX219 as STARVIS — this is wrong. IMX219 uses Exmor R (BSI). STARVIS is Sony’s later security-focused technology line with higher sensitivity and dynamic range.
Purchasing tip: The IMX219 module (Raspberry Pi Camera V2) is the lowest-cost entry to MIPI. Pi 4B/5 CSI connector works directly, driver is in mainline kernel, plug-and-play.
IMX273 Module
Sony Pregius series global shutter sensor, 1/2.9-inch, 1.58MP. Designed for industrial FA cameras and ITS (Intelligent Traffic Systems), 226fps at full resolution — a high-performance choice for high-speed machine vision.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | Sony IMX273 | ✅ |
| Optical format | 1/2.9 inch | ✅ |
| Effective pixels | 1.58MP (1456 × 1088) | ✅ |
| Pixel size | 3.45 µm × 3.45 µm | ✅ |
| Technology | Pregius Global Shutter (NOT STARVIS) | ⚠️ see below |
| Interface | MIPI CSI-2 (1-lane) OR Sub LVDS (8-ch) | ✅ |
| Output format | RAW10 / RAW12 | ✅ |
| Max frame rate | 226 fps (full resolution, 10-bit) | ✅ |
| Operating voltage | 3.3V / 1.8V / 1.2V | ✅ |
| Typical applications | Industrial FA cameras, ITS, barcode scanning, defect inspection | ✅ |
Source: Sony IMX273 official Flyer (sony-semicon.com/files/62/flyer_industry/IMX273_287_296_297_Flyer.pdf)
⚠️ Global vs Rolling Shutter: Every other sensor in this handbook uses rolling shutter, which causes jello effect on fast-moving objects. IMX273 has a global shutter — the entire image is exposed simultaneously, zero jello effect on high-speed motion. This is the core reason to choose it for industrial vision.
Note: IMX273 comes in two variants — MIPI 1-lane and Sub LVDS 8-ch. Confirm which interface you need before buying.
IMX307 Module
Sony STARVIS 2MP security sensor, 1/2.8-inch, 2.9µm large pixels. HDR support, a mainstream choice for 1080P security cameras, commonly paired with HiSilicon Hi3516 series SoCs.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | Sony IMX307 | ✅ |
| Optical format | 1/2.8 inch | ✅ |
| Effective pixels | 2.07MP (1920 × 1080) | ✅ |
| Pixel size | 2.9 µm × 2.9 µm | ✅ |
| Technology | STARVIS (original) | ✅ |
| Interface | MIPI CSI-2 (2/4-lane) + LVDS | ✅ |
| Output format | RAW10 / RAW12 | ✅ |
| Max frame rate | 60 fps (1080P) | ✅ |
| HDR | Multi-exposure HDR + Digital overlap HDR | ✅ |
| Operating voltage | AVDD 2.9V, DVDD 1.2V, IOVDD 1.8V | ✅ |
| Typical applications | Security surveillance, FA cameras | ✅ |
Source: Sony IMX307 official Flyer (sony-semicon.com/files/62/flyer_security/IMX307LQD_LQR_Flyer.pdf)
Highlight: 2.9µm large pixels + STARVIS = excellent night vision. Paired with Hi3516C V300 is the classic security combo.
IMX335 Module
Sony STARVIS 5MP security sensor, 1/2.8-inch. Steps up from IMX307’s 2MP to 5MP while maintaining good day/night image quality. Commonly paired with Hi3516 / RV1106.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | Sony IMX335 | ✅ |
| Optical format | 1/2.8 inch | ✅ |
| Effective pixels | 5.04MP (2592 × 1944) | ✅ |
| Pixel size | 2.0 µm × 2.0 µm | ✅ |
| Technology | STARVIS (original) | ✅ |
| Interface | MIPI CSI-2 (2/4-lane) | ✅ |
| Output format | RAW10 / RAW12 | ✅ |
| Max frame rate | 60 fps (full resolution, 10-bit) | ✅ |
| HDR | Multi-exposure HDR + Digital overlap HDR | ✅ |
| Operating voltage | AVDD 2.9V, DVDD 1.2V, IOVDD 1.8V | ✅ |
| Common SoC pairing | Hi3516 series, RV1106 | ✅ |
Source: Sony IMX335 official Flyer (sony-semicon.com/files/62/flyer_security/IMX335LQN_Flyer.pdf)
Selection comparison: IMX335 vs IMX307 — same 1/2.8" sensor. IMX307 is 2MP/2.9µm (better low light), IMX335 is 5MP/2.0µm (more detail). Choose IMX335 if you need to see far details, IMX307 for night surveillance.
IMX415 Module
Sony STARVIS 4K (8MP) security sensor, 1/2.8-inch. The workhorse sensor for 4K security cameras, with the most mature module ecosystem — Jetson / Raspberry Pi / RV1106 all have ready drivers.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | Sony IMX415 | ✅ |
| Optical format | 1/2.8 inch | ✅ |
| Effective pixels | 8.29MP (3840 × 2160, 4K UHD) | ✅ |
| Pixel size | 1.45 µm × 1.45 µm | ✅ |
| Technology | STARVIS (original) | ✅ |
| Interface | MIPI CSI-2 (2/4-lane) | ✅ |
| Output format | RAW8 / RAW10 | ✅ |
| Max frame rate | 4K up to 90fps (typical 30–60fps) | ✅ |
| HDR | Multi-exposure HDR | ✅ |
| Operating voltage | AVDD 2.9V, DVDD 1.1V, IOVDD 1.8V | ✅ |
| Announced | June 2019 | ✅ |
| Typical applications | 4K security, NVR, industrial cameras | ✅ |
Source: Sony IMX415 official Flyer (sony-semicon.com/files/62/pdf/p-12_IMX415-AAQR_AAMR_Flyer.pdf)
Purchasing tip: IMX415 has the best DIY/embedded module ecosystem of all Sony IMX sensors. LuckFox, Radxa, e-con Systems all offer ready-made modules with drivers for Jetson, Raspberry Pi, RV1106. The top pick for 4K MIPI projects.
IMX678 Module
Sony STARVIS 2 4K (8MP) security sensor, 1/1.8-inch large sensor. A 2024 new release that comprehensively upgrades the IMX415 — bigger sensor, newer STARVIS 2 technology, faster frame rate, stronger HDR.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | Sony IMX678 | ✅ |
| Optical format | 1/1.8 inch (much larger than IMX415’s 1/2.8") | ✅ |
| Effective pixels | 8.29MP (3840 × 2160, 4K UHD) | ✅ |
| Pixel size | 2.0 µm × 2.0 µm | ✅ |
| Technology | STARVIS 2 (next-gen) | ✅ |
| Interface | MIPI CSI-2 (2/4/8-lane, 4-lane×2ch) | ✅ |
| Output format | RAW10 / RAW12 | ✅ |
| Max frame rate | 72 fps (4K, 10-bit) / 60fps (12-bit) | ✅ |
| HDR | Digital overlap HDR + Clear HDR | ✅ |
| Operating voltage | AVDD 3.3V, DVDD 1.1V, IOVDD 1.8V | ⚠️ see below |
| Announced | 2024 | ✅ |
| Common SoC pairing | Hi3519DV500 | ✅ |
Source: Sony IMX678 official Flyer (sony-semicon.com/files/62/flyer_security/IMX678-AAQR_AAQR1_Flyer.pdf, © 2024)
⚠️ Power note: IMX678’s AVDD is 3.3V, different from IMX335/IMX307/IMX415’s 2.9V. Change the LDO output when migrating from other IMX designs.
IMX678 vs IMX415: Both are 4K 8MP, but IMX678 has a bigger sensor (1/1.8" vs 1/2.8"), bigger pixels (2.0µm vs 1.45µm), newer tech (STARVIS 2), and stronger HDR (Clear HDR). The trade-off is more complex power/lane requirements and higher module cost as a 2024 new release.
IMX766 Module
Sony 50MP smartphone sensor, 1/1.56-inch large sensor, Quad Bayer array. Used in OPPO Find X3 Pro, Reno7 Pro and other flagship phones.
⚠️ NOT recommended for DIY / embedded projects. The following is for reference only.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | Sony IMX766 | ✅ |
| Optical format | 1/1.56 inch | ✅ |
| Effective pixels | 50MP (8192 × 6144) | ✅ |
| Pixel size | 1.0 µm (4-in-1 binning → 2.0 µm) | ✅ |
| Pixel array | Quad Bayer | ✅ |
| Interface | MIPI CSI-2 (4-lane) | ✅ |
| Output format | RAW10 / RAW8 | 🔍 |
| Max frame rate | Full res ~24fps; binned 30fps; 1080P 60–120fps | 🔍 |
| Operating voltage | AVDD 2.8V, DVDD 1.1V, IOVDD 1.8V | 🔍 |
| Phone implementations | OPPO Find X3 Pro, OnePlus, Realme | ✅ |
Source: OPPO official specs, IADIY module page, DxOMark. ⚠️ Sony has not published an official IMX766 datasheet — some parameters are from phone manufacturers and module vendors.
⚠️ Why not recommended for DIY: No official datasheet (register config and power sequencing require reverse engineering), needs custom driver (no mainline Linux driver), non-standard FPC, 50MP Quad Bayer needs powerful ISP, many modules include OIS motors needing extra drivers. For high-res MIPI, choose IMX415 or IMX477 (Raspberry Pi HQ Camera) instead.
Sony IMX Series Key Parameters Comparison
All 15 sensors in one table would exceed mobile screen width. OV/GC comparison table above; Sony IMX series below.
| Parameter | IMX219 | IMX273 | IMX307 | IMX335 | IMX415 | IMX678 | IMX766 |
|---|---|---|---|---|---|---|---|
| Technology | Exmor R | Pregius GS | STARVIS | STARVIS | STARVIS | STARVIS 2 | Quad Bayer |
| Resolution | 8MP | 1.58MP | 2MP | 5MP | 8MP (4K) | 8MP (4K) | 50MP |
| Optical format | 1/4" | 1/2.9" | 1/2.8" | 1/2.8" | 1/2.8" | 1/1.8" | 1/1.56" |
| Pixel size | 1.12 µm | 3.45 µm | 2.9 µm | 2.0 µm | 1.45 µm | 2.0 µm | 1.0 µm |
| Interface | MIPI 2L | MIPI 1L/LVDS | MIPI 2/4L | MIPI 2/4L | MIPI 2/4L | MIPI 2/4/8L | MIPI 4L |
| Max fps | 1080P@30fps | 226fps | 1080P@60fps | 5MP@60fps | 4K@90fps | 4K@72fps | 50MP@24fps |
| HDR | No | No | ✅ | ✅ | ✅ | ✅ Clear | No |
| Global shutter | No | ✅ | No | No | No | No | No |
| AVDD | 2.8V | 3.3V | 2.9V | 2.9V | 2.9V | 3.3V | 2.8V |
| Best use case | Raspberry Pi V2 | Industrial FA | Security | Security | 4K Security | High-end 4K | ⚠️ Phone |
| DIY recommended | ✅ | ⚠️ Industrial | ✅ | ✅ | ✅ Top pick | ⚠️ Pricey | ❌ Not recommended |
IMX477 Module
Sony 12.3MP sensor, 1/2.3-inch, with interchangeable C/CS-mount lens. The standard sensor for Raspberry Pi HQ Camera — ideal for projects needing high-quality imaging and interchangeable lenses: microscopy, astronomy, industrial inspection.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | Sony IMX477 | ✅ |
| Optical format | 1/2.3 inch | ✅ |
| Effective pixels | 12.3MP (4056 × 3040) | ✅ |
| Pixel size | 1.55 µm × 1.55 µm | ✅ |
| Technology | BSI stacked CMOS | ✅ |
| Interface | MIPI CSI-2 (2/4-lane) | ✅ |
| Output format | RAW12 / RAW10 / RAW8 | ✅ |
| Max frame rate | Full res@60fps (10-bit), 4K@60fps, 1080P@240fps | ✅ |
| HDR | DOL-HDR (Digital Overlap HDR) | ✅ |
| Lens mount | C-mount / CS-mount (interchangeable) | ✅ |
| Production status | In production (at least until Jan 2030) | ✅ |
| Announced | April 2020 | ✅ |
| Typical applications | Raspberry Pi HQ Camera, microscopy/astronomy, industrial | ✅ |
Source: Sony IMX477 Flyer, Raspberry Pi HQ Camera product page
Purchasing tip: IMX477’s biggest advantage is interchangeable lenses — C-mount and CS-mount cover wide-angle to telephoto to macro. Best image quality in the Pi ecosystem. $50-70.
IMX708 Module
Sony 12MP Quad Bayer sensor, 1/2.3-inch, with PDAF phase-detection autofocus and HDR. The standard sensor for Raspberry Pi Camera Module 3 — the first Pi camera with hardware autofocus.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | Sony IMX708 | ✅ |
| Optical format | 1/2.3 inch | ✅ |
| Effective pixels | 12MP (4608 × 2592) | ✅ |
| Pixel size | 1.4 µm × 1.4 µm | ✅ |
| Technology | BSI stacked CMOS, Quad Bayer | ✅ |
| Interface | MIPI CSI-2 | ✅ |
| Output format | RAW10 | ✅ |
| Max frame rate | 1080P@50fps, 720P@100fps, 480P@120fps | ✅ |
| Autofocus | PDAF phase-detection autofocus | ✅ |
| HDR | Yes (up to 3MP output) | ✅ |
| Production status | In production (at least until Jan 2030) | ✅ |
| Announced | January 2023 | ✅ |
| Typical applications | Raspberry Pi Camera Module 3 (standard/wide/telephoto) | ✅ |
Source: Raspberry Pi Camera Module 3 product page and product brief
Highlight: IMX708 brings hardware autofocus (PDAF) to Raspberry Pi for the first time. Available in standard, wide, and telephoto versions. $25-30 — best price/performance for Pi MIPI cameras.
IMX296 Module
Sony Pregius global shutter sensor, 1/2.9-inch, 1.58MP. The standard sensor for Raspberry Pi Global Shutter Camera. Like the IMX273, it’s a Pregius global shutter sensor, but with official Pi ecosystem module and driver support.
Core Specs
| Parameter | Spec | Reliability |
|---|---|---|
| Sensor | Sony IMX296 | ✅ |
| Optical format | 1/2.9 inch | ✅ |
| Effective pixels | 1.58MP (1456 × 1088) | ✅ |
| Pixel size | 3.45 µm × 3.45 µm | ✅ |
| Technology | Pregius Global Shutter | ✅ |
| Interface | MIPI CSI-2 (1-lane) | ✅ |
| Output format | RAW10 | ✅ |
| Max frame rate | 60.3 fps (full resolution, 10-bit) | ✅ |
| Operating voltage | AVDD 3.3V, DVDD 1.2V, IOVDD 1.8V | ✅ |
| Lens mount | C-mount / CS-mount (interchangeable) | ✅ |
| Production status | In production (at least until Jan 2032) | ✅ |
| Announced | 2023 | ✅ |
| Typical applications | Raspberry Pi Global Shutter Camera, high-speed capture, industrial | ✅ |
Source: Sony IMX296 Flyer, Raspberry Pi Global Shutter Camera product page
IMX296 vs IMX273: Both are Pregius global shutter, 3.45µm pixels. IMX296 is the official Pi Global Shutter Camera sensor with full driver/docs; IMX273 is more industrial FA focused. For Pi projects choose IMX296, for industrial FA choose IMX273.
Module Comparison Summary
Key Parameters Comparison
Table corrected per official datasheets. Bolded items had errors in the original or need special attention.
| Parameter | OV2640 | OV5640 | OV7725 | GC0309 | OV7670 | OV3660 | GC2053 | GC4653 |
|---|---|---|---|---|---|---|---|---|
| Vendor | OmniVision | OmniVision | OmniVision | GalaxyCore | OmniVision | OmniVision | GalaxyCore | GalaxyCore |
| Resolution | 2MP | 5MP | 0.3MP | 0.3MP | 0.3MP | 3MP | 2MP | 4MP |
| Max size | 1600×1200 | 2592×1944 | 640×480 | 640×480 | 640×480 | 2048×1536 | 1920×1080 | 2560×1440 |
| Optical format | 1/4" | 1/4" | 1/4" | 1/9" | 1/6" | 1/5" | 1/2.9" | 1/3" |
| Pixel size | 2.2 µm | 1.4 µm | 6.0 µm | 2.5 µm | 3.6 µm | 1.4 µm | 2.8 µm | 2.0 µm |
| Interface | DVP | DVP/MIPI | DVP | DVP | DVP | DVP only | DVP/MIPI | MIPI only |
| Max fps | UXGA@15fps | QSXGA@15fps | VGA@60fps | VGA@30fps | VGA@30fps | 1080P@20fps | 1080P@30fps | 4MP@30fps |
| Output formats | YUV/RGB/RAW/JPEG | YUV/RGB/RAW/JPEG | YUV/RGB/RAW | YUV/RGB/RAW | YUV/RGB/RAW | YUV/RGB/RAW/JPEG | RAW Bayer | RAW Bayer |
| Autofocus | No | Yes (VCM) | No | No | No | No | Optional | PDAF |
| Low-light | Average | Average | Excellent | Average | Average | Good | Excellent | Excellent |
| Voltage | 1.7–3.3V (I/O) | 1.7–3.3V (I/O) | 3.3V | 2.8V typical | 1.8V/2.45-3V/1.7-3V | 1.5V core multi-rail | 1.8V (I/O) | 1.8V (I/O) |
| Typical power | ~125 mW | ~140 mA | ~80 mA | ~60 mA | ~60 mW | ~98 mA | ~57 mA | ~120 mA |
| I²C address | 0x30 | 0x3C | 0x21 | Vendor | 0x21 | See DS | Vendor | Vendor |
| Price tier | Low-mid | Mid-high | Mid | Very low | Low | Low-mid | Mid | Mid-high |
| ESP32 compatible | ✅ | ✅ | ✅ | ✅ | ⚠️ needs FIFO | ✅ | ⚠️ DVP mode only | ❌ |
Selection Recommendations
- Education (Arduino/STM32): OV7670 — Richest ecosystem, most tutorials. Note three-rail power.
- Wi-Fi streaming (ESP32-CAM): OV2640 — Built-in JPEG, balanced power/quality, de facto standard.
- High-res photo (ESP32/STM32): OV5640 — 5MP + autofocus, best entry-level quality. Power VCM on AF versions.
- Night vision / machine vision (low-light): OV7725 — 6.0µm pixels, low-light king. ⚠️ EOL, surplus stock.
- Ultra low cost (access/POS): GC0309-8225N — Lowest price, meets basic needs. Power at 2.8V.
- 3MP upgrade (ESP32): OV3660 — BSI, drop-in for OV2640. Note lower frame rate than OV2640.
- Security surveillance (indoor/outdoor): GC2053 — Large sensor/pixels, MIPI high-speed, low power.
- High-end security / AI vision: GC4653 — 4MP + BSI high sensitivity. ⚠️ MIPI only, not for ESP32.
- Raspberry Pi / Jetson entry (MIPI): IMX219 — Pi Camera V2 standard, most mature driver, plug-and-play.
- Industrial vision / high-speed capture: IMX273 — Global shutter, 226fps, zero jello effect.
- Security (1080P nighttime): IMX307 — 2.9µm + STARVIS, strong night vision. Pair with Hi3516.
- Security (high resolution): IMX335 — 5MP STARVIS, more detail. Pair with Hi3516/RV1106.
- 4K security / NVR: IMX415 — 4K STARVIS, best module ecosystem, top pick.
- High-end 4K security (2024): IMX678 — STARVIS 2 + Clear HDR, best image quality. ⚠️ AVDD 3.3V.
- ⚠️ Don’t buy for DIY: IMX766 — 50MP phone sensor, no official datasheet, needs custom driver.
Application & Wiring Guide
ESP32 Typical Wiring
⚠️ Important disclaimer: The pin mapping below is based on common AI-Thinker ESP32-CAM module configurations. There is no official unified pin standard for ESP32-CAM — the esp32-camera library examples explicitly state “pin configurations vary by board”. Different vendors (AI-Thinker, Freenove, SunFounder, Espressif official EVB) may all differ. Always verify which board you have before wiring.
AI-Thinker ESP32-CAM common mapping (applies to OV2640 / OV5640 / OV7725):
| Module Signal | ESP32 GPIO | Function |
|---|---|---|
| XCLK | GPIO 27 | Master clock via LEDC PWM at 20 MHz |
| PCLK | GPIO 22 | Pixel clock input |
| VSYNC | GPIO 25 | Frame sync input |
| HREF | GPIO 23 | Line sync input |
| D0 | GPIO 32 | Data bit 0 |
| D1 | GPIO 35 | Data bit 1 |
| D2 | GPIO 34 | Data bit 2 |
| D3 | GPIO 5 | Data bit 3 |
| D4 | GPIO 39 | Data bit 4 |
| D5 | GPIO 18 | Data bit 5 |
| D6 | GPIO 36 | Data bit 6 |
| D7 | GPIO 19 | Data bit 7 |
| SIOC | GPIO 26 | SCCB clock |
| SIOD | GPIO 21 | SCCB data |
| PWDN | GPIO 0 | Power-down control (optional) |
| RESET | GPIO 15 | Reset control (optional) |
Verification: esp32-camera repo examples/camera_example/main/camera_pinout.h (PCLK/VSYNC/HREF confirmed line-by-line against source).
STM32 Wiring
STM32F4/F7/H7 series feature DCMI (Digital Camera Memory Interface) peripheral for direct hardware reception of DVP data streams:
- Connect D0–D7 to DCMI_D0–DCMI_D7 corresponding GPIOs
- PCLK → DCMI_PIXCK
- HSYNC → DCMI_HSYNC
- VSYNC → DCMI_VSYNC
- I²C_SCL/SDA → any I²C peripheral
- Enable DCMI + DMA transfer, target buffer in SRAM or SDRAM
Power Design
- Dedicated regulation: Camera modules can draw 100–150 mA 🔍 during capture (varies significantly by sensor — OV5640/GC4653 higher, GC2053/OV7670 lower). Use a dedicated LDO (e.g., AMS1117-3.3) to avoid voltage sag from sharing MCU regulator.
- Decoupling caps: Place 10 µF + 100 nF parallel decoupling caps near the module VCC pin, as close to the FPC connector as possible. Standard practice.
- Signal integrity: Keep DVP trace length within 10 cm; for longer runs, add 22–33 Ω series termination resistors on PCLK and data lines. ⚠️ Low-speed DVP (PCLK < 30MHz) may not need termination — depends on actual PCB layout.
Troubleshooting
| Symptom | Likely Cause | Fix |
|---|---|---|
| No image, no PCLK waveform | XCLK missing or wrong frequency | Measure XCLK with scope, confirm 6–24 MHz |
| Wrong colors / color cast | Output format mismatch with MCU decoder | Check register config, confirm RGB565 or YUV422 |
| Image banding / jitter | Power ripple or PCLK interference | Improve power filtering, shorten data lines |
| SCCB config failure | Wrong I²C address or no pull-ups | Check address table in this doc, add 4.7kΩ pull-ups |
| Low frame rate | Low XCLK or resolution too high | Raise XCLK to 24 MHz, reduce resolution |
| Blurry image (OV5640 AF) | VCM unpowered or AF registers unconfigured | Verify AF_VCC supply, initialize AF firmware |
| OV7670 garbled | DVDD not separately powered | Confirm on-board 1.8V LDO output |
Practical Purchasing Advice
Lessons learned from my own mistakes:
Choose controller first, camera second. ESP32 only does DVP — choose OV2640/OV5640/OV7725/OV3660. Only MIPI-capable controllers (RV1106, Hi3516) can use 4MP sensors like GC4653. Your controller’s interface defines your options.
Check if the module has FIFO. OV7670 comes in versions with and without AL422B FIFO. Running non-FIFO on bare STM32 is nearly impossible for normal imaging. The cheap tier is usually non-FIFO.
AF versions need AF_VCC pin. OV5640 AF modules need separate VCM motor power. Some cheap modules merge AF power with main supply, some don’t expose it. Check pinout before buying.
Voltage mismatch is the most common board-frying cause. Don’t just connect 3.3V blindly. GC0309’s optimal point is 2.8V, OV7670 core needs 1.8V. When unsure, check the voltage table in this doc or read the datasheet.
EOL parts (OV7725) carry inventory risk. Officially discontinued; still available on Taobao/LCSC now, but not recommended for new mass production. Fine for prototyping.
GalaxyCore datasheets are harder to find than OmniVision. If Chinese channels don’t have GC-series datasheets, try galaxycore.com.cn official site, or module vendor pages like MuchVision, Camemaker. Sipeed Wiki is also a good supplemental source.
Sony IMX Series Purchasing Supplement
The purchasing advice above focuses on OV/GC series (DVP ecosystem). Here are tips specific to Sony IMX series (MIPI ecosystem):
Where to buy IMX modules: IMX219 is widely available on Taobao/LCSC (Pi V2 compatibles). IMX415 modules from LuckFox, Radxa, Camemaker are recommended. IMX335/IMX307 are mostly found through security solution providers. IMX678 is a 2024 new release, modules are still scarce.
Don’t buy phone salvage parts for embedded use. Phone sensors like IMX766 are cheap on Taobao (50-300 RMB), but have no datasheet, no driver, and non-standard FPC. You’ll most likely waste time trying to light them up.
Watch the STARVIS generation. Sony officially defines three generations: STARVIS (original, 2014), STARVIS 2 (2021, wider dynamic range), STARVIS 3 (latest, LOFIC structure). Confirm which generation you’re getting.
Global shutter is only in the Pregius line. If your project involves high-speed motion capture (conveyor belts, sports analysis, 3D scanning), only Pregius global shutter sensors like IMX273 can avoid jello effect. All other IMX and OV/GC sensors are rolling shutter.
References
All parameters in this article verified against the following official datasheets and authoritative sources:
- OmniVision official product pages — OV2640 / OV5640 / OV7725 / OV7670 / OV3660 (ovt.com)
- OV2640 datasheet — uctronics.com/download/OV2640_DS.pdf
- OV5640 datasheet v2.03 — cdn.sparkfun.com/datasheets/Sensors/LightImaging/OV5640_datasheet.pdf
- OV5640 Product Brief — media.digikey.com/pdf/Data%20Sheets/OmniVision%20PDFs/OV5640_PB_3-4-11.pdf
- OV7725 datasheet — pdf.datasheet.live/10e069da/ovt.com/OV07725-V28A.pdf
- OV7670 datasheet — w2.electrodragon.com/Chip-dat/OmniVision-dat/OV7670-dat/OV7670-ds.pdf
- OV3660 datasheet — download.kamami.pl/p1196945-OV3660%20Datasheet.pdf
- GC0309 datasheet V1.0 (2009-12-28) — GalaxyCore Inc.
- GC2053 datasheet V1.1 (2018-11-29) — GalaxyCore / CK Vision
- GC4653 datasheet — Camemaker; Sipeed Wiki
- Espressif esp32-camera driver source — github.com/espressif/esp32-camera
- Sony Semiconductor Solutions — STARVIS trademark confirmation (STARVIS is Sony-exclusive tech)
- Linux Kernel ov7670.c — I²C address definition (android.googlesource.com)
- SCCB Functional Specification v2.2 — protocol spec
- Sony IMX219 datasheet — dlscorp.com/wp-content/uploads/2018/04/Sony-IMX219-Datasheet.pdf
- Sony IMX273 official Flyer — sony-semicon.com/files/62/flyer_industry/IMX273_287_296_297_Flyer.pdf
- Sony IMX307 official Flyer — sony-semicon.com/files/62/flyer_security/IMX307LQD_LQR_Flyer.pdf
- Sony IMX335 official Flyer — sony-semicon.com/files/62/flyer_security/IMX335LQN_Flyer.pdf
- Sony IMX415 official Flyer — sony-semicon.com/files/62/pdf/p-12_IMX415-AAQR_AAMR_Flyer.pdf
- Sony IMX678 official Flyer — sony-semicon.com/files/62/flyer_security/IMX678-AAQR_AAQR1_Flyer.pdf (© 2024)
- Sony IMX766 — OPPO official specs / IADIY module page / DxOMark
- Sony STARVIS technology — sony-semicon.com/en/technology/security/
- Raspberry Pi Camera documentation — raspberrypi.com/documentation/accessories/camera.html