Auto Focus camera with Nvidia Xavier

I think this is probably the best place to post this, but please let me know if I should move it to another forum topic:

I am trying to get the arducam autofocus (AF) camera module to work with the Nvidia Xavier developer board. I have 2x B0182 arducam Raspberry Pi V2 8mp motorized focus drop in camera replacements. I am using these cameras along with the Leopard imaging LI-JXAV-MIPI-ADPT-4CAM which breaks out 4 csi connectors on the Nvidia Xavier. I can access the AF cameras just fine, capture and stream video via commands using “argus_camera” or “gst-launch-1.0 nvarguscamerasrc” on the xavier but the focus motors don’t show up anywhere on any of the i2c-busses. Note that the motors don’t show up for either of the camera modules I have (either both motors are broken or the B0182 doesn’t work with the Xavier/Leopard imaging combo).

I also tried getting these to work on a Raspberry Pi B3 with no success, but after reading the product page a little more carefully, I don’t think this version (B0182) is meant to work with the Pi B3/3+: “Note: The camera can be used on compute module CM3, CM3+, and NOT compatible with Raspberry Pi 3B/B+”

As the Xavier i2c bus configuration is slightly different than the Jetson Nano’s, I ran an i2cdetect command on each of the i2c busses I can see to try to hunt down where the motors turn up. This returned the addresses below, which I don’t think contains the motor addresses anywhere (UU are the reserved addresses on each bus). Busses 3, 5 and 6 took too long to scan and are assumed to be used internally/blocked. Bus 30-33 are expansions provided by the Leopard Imaging board - you can see the RPi camera V2 encryption chip address, 0x64, show up on bus 30 where the AF camera is connected. So I would expect to see 0x0c show up on bus 30 for the AF motor control as well.

Bus 0: 0x50 0x56
Bus 1: 0x74, UU: 0x08, 0x40, 0x41
Bus 2: 0x54, UU: 0x10, 0x70
Bus 4: 0x20, 0x40, 0x50 UU: 0x3C, 0x4C, 0x68
Bus 7: UU: 0x1A
Bus 8: 0x74 (40-pin header bus)
Bus 30: 0x54 0x64, UU: 0x10, 0x70
Bus 31: 0x54, UU: 0x10, 0x70
Bus 32: 0x54, UU: 0x10, 0x70
Bus 33: 0x54, UU: 0x10, 0x70

Any insight on if the B0182 should work on the Nano (which I’d then expect to work on the Xavier as well) or if I just happened to get 2 faulty motor modules would be much appreciated. Similarly any help debugged would also be appreciated.

Hi @abattiston ,

If you want to use i2cdetect to detect the focus motor, you need to detect it when the camera is running. I2cdetect sometimes cannot correctly detect the focus motor. You need to perform one operation on the motor before i2cdetect can detect it

Thanks for your advice Wong, I took a while because I was pursuing a few different ways trying to get this to work:

Following your advice, I tried a few combinations of opening a camera pipeline and communicating with the motor, but nothing worked. I tried both opening a gstreamer pipeline in the same process, and in a separate process, trying both i2cdetect (which never recognised any hardware at that address) and just blindly sending i2c commands to that address, all of which failed.

In trying to figure out if it is the Xavier, the autofocus motors, or the motorized camera configuration I have, I went and borrowed a 5 MP motorized focus camera and tried that with the Xavier, which was successful. Though I didn’t have the drivers to connect to the OV5647 sensor and see the motor in action, I could still send commands to the autofocus motor and hear it move. This led me to believe that either I got two faulty camera modules, or the specific camera set up (B0182) - which is designed to be a drop in replacement as a way to circumvent the crypto chip on the Raspberry Pi cam V2 - doesn’t work with the Xavier (or possibly Jetsons in general?).

Along these lines I ordered a B0181, which comes with the entire breakout board and is designed to only works on the Nvidia jetsons, and it worked fine on the Xavier - all the demos work as expected.

Do you think that I received two faulty motorized focus units (B0182), or that the B0182 doesn’t work on the Nvidia platform (seeing how the B0181 worked without issue)?

Sorry, my account above was deleted multiple times by a bug in your verification emails.

To bump this - should I expect the B0182 to work with the Nvidia platform, or did I just receive 2 units with faulty motors? It would be cheaper to replace my current cameras with B0182 (as opposed to buying the B0181), but based on my experience I don’t know if I should actually trust them.

Hi @abattiston ,

Sorry for your bad experience and my late reply.

B0181 and B0182 should have the same effect on Jetson Nano.According to your description, you may have received a defective B0182.

Can you attach a front photo of the B0182 module? So that we can confirm the problem.

Hi Wong,

No worries about the delay, it’s understandable with the state of things. Below is a picture of the two B0182s that I originally purchased with one mounted on a v2.1 board. Let me know if this picture captures what you were looking for or if you’d like another angle or two, I can email more to you.

2x b0182 w/ one mounted on v2.1 board

Hi @abattiston ,

Through the picture you provided, we can confirm that a resistor on the module has a welding error. You now have two options:

  1. You can re-weld yourself
  2. We give you a replacement

If you want to solder by yourself, here is the correct welding diagram:

If you want to replacement, please let me know and our after-sales staff will contact you.

Hi,

I don’t think I’m skilled enough to do that small of a solder job, please put me in touch with your after sales team.

Many thanks!

Hi,

Please in touch with our sales email: [email protected]

@abattiston how are you physically connecting the cameras to the LI-JXAV-MIPI-ADPT-4CAM board? It seems from the online picture that the connector is completely different than the standard camera flex cable? I’m curious because I’m looking at buying that board myself to use with Xavier and Arducams…

you have to buy adapters:

https://leopardimaging.com/product/nvidia-jetson-cameras/nvidia_nano_mipi_camera_kits/li-pi-ipex-1233-adpt/

Have you solved your problems?

No not yet. I’ve replied out to sales on May 24th with my address and previous order number but haven’t heard back since then.

Hello,

Sorry to hear that. Can you post it again? Maybe the mail was abnormally lost

Hey @abattiston

Just wanted to thank you for this thread. I am working on the same problem and wish to use the CSI to HDMI converter with the Jetson Xavier. My purpose is to extend the camera wire > 4m.

Please do share your updates and if you find a way :slight_smile:

Hello,

I found this thread and following your foot step to build CSI to HDMI converter.

I have purchased Nvidia AGX xavier + LI-JXAV-MIPI-ADPT-4CAM + LI-PI-IPEX-1233-ADPT + ARDUCAM IMX219. It is almost the same setup with you have done above.

Now Im trying to make this work, but it seems that I need driver to control the ReopardImage board.

Can you please tell me the driver setup procedure and how to get the files?

Thanks in advance.

You have to reach out to Leopard Imaging support to get the driver. It’s installed by downloading the Xavier image and modifying the Xavier image before flashing it to the Xavier (you flash it via command line and not the Nvidia SDK manager - at least this was the process for me). They’ll send you detailed instructions with the setup files.

Thank you a lot, Abattiston!

I will contact them right away. and also update once I’m done making this work.

Thank you again abattiston!

I got the driver install instruction from leopardImaging and I can see the picture now.

I have one more question.

On the arducam board, there are two pin out for SCK and SCL.

Are these the I2C for the focusing motor? do I need to connect this to my AGX separatly?

How did you control the focus motor?


def focusing(val):
value = (val << 4) & 0x3ff0
data1 = (value >> 8) & 0x3f
data2 = value & 0xf0
os.system(“i2cset -y 6 0x0c %d %d” % (data1,data2))


I got this code from web, but for now I cannot detect the adress 0x0C on my AGX

Could you tell me how you did it?

You do not need to connect to the i2c pins on the arducam board, the mipi cable has i2c communication lines in it. you just have to find the right i2c bus number. The leopard adapter boards create new i2c busses for each camera, so you just have to figure out which bus is for which camera. Generally the Xavier dev board has 8 i2c busses, 0 to 7 or something like that - the piece of code you shared sets i2c bus 6.
os.system(“i2cset -y 6 0x0c %d %d” % (data1,data2))

You need to figure out which bus is for which camera and set the bus number appropriately. For me the bus numbers created by the leopard breakout board were 30 to 33.

There’s also some weird detection issues with the autofocus module - it doesnt always show up when using i2cdetect, but will pause on address 0x0c, usually a sign that it is detected but just doesn’t respond properly.