Compute Module 4 + Arducam IMX477 B0249 doesn't work in latest Buster or latest Bullseye

On Bullseye 64bit I receive this error (after commenting out the chip ID verification lines in the IMX477.c driver):

[    5.034503] imx477 10-001a: failed to read chip id 477, with error -5
[    5.034514] imx477 10-001a: chip id mismatch: 477!=8d56068
[    5.034520] imx477 10-001a: Device found is imx8d56068

And then when I try to use the camera I get this error:

[   76.412257] imx477 10-001a: Failed to write reg 0x0136. error = -5
[   76.412266] imx477 10-001a: imx477_start_streaming failed to set common settings
[   76.412312] unicam fe801000.csi: stream on failed in subdev
[   76.412936] ------------[ cut here ]------------
[   76.412956] WARNING: CPU: 3 PID: 1186 at drivers/media/mc/mc-entity.c:554 __media_pipeline_stop+0xb0/0xc4 [mc]
[   76.412959] Modules linked in: algif_hash algif_skcipher af_alg bnep hci_uart btbcm bluetooth ecdh_generic ecc 8021q garp stp llc imx477 cp210x usbserial brcmfmac brcmutil cfg80211 snd_bcm2835(C) rfkill bcm2835_unicam v4l2_dv_timings v4l2_fwnode i2c_mux_pinctrl snd_pcm bcm2835_v4l2(C) bcm2835_isp(C) raspberrypi_hwmon bcm2835_codec(C) i2c_mux bcm2835_mmal_vchiq(C) v4l2_mem2mem snd_timer videobuf2_vmalloc videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 snd videobuf2_common rpivid_mem vc_sm_cma(C) videodev mc i2c_bcm2835 uio_pdrv_genirq nvmem_rmem uio aes_neon_bs aes_neon_blk crypto_simd cryptd drm fuse drm_panel_orientation_quirks backlight ip_tables x_tables ipv6
[   76.413078] CPU: 3 PID: 1186 Comm: libcamera-vid Tainted: G         C        5.10.87-v8+ #3
[   76.413081] Hardware name: Raspberry Pi Compute Module 4 Rev 1.0 (DT)
[   76.413086] pstate: 60000005 (nZCv daif -PAN -UAO -TCO BTYPE=--)
[   76.413095] pc : __media_pipeline_stop+0xb0/0xc4 [mc]
[   76.413103] lr : media_pipeline_stop+0x38/0x50 [mc]
[   76.413106] sp : ffffffc012093af0
[   76.413109] x29: ffffffc012093af0 x28: ffffff8106a54600
[   76.413115] x27: 0000000040045613 x26: ffffffc008e4f670
[   76.413121] x25: 0000000000000000 x24: ffffffc012093d38
[   76.413127] x23: ffffff8101e867d0 x22: ffffff81009d9e00
[   76.413133] x21: ffffff8101e86548 x20: 0000000000000000
[   76.413139] x19: ffffff8101e86200 x18: 0000000000000000
[   76.413144] x17: 0000000000000000 x16: 0000000000000000
[   76.413150] x15: 0000007fac004b38 x14: 0000000000000000
[   76.413156] x13: 000000000000031e x12: 0000000000000000
[   76.413162] x11: 000000000000031e x10: 00000000000019e0
[   76.413167] x9 : ffffffc008cc2cdc x8 : ffffff8100a1b880
[   76.413173] x7 : 0000000000000001 x6 : ffffffc0112b9000
[   76.413179] x5 : ffffffc0112b9210 x4 : 0000000000000000
[   76.413185] x3 : ffffff8101e86200 x2 : ffffff8100a19e40
[   76.413190] x1 : 0000000000000000 x0 : ffffff8101e867f0
[   76.413196] Call trace:
[   76.413205]  __media_pipeline_stop+0xb0/0xc4 [mc]
[   76.413212]  media_pipeline_stop+0x38/0x50 [mc]
[   76.413219]  unicam_stop_streaming+0x7c/0x160 [bcm2835_unicam]
[   76.413228]  __vb2_queue_cancel+0x50/0x354 [videobuf2_common]
[   76.413234]  vb2_core_streamoff+0x30/0xd0 [videobuf2_common]
[   76.413241]  vb2_ioctl_streamoff+0x68/0xb4 [videobuf2_v4l2]
[   76.413273]  v4l_streamoff+0x30/0x40 [videodev]
[   76.413290]  __video_do_ioctl+0x190/0x3f0 [videodev]
[   76.413307]  video_usercopy+0x1b0/0x580 [videodev]
[   76.413324]  video_ioctl2+0x24/0x50 [videodev]
[   76.413340]  v4l2_ioctl+0x4c/0x70 [videodev]
[   76.413350]  __arm64_sys_ioctl+0xb4/0x100
[   76.413355]  el0_svc_common.constprop.0+0x84/0x200
[   76.413359]  do_el0_svc+0x30/0xa0
[   76.413365]  el0_svc+0x20/0x30
[   76.413368]  el0_sync_handler+0x1a4/0x1b0
[   76.413372]  el0_sync+0x180/0x1c0
[   76.413375] ---[ end trace 960cb45ba4febbbc ]---

On Buster (version released 12/02/21) I see different errors but the camera doesn’t work at all (it hangs when capturing via raspistill). Note that I have no issues with the Arducam Mini IMX477 on either Buster or Bullseye, but I am working to enable a 4 lane CSI driver for the IMX477, and was told by Arducam that the Mini IMX477 only supports 2 lanes (even though the connector/traces look very similar between the Mini and B0249). Is it true the Mini IMX477 only supports 2 lanes?

Any help diagnosing / fixing the issue with the B0249 would be appreciated as it’s listed as supporting the CM4.

Thanks,
Dustin

It’s true, although the interface is the same, because the MINI IMX477 PCB is very small, it is not designed to support 4lane.

Can you provide detailed photos of the front and back of B0249? I need to confirm the hardware version.

Ok, thanks. FYI, you may want to update the product pages as it’s a little confusing in some places.

Sure thing. Let me know if you need a particular shot. I bought it from here - Amazon.com



Thank you for your reminder, I have submitted it to my colleague.

Thank you for the pictures, I will test it tomorrow.

Hi @dustobub
I just tested it and it does have a problem.
We encountered this problem on Jetson Xavier NX before,
you can contact your sales to replace it. (You can note that it is an NX problem)

Thanks @wong for the confirmation. If you don’t mind me asking, what is the problem? Does it mean that all B2049 revisions aren’t compatible with the CM4?

I am not sure what the problem is (I am not a hardware engineer), I only know that there is a resistor that needs to be modified.

No, it is supported, but there is a problem with the current version.

Ok, thanks for the info. Does Arducam have a new version that will work with both Jetson and the CM4?

Yes, only need to modify the resistance on the module to fix this problem.

Okay, I assume it’s the R8 resistor as described here - Raspberry Pi HQ camera IMX477 Driver | Linux driver for Jetson | RidgeRun - is that correct?

Is it possible to modify the Rev D 2049 module I have (ie. add this resistor)?

Hi @dustobub

No, not the R8 resistor.
Is this resistance:

Need to modify it to 10k

Are there two resistors in that red box? Do they both need to be 10k ohm? Thanks!

Yes, they all need to be replaced with 10k resistors.

1 Like