I'm not sure if this is the right part of the forum for this question since I'm not using the official Raspberry Pi cam, but it seems like the place most likely to have an answer.
I recently bought a handful of ArduCam's OV9281 camera modules for a project which requires an external trigger pulse for camera synchronization. In their default mode, the cameras worked great, easily streaming 60fps video over ethernet with low latency (via gstreamer). But then I overwrote some registers on the board, per ArduCam's provided code, and while I do gain full control over the framerate via a pulse train generated by pigpio on PWM0, the exposure settings get screwed up the moment the registers are written, with timing of the change easily modulated by a sleep function preceding the write_regs command (before/after views of my ceiling).
I have read through ArduCam's fairly minimal documentation, tested many permutations of the functions on their GitHub, swapped out both the raspberry pi and the ArduCam module in my setup in case they were defective, and moved the camera so that it's not facing a bright object. But with their source code wrapped up in a shared object file, I can't dig any further, and their support team has been very slow to respond to my questions.
Does anyone have any insight into what could be causing this problem, and whether it is something that could be fixed without ArduCam editing their source code?