Arducam CamArray HAT with 4x IMX219 shows no cameras on Raspberry Pi 4

Hey everyone, I’m having trouble getting my Arducam CamArray HAT to work with my setup. When I run libcamera it just says “no cameras available.” I’m using a Raspberry Pi 4 with four Raspberry Pi Camera Module 2 (imx219) modules connected to the CamArray HAT. I’ve tried two power configurations: having the HAT mounted directly on the Pi, and also powering the HAT separately via USB-C. Neither works. I’ve modified /boot/firmware/config.txt with camera_auto_detect=0 and dtoverlay=imx129. Any ideas what I’m doing wrong?

Thanks for reaching out. Could you share some more details about your setup? Specifically, it would help to see the relevant kernel logs — can you run dmesg | grep imx and post the output? Also, have you tested any of these camera modules individually by connecting them directly to the Pi’s CSI port without the HAT? That’ll help narrow down whether the issue is with the cameras themselves or the HAT.

Sure, here’s the output from dmesg | grep imx:

[ 0.028797] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/imx219@10
[ 0.028878] /soc/i2c0mux/i2c@1/imx219@10: Fixed dependency cycle(s) with /soc/csi@7e801000
[ 0.029822] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/imx219@10
[ 0.044656] /soc/i2c0mux/i2c@1/imx219@10: Fixed dependency cycle(s) with /soc/csi@7e801000
[ 1.220881] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/imx219@10
[ 1.220946] /soc/i2c0mux/i2c@1/imx219@10: Fixed dependency cycle(s) with /soc/csi@7e801000
[ 4.746052] imx219 10-0010: Error reading reg 0x0000: -121
[ 4.746153] imx219 10-0010: error -EREMOTEIO: failed to read chip id 219
[ 4.787923] imx219 10-0010: probe with driver imx219 failed with error -121

I haven’t tested them individually on the Pi’s own CSI port yet — I’ll give that a try and report back.

Those logs are really helpful. A couple of things jump out:

First, you mentioned dtoverlay=imx129 in your config.txt — I suspect that’s a typo and should be dtoverlay=imx219, though the kernel does seem to be loading the imx219 driver regardless, so that’s not the main culprit here.

The real red flag is the I2C communication failure. The error -121 (which maps to -EREMOTEIO) on register read, combined with “failed to read chip id 219”, means the Pi can’t successfully talk to the camera sensor over the I2C bus. The dependency cycle messages between the CSI interface and the i2c0mux are also worth noting — they suggest something isn’t right with the device tree configuration or the hardware setup.

Definitely test one of those cameras directly connected to the Pi’s CSI port. That will tell us if the camera modules themselves are functional and whether the HAT is introducing the communication issue.

Okay, so I tested all four camera modules one by one connected directly to the Pi’s CSI port — and they all work fine individually. Libcamera detects them and I can capture images without any issues. So the cameras themselves are definitely functional.

I also uploaded some photos of my setup so you can see how everything is connected:

IMG_3060
IMG_3059
IMG_3058
IMG_3057
IMG_3056

I’ve tried this both with the HAT stacked on the Pi and with the HAT powered separately via USB-C — same result either way. I’m pretty stumped at this point.

Thanks for the photos and the additional testing — that confirms exactly what I suspected. The cameras work individually when connected directly, so the issue is specifically with the HAT integration.

Here’s what’s going on: this is a hardware-level clock signal conflict.

The Raspberry Pi Camera Module 2 (the official one) has its own onboard crystal oscillator that generates the timing signals for the IMX219 sensor. The Arducam CamArray HAT, on the other hand, is designed with its own master oscillator on the board — its job is to provide a synchronized clock signal to all connected cameras so they operate in lockstep for the multi-camera array.

When you plug the official Pi Camera Module 2 into the CamArray HAT, you end up with both oscillators trying to drive the camera’s timing circuitry at the same time. This creates an electrical conflict on the clock line, which is why the IMX219 sensor can’t initialize properly on the I2C bus. The -EREMOTEIO error and the failed chip ID read are the direct symptoms of this — the sensor is essentially being held in a bad state and can’t respond to I2C commands.

The dependency cycle messages in the device tree are a secondary effect of the probe failure — the kernel is trying to resolve the device relationships but the hardware isn’t cooperating.

Unfortunately, the bottom line is: the official Raspberry Pi Camera Module 2 (with its onboard crystal oscillator) is not compatible with the Arducam CamArray HAT. You need to use cameras that don’t have their own onboard oscillator — specifically, the matched camera modules that are designed to ship with the HAT, which rely entirely on the HAT’s master oscillator for clock synchronization.

That makes sense, thanks for the detailed explanation. So I need to buy different camera modules that are compatible with the CamArray HAT. But here’s the thing — I’m specifically using the IMX219 hyperfisheye sensor/lens assembly (the wide-angle variant). Is there any way I can reuse these hyperfisheye lenses with the CamArray HAT? Maybe a different camera module that supports the hyperfisheye lens but doesn’t have the onboard oscillator? I’d really rather not have to scrap these lenses if I can avoid it.

Unfortunately, standalone IMX219 hyperfisheye cameras have the same fundamental problem — they’re still standard Pi camera modules with independent onboard oscillators, so they’ll hit the exact same I2C bus conflict when connected to the CamArray HAT. The root cause isn’t the lens type, it’s the oscillator on the camera PCB itself. Any off-the-shelf Pi camera module with its own timing crystal is going to be incompatible with the HAT’s master clock architecture.

The CamArray ecosystem really does require matched camera modules that are designed to be clocked by the HAT. The good news is that Arducam does offer custom CamArray kits built with specific lens assemblies. For reference, the standard product is the Arducam 8MP 4 Quadrascopic Camera Bundle Kit (B0396) — that one ships with standard lenses, but it gives you an idea of what a matched kit looks like: https://www.arducam.com/arducam-8mp-4-quadrascopic-camera-bundle-kit-b0396.html

For the hyperfisheye variant specifically, I’d recommend reaching out to the Arducam sales team directly and asking for a custom quote on a CamArray kit with hyperfisheye lenses pre-installed. They can build a matched set with the correct camera modules that don’t have the onboard oscillator conflict. If you forward this forum thread to them when you reach out, they’ll have all the context they need about your use case. That way you get the wide-angle optics you want in a properly synchronized array.