This repository is a tested proof of concept for connecting an STMicroelectronics VD56G3 monochrome global-shutter image sensor to a Himax HX6538/WE2 processor over two-lane MIPI CSI-2.
The diagnostic firmware brings the system up in explicit, independently
verifiable gates. It starts without touching the sensor and exposes probe,
boot, configure, pattern, live, capture, and shutdown commands over
UART. It never writes sensor NVM.
The complete path was exercised on 2026-08-03:
| Check | Measured result |
|---|---|
| Power | VCORE 1.10 V, VANA 2.75 V, VDDIO 1.77 V |
| Sensor clock | Approximately 12 MHz |
| Identity | Model 0x5603, revision 0x3110 |
| Output | Native 1124 x 1364 RAW8 at an 8.43 fps target |
| CSI-2 | Two lanes at 440 Mbps/lane |
| DMA SRAM | 1,533,296 bytes used (77.83%); 426.64 KiB remains |
| Internal pattern | CRC-valid 1,533,136-byte vertical-grey frame with no line shifts |
| Live pixels | CRC-valid optical scene with no sensor or datapath errors |
| Safe stop | Sensor returned to XSHUTDOWN low without a power cycle |
See the measured bring-up log for the exact observations and CRCs.
- Seeed Grove Vision AI Module V2 with Himax HX6538/WE2
- Raspberry Pi 15-pin to 22-pin FFC cable
- ST STEVAL-CAM-M0I P-board
- ST CAM-56G3 promodule with VD56G3 sensor
The physical chain and connector assumptions are documented in dev-setup.md.
Prerequisites on Windows:
- Git
- Python 3.10 or newer
- PowerShell
- GNU Make with an MSYS-compatible shell
- A fine high-impedance oscilloscope probe for the passive clock gate
Bootstrap the pinned Himax/Seeed SDK, recovery image, Arm GNU toolchain, and Python packages, then build and test:
./tools/bootstrap.ps1
./tools/build.ps1 -Clean
python -m unittest discover -s tests -vDo not flash until bootstrap.ps1 reports the factory recovery image and records
its SHA-256. Continue with the gated bring-up procedure.
| Path | Purpose |
|---|---|
firmware/vd56g3_bringup/ |
WE2 diagnostic firmware and vendor-build integration |
tools/bootstrap.ps1 |
Materialize pinned dependencies and recovery image |
tools/build.ps1 |
Stage, compile, sign, and record the diagnostic image |
tools/flash.ps1 |
Confirmed XMODEM update with recovery-image validation |
tools/vd56g3_uart.py |
Gated UART command and capture client |
tools/vd56g3_protocol.py |
CRC-checked binary frame protocol |
tests/ |
Offline protocol regression tests |
docs/design.md |
Firmware architecture and current limitations |
datasheets/SOURCES.md |
Document provenance without redistributing vendor PDFs |
This is diagnostic proof-of-concept firmware, not production camera firmware. It supports VD56G3 cut-3 silicon only, uses a single snapshot buffer, and has not yet implemented exposure/gain tuning or continuous host streaming.
The generated update is a signed whole-image artifact containing the pinned vendor boot partitions as well as this application. The flash script does not issue a separate mass-erase command, but the normal vendor update may rewrite those signed partitions. Keep the validated factory recovery image available.
Local build products, captures, SDK/toolchain material, and vendor PDFs are intentionally excluded from Git.
No license has been selected for this repository. Public visibility alone does not grant permission to copy, modify, or redistribute the project. Dependencies and referenced vendor documents remain subject to their own licenses and terms.