Serializer/Deserializer not detected on I2C bus with IMX477/IMX219 on Raspberry Pi 4

Hey everyone, I’m trying to get I2C access to the serializer and deserializer registers on my GMSL setup but running into a wall. Here’s my setup:

  • Raspberry Pi 4
  • Arducam GMSL board
  • Tried both IMX477 and IMX219 camera modules
  • Connected via I2C bus, using i2cdetect for scanning

When I run i2cdetect, I can see the sensor at 0x10 and there’s something unidentified at 0x0c, but the serializer and deserializer are completely missing from the bus. Nothing shows up where I’d expect them.

Anyone know what’s going on here? I need to poke at those registers directly.

Welcome to the forum. A few quick questions to help narrow things down:

  • Which specific GMSL board model are you using?
  • Have you checked the dip switch positions on the GMSL board? Some configurations can affect which devices appear on the I2C bus.
  • Can you post the full i2cdetect output? The 0x0c entry is a bit unusual and might give us a clue.

Sure, here’s the full i2cdetect -y 1 output:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- 0c -- -- --
10: 10 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

0x10 is definitely the camera sensor. 0x0c I have no idea what that is. But yeah, no ser/des in sight.

Dip switches - I’ve tried a few combinations but honestly not sure which ones are relevant here. The board is the standard Arducam GMSL adapter board they sell with the camera kits. Any guidance on which dip switches I should be looking at?

Thanks for the output — that’s helpful. So I’ve looked into this and unfortunately the situation is pretty specific to the Arducam GMSL implementation.

The short answer: there is no way to access the serializer and deserializer registers via the I2C bus when you’re using the IMX477 or IMX219 camera modules. This isn’t a configuration issue or something you can fix with dip switches on that camera/module combo.

The reason I asked about dip switches is that there is a path to I2C access, but it requires a different camera: the IMX500 module. With the IMX500, you can enable two specific dip switches on the GMSL board and that will expose the serializer and deserializer registers on the I2C bus. But with IMX477/IMX219, the path simply isn’t routed that way in the board architecture.

That’s… frustrating. Any idea why though? I looked up the serializer and deserializer chip datasheets and they clearly support I2C access. The registers are documented and everything. If the chips themselves have I2C interfaces, what’s stopping me from reaching them?

Also, since you mentioned the IMX500 — can you share more details about that camera and how the dip switch setup works with it? Might be worth switching if it gives me the access I need.

Yeah, I completely understand the frustration — and you’re right, the individual serializer/deserializer chips do support I2C at the silicon level. The datasheets aren’t misleading you. The issue is at the integration level, not the chip level.

What’s happening is that in Arducam’s specific GMSL camera module design with IMX477/IMX219, the I2C path to the ser/des registers isn’t brought out to the bus you can access from the Pi. It’s a system-level architecture decision — the way the various components on the module are interconnected, that access path is either blocked or simply not routed through. The chips can do it, but the board doesn’t wire it up that way for these particular camera modules.

As for the IMX500, I’ve sent you some details via private message about the camera specs and the exact dip switch configuration. The short version is that with the IMX500, the board routes things differently and those two dip switches let you bridge the I2C path to the ser/des registers. It’s a different architectural layout on that module.

So just to make sure I’m understanding this correctly — the limitation isn’t a driver issue or something I can patch around in software? It’s literally a hardware routing decision on the module PCB? That would explain why no amount of i2cdetect scanning or bit-banging is going to find those registers.

Guess I’ll look into the IMX500 then. Bit of a bummer since I already have the 477 and 219 modules here, but if the registers are physically unreachable there’s not much else to try. Thanks for looking into it.

That’s exactly right — it’s a hardware-level routing decision on the module, not something in software or drivers. No kernel parameter, device tree overlay, or i2c-tools trick is going to make those registers appear on the bus because the electrical path simply isn’t there for IMX477/IMX219.

To summarize for anyone else who might stumble on this thread:

  • IMX477 / IMX219 on Arducam GMSL boards: serializer and deserializer registers are not accessible via I2C. You’ll see the sensor at 0x10 and that’s about it.
  • IMX500 on Arducam GMSL boards: with the correct two dip switches enabled, the ser/des registers do become visible on the I2C bus.

The chip specs aren’t wrong — the ser/des silicon can do I2C — but the module integration for the 477/219 doesn’t expose it. If you absolutely need register-level access to the serializer/deserializer, switching to the IMX500 module is the way to go.