Hi, I’m working with an Arducam camera (SKU: B0299) that uses the Omnivision OV9282 sensor, and I can’t get it to output any image data at all. I’m assuming most OmniVision sensors need some kind of software initialization before they’ll stream, so my question is: are there specific registers that have to be set on the device before it’s usable? If so, can you share the initialization script (the register list and the values they need to be set to)? Any configuration/init code you have would help a lot.
Hi, thanks for reaching out. You’re correct that the OV9282 needs software initialization before it will output anything — these sensors don’t start streaming out of the box, they need their register map configured first. That’s almost certainly why you’re seeing no image data.
Before I point you at the right resources, a couple of quick questions so we can narrow this down:
- What’s the host platform you’re running this on (Raspberry Pi, a custom board, USB, MIPI, etc.)?
- How are you talking to the sensor right now — over I2C directly, or through an existing driver/library?
Also, which interface is your B0299 board set up for? The register set and init flow can differ depending on how it’s wired up.
Host is a custom board, MIPI interface, and I’m probing it over I2C. Right now I just try to read the sensor ID and then set it up, but I’m not even sure my I2C writes are landing. Can you confirm the OV9282’s default I2C address? I’ve been assuming it’s 0x60 (7-bit) and I want to rule that out as a problem.
Yes, 0x60 (7-bit) is the expected address for the OV9282, so you’re on the right track there. A good sanity check before anything else: read the chip ID registers.
- Register 0x300A should read 0x92
- Register 0x300B should read 0x82
If you can read back 0x9282, then your I2C link is fine and the problem is purely the initialization sequence — the sensor just won’t stream until the full register configuration is written. If you can’t read the chip ID at all, then we need to fix the I2C side first.
Can you let me know what values you actually read back from those two registers?
OK, good news — I can read the chip ID fine. I get 0x92 from 0x300A and 0x82 from 0x300B, so I2C is definitely working. That’s why I’m stuck: the link is fine, but still no image data. So it really does look like a missing initialization sequence. Where can I find the register list and values that need to be written to bring the OV9282 up? I haven’t been able to get a full, known-good init table anywhere.
That confirms it — since the chip ID reads correctly, the hardware and I2C are good, and the remaining piece is the initialization. The OV9282 needs its full register map programmed (clock/PLL setup, timing, format, and the streaming controls) before it will emit frames, and there’s no single universal table I can hand you that works for every host — it depends on your MIPI configuration.
For the B0299 / OV9282 on a MIPI host, the best starting point is the multi-camera support branch of the depthai-python repo:
https://github.com/luxonis/depthai-python/tree/multi_cam_support
That branch has working OV9282 configuration and multi-camera init examples you can reference for the register setup and initialization flow. Take a look at how they bring the sensor up there and compare it against what you’re writing.
Thanks, I’ll dig into that branch. Quick follow-up: when you say the init depends on my MIPI config, does the register sequence itself change, or is it the same registers with different PLL/timing values? I want to know what I should expect to have to adjust versus what’s fixed for the OV9282.
Good question. The set of registers you touch is largely fixed for the OV9282, but the values you load into the clock/PLL and timing-related registers will change based on the MIPI lane count, link frequency, and your target resolution/framerate. So expect the structure (which registers) to be reusable, and the specific PLL/timing values to need tuning to match your host.
So to summarize where this stands:
- The hardware and I2C link are confirmed good (chip ID reads 0x92/0x82 at 0x60).
- The camera won’t output image data because the OV9282 hasn’t been initialized with the proper register configuration.
- Use the multi_cam_support branch of depthai-python (linked above) as the reference for the OV9282 initialization and register values, adjusting the PLL/timing registers to match your MIPI setup.
If you get it streaming and hit a snag with specific register values, post back and we’ll take a look.