Ok I am getting some interesting results without doing any hardware modification.
I am using the OAK-FFC-4p and have the OVA mono cams connected to cam_b and cam_c and the imx477 connected to cam_a and cam_d. These were all purchased from the luxonis store and utilize the arducam 796 cable where the fsin and strobe are put as test point on the cable.
Now in the code if I add this:
cam_A.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 4LANE
cam_B.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.OUTPUT) # 2LANE
cam_C.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 2LANE
cam_D.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 4LANE
# AND importantly to tie the FSIN signals of A+D and B+C pairs, by setting a GPIO:
# OAK-FFC-4P requires driving MXIO6 high (FSIN_MODE_SELECT) to connect together
# the A+D FSIN group (4-lane pair) with the B+C group (2-lane pair)
config = dai.Device.Config()
config.board.gpio[6] = dai.BoardConfig.GPIO(dai.BoardConfig.GPIO.OUTPUT,
dai.BoardConfig.GPIO.Level.HIGH)
with dai.Device(config) as device:
device.startPipeline(pipeline)
It does not working and just waits for the frame and never gets it. the .get() method on the queue does not deliver any frames. But if I simply comment out the cam_b frame sync output
cam_A.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 4LANE
# cam_B.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.OUTPUT)
cam_C.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 2LANE
cam_D.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 4LANE
Then the frames are delivered. So I can not set the frame sync mode to OUTPUT even for the OVA cams. This may make sense because that is what was used in the forum post used as an example.
cam_b and cam_c seem to be hardware syncing as there is no noticeable latency. Maybe this default but they are synced even without me adding any frame sync code, they are synced by default.
here is the weird thing. now i have added the frame sync code for all four cameras to my python script but with cam_b commented out and not set to output like so:
cam_A.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 4LANE
# cam_B.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.OUTPUT) # 2LANE
cam_C.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 2LANE
cam_D.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 4LANE
# AND importantly to tie the FSIN signals of A+D and B+C pairs, by setting a GPIO:
# OAK-FFC-4P requires driving MXIO6 high (FSIN_MODE_SELECT) to connect together
# the A+D FSIN group (4-lane pair) with the B+C group (2-lane pair)
config = dai.Device.Config()
config.board.gpio[6] = dai.BoardConfig.GPIO(dai.BoardConfig.GPIO.OUTPUT,
dai.BoardConfig.GPIO.Level.HIGH)
with dai.Device(config) as device:
device.startPipeline(pipeline)
And with this in the code and without any hardware modification it seems like the color cams are utilizing hardware syncing too. How can this be possible? Before there was noticeable latency when I just had the 2 color cameras attached to the 4P but when I have the 2 mono cams and the 2 color cams, with the code above (notice no camera is set to output) the cameras including the color cameras are all hardware synced and have no noticeable latency at all. Again there was quite a bit of noticeable latency when I just had two color cams connected to the OAK-FFC-4P even if they were connected to the 4 MIPI lanes or 2 MIPI lanes just having two color cameras did not hardware frame sync. But when I add the OVA mono cam and without in the code setting any camera to output it still seems to be hardware frame synced.
I am puzzled can someone clue me in what is going on here.