Hi, I’ve got an Arducam OV9281-B0165 that’s just showing a black screen. I also can’t get the trigger mode command to work — v4l2-ctl -d /dev/v4l-subdev0 -c trigger_mode=1 just comes back as not recognized. I previously tried some firmware updates with the IMX298 and IMX230 packages, not sure if that messed something up.
That sounds like the firmware wasn’t flashed correctly, or the update procedure itself was incomplete. The IMX298/IMX230 packages aren’t the right ones for this camera, so the flash is likely incomplete and that’s why the subdev control isn’t there. Here’s the correct update procedure:
- Power the Raspberry Pi off and short the camera board with a jumper wire as shown in the picture I’m sending you.
- Power the Pi back on, and while it’s restarting, remove the jumper wire from the camera board.
- Decompress the firmware package and pick the file that matches your kernel version (32-bit or 64-bit).
- Follow the update steps in the link.
I’ve sent the firmware package and the shorting-point picture through private message — check your messages and use those.
Thanks, that fixed the black screen and got the external TTL shutter control working. But now I’m running into a different issue: the camera won’t record at 240 FPS. The fastest I can get is about 166.67 FPS. Below that, the frame rate and my external TTL frequency match, but once I go faster than 166.67 Hz the camera just can’t keep up.
Glad the firmware part is sorted. For the frame rate, can you share your environment details — camera model, firmware state, and the library you’re using — plus the configuration code you’re running? That’ll help figure out whether it’s a config limit or something in the pipeline.
Sure. Environment: OV9281-B0165 with the firmware updated to enable external TTL shutter control, using picamera2 (libcamera). I’ve tried two configs:
config=picam2.create_video_configuration(main={“size”: (160,120)}, controls={“FrameDurationLimits”: (10,10), “Sharpness”: 0.0, “AeEnable”: False}, buffer_count=15)
and the same thing at 640x400.
I also reduced video quality, turned off features like Sharpness and auto exposure, and even implemented a circular buffer to let it follow faster TTLs. I tested external TTLs at 170Hz, 200Hz, and 240Hz — the timestamps in the recorded videos all top out around 166.67 FPS. Resolutions 160x120 and 640x400 made no difference. I don’t have any logs to share unfortunately.
Thanks, that’s useful. The bare OV9281-B0165 sensor can reach 240 frames when you’re grabbing data directly from the camera sensor. Once preview and processing are added to the pipeline, performance drops — roughly 30% is sacrificed. 240 × 70% = 168 FPS, which lines up with the ~166.67 ceiling you’re seeing. So the 170Hz, 200Hz, and 240Hz TTLs all cap out at the same effective rate because the bottleneck is the preview/processing overhead, not the sensor itself.
So this is expected then? Is there any way to actually hit 240 FPS with this setup, or do I just have to live with ~166?
Right, it’s a normal phenomenon and there isn’t really a better way to optimize it within the preview/processing pipeline. Expect a maximum effective frame rate of roughly 168 FPS when previewing/processing is involved. The full 240 FPS is only achievable when reading data directly from the camera sensor without the preview/processing overhead. If 240 FPS is a hard requirement, you’d need a direct sensor read path rather than the picamera2 preview pipeline.