Arducam 12MP*2 synchronized stereo camera kit not detected on Raspberry Pi 3B+

Stuck with an Arducam 12MP*2 Synchronized Stereo Camera Bundle Kit for Raspberry Pi (B0265R) on a Pi 3B+. The Pi won’t detect either camera at all. I’ve already swapped the Pi for another 3B+ and gone through basically every tutorial and forum post I could find, so I don’t think it’s a simple software setup mistake. Anyone else run into this? I’m starting to suspect the camarray HAT or one of the cables is bad.

Hi, let’s not jump to hardware just yet. Can you run a quick diagnostic for me? Reboot the Pi and run:
wget -O arducam-camera-bug-report https://github.com/ketai-dhr/arducam-camera-bug-report/releases/download/tools/arducam-camera-bug-report
chmod +x ./arducam-camera-bug-report
./arducam-camera-bug-report
That will generate arducam-bug-report.txt in the current directory. Attach it here and we’ll see what the Pi is actually seeing.

Done. I ran the three commands and attached arducam-bug-report.txt.

Thanks. Looking at the report, the Pi is actually detecting the camera and it’s working fine at the hardware level. The ‘Embedded data buffer’ error you’re seeing is a software problem, not a detection/hardware failure. It points to the libcamera installation - you need to be on the Arducam build of libcamera, not the stock one. Follow the getting started steps here and try again: libcamera and rpicam-apps - Arducam Wiki

I installed libcamera from that guide, but I’m still getting the ‘Embedded data buffer’ error when I run the Arducam stereo demo 1_test.py. I’ve re-seated and checked all the connections several times. Now I’m wondering if it’s a bad port on the camarray HAT or a faulty cable. I’ve attached an updated bug report and a screenshot of the error.

I went through the updated report and the screenshot. The camera is normal - it can capture images using the libcamera command, which is what the image shows. The problem is that stereo_depth_demo is built on the legacy camera stack, and that stack isn’t supported on Bullseye OS. That’s why the demo fails even though the camera itself works. Arducam is planning to rebuild stereo_depth_demo for Bullseye, so you’ll need to wait for that update. Bottom line: it’s an OS compatibility issue, not a fault with the camera or HAT.

Ok, while I wait on that, I also have a Jetson Nano with the Arducam 12MP*2 Synchronized Stereo Camera Bundle Kit for Jetson Nano/Xavier NX (two IMX477 modules, CS lens, camarray HAT). The quick start guide worked and both cameras show up on screen, but when I run stereo_depth_demo 1_test.py I get ‘inappropriate ioctl for device’. I added print statements and tracked it to utils.py line 101:
ret = fcntl.ioctl(self.vd, VIDIOC_R_DEV, dev)
Script: MIPI_Camera/Jetson/Jetvariety/stereo_depth_demo/1_test.py at master · ArduCAM/MIPI_Camera · GitHub
utils.py: MIPI_Camera/Jetson/Jetvariety/stereo_depth_demo/utils.py at master · ArduCAM/MIPI_Camera · GitHub

That error is a code compatibility problem, not your wiring. The script you’re running is under the Jetson/Jetvariety path, and it’s written for the Jetvariety camera. It isn’t compatible with your native/IMX477 camera module. That mismatch is exactly what triggers ‘inappropriate ioctl for device’ at utils.py line 101. There isn’t a software fix I can give you - the Jetvariety demo code can’t be used with the camera you have.

Understood, but the README in the stereo_depth_demo folder of that Jetvariety repo says the complete steps for depth sensing with the stereo camera HAT are in that folder. I followed it and the depth sensing part just doesn’t work. Is there working code or details anywhere for generating a depth map with this HAT? Depth sensing is the whole reason I bought it.

Just to be clear about the repo layout: the demo you pulled is under the Jetson/Jetvariety folder, not the imx477 folder. That code targets the Jetvariety camera, so it doesn’t apply to the native/IMX477 stereo HAT you have. That’s why the README’s depth sensing steps fail on your setup.

That still doesn’t answer what I actually asked. For a Jetson Nano with the native IMX477 stereo camarray HAT, what’s the correct ioctl operation to use instead of VIDIOC_R_DEV? And is there any code that produces a depth map for this hardware? I keep getting sent to the Jetvariety folder, which isn’t the right one.

I hear you. The reason I keep pointing back to the camera type is that it’s the root cause here. You have a native camera, but that Jetvariety demo code - including the ioctl call at utils.py line 101 - is written for the Jetvariety camera. They use different driver stacks, so there isn’t a ‘correct’ VIDIOC_R_DEV replacement to swap in; the whole code path is for a different camera type. For a depth map you’d need a demo built on the native camera path instead. The quick start docs split these two cases: native cameras (Quick start - Arducam Wiki) and Jetvariety cameras (Quick start - Arducam Wiki). The stereo_depth_demo/utils.py you’re running is the Jetvariety one and it’s incompatible with your native IMX477 camera, which is what causes the ‘inappropriate ioctl for device’. At the moment I don’t have a compatible native-camera stereo depth demo to point you to.