Need Arducam Multi-Camera Adapter Board Pinout for Jetson Nano (Designed for Raspberry Pi)

Hi everyone,

I’m trying to use the Arducam Multi-camera adapter board on a Jetson Nano, but the adapter was designed for the Raspberry Pi and the Nano’s GPIO layout is different. I need the adapter board pinout so I can adapt the wiring to the Nano.

Module is B012201. Has anyone got this board working on a Jetson Nano, or does anyone have the pinout?

Hi, thanks for the details. Just to confirm, this is the B012001 1-to-4 multi-camera adapter board. I checked with our R&D team and yes, it can work on the Jetson Nano.

You shouldn’t need to manually re-map the GPIO yourself — there is a Jetson reference available. Please follow the Jetson examples here:

That repo covers Jetson MIPI camera support. Start with those examples and let me know how it goes.

Thanks, I followed the Jetson examples, but I still can’t get all four cameras to work. Camera A captures successfully, but every other GPIO combination fails.

Environment:

  • Jetson Nano (i2c bus 1)
  • Jetson.GPIO (RPi.GPIO compatibility)
  • i2cset targeting 0x70

Here’s my script:

import RPi.GPIO as gp # sudo pip install Jetson.GPIO # https://pypi.org/project/Jetson.GPIO/#description
import os
import argparse
def parse_cmdline():
    parser = argparse.ArgumentParser(description='Arducam Controller.')
    parser.add_argument('-i', '--i2c-bus', type=int, nargs=None, required=True,
                        help='Set i2c bus, for Jetson Nano it is 1, for Jetson Xavier NX it is 8.')
    return parser.parse_args()
gp.setwarnings(True)
gp.setmode(gp.BOARD)
gp.setup(7, gp.OUT)
gp.setup(11, gp.OUT)
gp.setup(12, gp.OUT)
def main(i2c_bus):
    i2c = "i2cset -y {} 0x70 0x00 0x08".format(i2c_bus)
    os.system(i2c)
    gp.output(7, False)
    gp.output(11, False)
    gp.output(12, True)
    capture(2)
def capture(cam):
    #cmd = "raspistill -o capture_%d.jpg" % cam
    cmd = "nvgstcapture-1.0 -A --capture-auto -S 0 --image-res=3 --file-name=capture_%d.jpg" % cam
    os.system(cmd)
if __name__ == "__main__":
    args = parse_cmdline()
    print(args.i2c_bus)
    main(args.i2c_bus)

Log for camera A (7 → False, 11 → False, 12 → True) — this one works:

Error: Write failed
Encoder null, cannot set bitrate!
Encoder Profile = High
nvbuf_utils: Could not get EGL display connection
bitrate = 4000000
Encoder Profile = High
Encoder control-rate = 1
Encoder EnableTwopassCBR = 0
Opening in BLOCKING MODE
** Message: 04:31:55.258: <main:4674> iterating capture loop ....
Starting automation...
NvMMLiteOpen : Block : BlockType = 4
===== NVMEDIA: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 4
GST_ARGUS: Creating output stream
CONSUMER: Waiting until producer is connected...
GST_ARGUS: Available Sensor modes :
GST_ARGUS: 3264 x 2464 FR = 21.000000 fps Duration = 47619048 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 3264 x 1848 FR = 28.000001 fps Duration = 35714284 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1920 x 1080 FR = 29.999999 fps Duration = 33333334 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1640 x 1232 FR = 29.999999 fps Duration = 33333334 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1280 x 720 FR = 59.999999 fps Duration = 16666667 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1280 x 720 FR = 120.000005 fps Duration = 8333333 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: Running with following settings:
   Camera index = 0
   Camera mode  = 5
   Output Stream W = 1280 H = 720
   seconds to Run    = 0
   Frame Rate = 120.000005
GST_ARGUS: Setup Complete, Starting captures for 0 seconds
GST_ARGUS: Starting repeat capture requests.
CONSUMER: Producer has connected; continuing.
Image Captured
GST_ARGUS: Cleaning up
CONSUMER: Done Success
GST_ARGUS: Done Success
** Message: 04:31:56.048: <main:4684> Capture completed
** Message: 04:31:56.049: <main:4733> Camera application will now exit

Log for another combination (7 → True, 11 → False, 12 → True) — this one fails:

Error: Write failed
Encoder null, cannot set bitrate!
Encoder Profile = High
nvbuf_utils: Could not get EGL display connection
bitrate = 4000000
Encoder Profile = High
Encoder control-rate = 1
Encoder EnableTwopassCBR = 0
Opening in BLOCKING MODE
** Message: 04:36:31.580: <main:4674> iterating capture loop ....
NvMMLiteOpen : Block : BlockType = 4
===== NVMEDIA: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 4
GST_ARGUS: Creating output stream
Starting automation...
CONSUMER: Waiting until producer is connected...
GST_ARGUS: Available Sensor modes :
GST_ARGUS: 3264 x 2464 FR = 21.000000 fps Duration = 47619048 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 3264 x 1848 FR = 28.000001 fps Duration = 35714284 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1920 x 1080 FR = 29.999999 fps Duration = 33333334 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1640 x 1232 FR = 29.999999 fps Duration = 33333334 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1280 x 720 FR = 59.999999 fps Duration = 16666667 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1280 x 720 FR = 120.000005 fps Duration = 8333333 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000;
GST_ARGUS: Running with following settings:
   Camera index = 0
   Camera mode  = 5
   Output Stream W = 1280 H = 720
   seconds to Run    = 0
   Frame Rate = 120.000005
GST_ARGUS: Setup Complete, Starting captures for 0 seconds
GST_ARGUS: Starting repeat capture requests.
CONSUMER: Producer has connected; continuing.
nvbuf_utils: dmabuf_fd -1 mapped entry NOT found
nvbuf_utils: Can not get HW buffer from FD... Exiting...
CONSUMER: ERROR OCCURRED

Only camera A seems to work. Any idea what I’m doing wrong?

Thanks for the detailed logs. Before we dig into your GPIO mapping, can you test with the official ArduCAM demo example for the Multi-Camera Adapter on Jetson?

That will tell us whether the baseline demo behaves the same way on your setup.

I tried the official demo example from that link and the problem is still there. The demo successfully captures an image with camera “A”, but it fails with the other cameras. Same behavior as my own script.

Understood. To keep diagnosing this, could you send a few pictures of the hardware connection, and also grab the dmesg log right after running the demo example?

Here are pictures of my hardware connection. Also, how do I check the dmesg log? I’m not sure how to capture that on the Nano.

Hardware connection 1.jpeg
Hardware connection 2.jpeg

Thanks for the pictures. Could you also send a clear picture showing all four cameras connected to the adapter?

Instead of grabbing just the dmesg log manually, let’s collect a full bug report right after running the example demo — it will include dmesg plus other useful diagnostics. Please do the following:

  1. Reboot your device.
  2. Download the bug report tool:
wget -O arducam-camera-bug-report-nvidia https://github.com/ketai-dhr/arducam-camera-bug-report/releases/download/tools/arducam-camera-bug-report-nvidia
  1. Set executable permissions:
chmod +x ./arducam-camera-bug-report-nvidia
  1. Run the tool:
./arducam-camera-bug-report-nvidia
  1. It will output an “arducam-bug-report.txt” file in the current directory.

I’ve sent you a private message — please reply there with the generated txt file and the picture of the four cameras so we can continue the analysis.