|
IMX500 MCU SDK
API reference for the Arducam IMX500 MCU SDK
|

Bring sensor-side AI vision to MCU and low-cost SoC products.
imx500-mcu-sdk helps MCU applications control Arducam IMX500 camera modules, start inference streams, and consume AI metadata or tensors over a portable I2C + SPI interface. Use it when your product needs vision events from the sensor, not a full Linux vision pipeline.
Start with one small win. Each mission gives you a visible checkpoint and unlocks the next IMX500 product path.
| Mission | Start with | Success checkpoint | Next unlock |
|---|---|---|---|
| Validate the camera over USB | Python USB tools | USB bridge detected, SDK imx500_open() completes, one metadata frame is received, optional JPEG preview is saved | USB3 UVC deployment path / B0566 |
| Run a visible AI demo | ESP32-P4 example | LCD preview is visible and the serial log prints parsed AI output | MCU integration path |
| Read AI metadata on an MCU | Pico 2 serial stream example | MCU receives an IMX500 metadata frame and forwards or parses it into an event | SPI metadata productization path |
| Prototype with MicroPython | Pico MicroPython metadata parse example | Pico imports imx500_mcu_sdk, parses metadata, and prints SSD MobileNet detections or UART product frames | MicroPython user module |
| Bring up Nordic MicroPython | nRF52840 DK MicroPython SPI receive example | nRF52840 DK imports imx500_mcu_sdk, opens IMX500 over TWI1, and reads one metadata frame over SPIM3 | MicroPython user module |
| Test a model | Model validation mission | Known model or real hardware output produces parsed metadata | Application pack / model conversion |
| Train your own model | Custom model training guide | Trained model is converted, packaged into .fpk + network_info.txt, flashed to B0642, and parsed with custom post-processing | Model validation to production |
| Port the SDK to your board | Integration guide: 中文, English, 日本語 | Your platform callbacks can probe the module, start the stream, and read metadata | Custom MCU product path |
| Move toward production | Production checklist | Interface, model, optics, enclosure, and factory test flow are confirmed | Design-in, customization, and volume supply |
Need the API surface while building? Use the Doxygen API docs.
If you just received a B0642 module, validate the camera from a PC before wiring an MCU. The optional Python host tools can exercise the USB bridge, imx500_mcu_sdk.imx500_open(), metadata reads, JPEG preview, and model flashing flows.
Before connecting the module to the host PC, hold down the module MODE button, then plug in the host-side USB cable. Keep MODE button pressed until the USB bridge is detected by the host.
Run the bundled YOLOv8 object-detection preview. The tool loads the selected model and matching network_info.txt directly for this validation session, so you do not need to flash a model first:
Press q or Esc in the OpenCV window to stop the preview. You passed this checkpoint when the tool connects to the USB bridge, imx500_open() succeeds, and the live preview shows detections.
The tool supports four bundled YOLO tasks:
| --task value | Bundled model | Preview result |
|---|---|---|
| classification | YOLOv8n-cls | Top image classes and confidence scores. |
| object_detection | YOLOv8n | Object boxes, COCO class labels, and confidence scores. |
| pose_estimation | YOLOv8n-pose | Person boxes plus 17 COCO body keypoints and skeleton links. |
| segmentation | YOLOv8n-seg | Object boxes, COCO class labels, and per-instance masks. |
Next unlocks:
The observed frame rates for the benchmarked models are summarized below. All values are frames per second (FPS).
| Model | Task | MIPI image | SPI: JPEG input tensor + output tensor | SPI: output tensor only |
|---|---|---|---|---|
| YOLOv8n | Object detection | 30 | 3.5 | 15 |
| YOLOv8n-pose | Pose estimation | 30 | 3.5 | 10 |
| YOLOv8n-cls | Image classification | 30 | 2.13 | 30 |
| YOLOv8n-seg | Instance segmentation | 30 | 3.3 | 7.5 |
| SSD MobileNet | Object detection | 30 | 3.3 | 15 |
| HigherHRNet | Pose estimation | 30 | 2.45 | 4 |
| MobileNetV2 | Image classification | 30 | 6.5 | 30 |
| DeepLabV3+ | Semantic segmentation | 30 | 2 | 4.46 |
See the benchmark documentation for metric definitions and a link to the reproducible Pico 2 SPI benchmark.
If the bundled models do not match your scene, start with the custom model training guide. It walks through the YOLOv8n example path from training, IMX500 conversion and quantization, Raspberry Pi or online packaging, .rpk to .fpk extraction, USB flashing to B0642, and the custom post-processing work required to turn output tensors into product events.
After the custom model produces readable metadata, use the model validation to production path to decide whether the result is ready for USB, MIPI/Linux, or SPI/MCU productization.
The SDK provides:
| Platform | Status | Entry point |
|---|---|---|
| ESP32-P4 Function EV Board | Reference display and metadata demo | examples/platform/esp/esp32p4 |
| Raspberry Pi Pico | C++ SPI receive and MicroPython SDK module examples | examples/platform/rpi/pico |
| Raspberry Pi Pico 2 | Wiring, serial metadata stream, inference FPS benchmark, and production test examples | examples/platform/rpi/pico2 |
| Raspberry Pi Pico W | Person-detection ROI MVP and SPI receive test examples | examples/platform/rpi/pico_w |
| Raspberry Pi 5 | MIPI preview, Linux I2C/SPI metadata test, and I2C payload model operations | examples/platform/rpi/rpi5 |
| Nordic nRF52840 DK | MicroPython SDK module SPI metadata smoke test | examples/platform/nordic/nrf52840_dk/micropython_imx500_spi_receive |
| Other MCU platforms | Port by implementing the SDK adapter callbacks | Integration guide: 中文, English, 日本語 |
Use the ESP32-P4 example if you want the shortest path to a visible demo. It combines:
Then follow the board wiring and project-specific notes in examples/platform/esp/esp32p4/README.md.
Most ports follow the same sequence:
For the detailed integration manual, see 中文, English, or 日本語.
The IMX500 module produces sensor-side AI output. Your MCU firmware typically turns that raw output into application logic:
Example events include person_count = 3, zone_occupied = true, package_detected = true, or gesture = wake.
| Path | Purpose |
|---|---|
| ArducamIMX500SDK.h/.cc | Public SDK API and core implementation |
| ai_driver.h/.c | Platform callback registration interfaces |
| imx500_mcu_sdk.cmake | SDK source collection and compile-time configuration |
| python_bindings/ | Optional Python host tools and MicroPython user module support |
| docs/ | API landing page, performance benchmark, and integration documentation |
| examples/ | Platform reference projects |
| third_party/flatbuffers/ | FlatBuffers dependency used by network-info parsing |
Before moving beyond evaluation, confirm the product path, model output, optics, enclosure, firmware flow, factory test, and support expectations.
| Need | Go to |
|---|---|
| Freeze production readiness | Production Design-In Checklist |
| Review lens, FOV, illumination, enclosure, or mounting | Optical Selection |
| Build a repeatable station or EOL test | EOL Test |
| Decide when to contact Arducam | Support Options |
Path details:
| Stage | What you get | Arducam can help with |
|---|---|---|
| First signal | Camera detected, SDK opens the module, metadata frame received | Bring-up support and debug workflow |
| Model validation | Known model or custom model result on IMX500 | Model conversion, porting, and post-processing |
| Prototype | Product event output in your application | Optics, firmware, metadata parsing, and interface review |
| Production | Stable hardware/software package and test flow | Design-in, factory test, customization, SLA, and long-term supply |
See the repository license terms before using this SDK in a product.
For module information and production design-in discussions, start from the B0642 IMX500 AI camera module product page or the support options.