1. Home
  2. Docs
  3. Jetson Cameras
  4. Native Jetson Cameras – IMX219/IMX477
  5. IMX477 – 12MP HQ Camera

IMX477 – 12MP HQ Camera

Identify Your Model

First, identify which IMX477 camera you purchased before proceeding with the setups below. Currently, all Arducam IMX477 cameras for Jetson share the same drivers to work, but their hardware assembly may vary.

B0249B0250B0251
Standard size board cameraCamera with metal enclosure and HDMI adapterCompact size board camera

Hardware Setup

For B0249 and B0251

  1. Locate the camera connector (CSI). It’s on the side of the carrier board, opposite to the GPIO pins.
  1. Pull up on the plastic edges of the camera port. Do it gently to avoid pulling it off.
plastic edges pulled up jetson nano camera connector csi
  1. Push in the camera ribbon. Make sure the contacts are facing the heatsinks. Do not bend the flex cable, and make sure it’s firmly inserted into the bottom of the connector.
camera ribbon cable contacts
Ribbon Cable Contacts – 15pin-22pin
contacts facing heatsinks
Contacts facing inside to the heatsinks
ribbon cable inserted into the bottom of the connector
Ribbon cable fully inserted to the bottom of the CSI connector
  1. Push the plastic connector down. Do it while holding the flex cable until the connector is back in place.

For B0250

The hardware assembly of B0250 is different from the other two because a CSI-HDMI adapter is involved. Here is what you should know about this model before assembling:

  1. The HDMI cable and adapter included are only used to extend the MIPI CSI signal.
  2. As it’s still a MIPI CSI camera, the connection ultimately goes to the CSI camera connector of Jetson.

Connect the B0250 to your Jetson in the following steps:

  1. Locate the camera connector (CSI). It’s on the side of the carrier board, opposite to the GPIO pins.
  1. Pull up on the plastic edges of the camera port. Do it gently to avoid pulling it off.
plastic edges pulled up jetson nano camera connector csi
  1. Find the HDMI Adapter Board. It’s included in your kit.
HDMI adapter board connect csi jetson
  1. Push the camera ribbon of the HDMI Adapter Board into the camera connector. Make sure the contacts are facing the heatsinks. Do not bend the flex cable, and make sure it’s firmly inserted into the bottom of the connector.
white camera ribbon cable contacts
Ribbon Cable Contacts – 15pin-15pin
white cable silver contacts facing heatsinks
Silver Contacts facing inside to the heatsinks
white cable silver ribbon cable inserted into the bottom of the connector
Ribbon cable fully inserted to the bottom of the CSI connector
  1. Push the plastic connector down. Do it while holding the flex cable until the connector is back in place.
  1. Use the HDMI cable to connect the HDMI adapter board to the HDMI connector in the back of the camera enclosure.
Arducam IMX477 JetsonNano NX B0250 5

Driver Setup

Automatic driver installation only for L4T32.4.3 and later versions

1. Download automatic installation script

https://github.com/ArduCAM/MIPI_Camera/releases/download/v0.0.2/install_imx477.sh

2. Enter the folder

cd Downloads

3. Install the driver

chmod +x install_imx477.sh
 ./install_imx477.sh
automatic driver installation1

press y to reboot.

automatic driver installation2

*4. Uninstall

If you want to roll back to original Jetson Nano camera driver, just run the following command to uninstall the Arducam driver, a reboot is also required.

sudo dpkg -r arducam-nvidia-l4t-kernel

Manual driver installation for L4T32.4.3 before versions

1. Identify Kernel Number

Different kernel versions require different driver packages. You need a matching driver package for your camera to work.

To identify your kernel:

  1. Print your Kernel Version with the following command.
uname -a

Example output:

Linux jetson-desktop 4.9.140-tegra #3 SMP PREEMPT Thu Jul 16 13:41:48 CST 2020 aarch64 aarch64 aarch64 GNU/Linux

4.9.140 is our desired value.

  1. Print your L4T release number with the following command.
cat /etc/nv_tegra_release

Example output:

# R32 (release), REVISION: 4.3, GCID: 21589087, BOARD: t210ref, EABI: aarch64, DATE: Fri Jun 26 04:38:25 UTC 2020

R32 and 4.3 are our desired value.

  1. Combine the desired printed results to get the kernel detail.

From the example above, we get kernel 4.9.140 L4T-32.4.3.

2. Download Driver Package

To download Arducam IMX477 driver package:

  1. Go to Arducam GitHub repository for IMX477 on Jetson with the following URL:
https://github.com/ArduCAM/MIPI_Camera/tree/master/Jetson/IMX477/driver

What if I can’t find a matching driver?

If you can’t find a driver package matching your kernel version, please contact Arducam to update that.

  1. Enter the folder for your target Jetson board.
Jetson nano xavier nx camera driver folder

There are separate driver folders for Jetson Nano and Jetson Xavier NX, so use whichever match your target board.

  1. Click on the name of the matching driver package.
jetson camera driver package click
Example: Driver for Xavier NX with kernel 4.9.140-32.4.3

Refer to the kernel information from last step to decide which package is needed.

  1. Click on the Download button to download the file.
jetson camera driver download button
Example: Download driver for Xavier NX with kernel 4.9.140-32.4.3

3. Install the IMX477 Driver

To install the IMX477 driver for Jetson:

  1. Go to the folder in which you’ve saved the driver package, for example:
cd Downloads
  1. Install the driver with the following command, for example:
sudo dpkg -i arducam-nvidia-l4t-kernel_x.x.xxx-xx.x.x-xxxxxxxxxxxxxx_arm64_imx477.deb
  1. Reboot your Jetson
sudo reboot

First Use

Open your Terminal, and run the corresponding commands.

Display

  • 1920×1080
SENSOR_ID=0 # 0 for CAM0 and 1 for CAM1 ports
FRAMERATE=60 # Framerate can go from 2 to 60 for 1920x1080 mode
gst-launch-1.0 nvarguscamerasrc sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=1920,height=1080,framerate=$FRAMERATE/1" ! nvvidconv ! nvoverlaysink
  • 4032×3040
SENSOR_ID=0 # 0 for CAM0 and 1 for CAM1 ports
FRAMERATE=30 # Framerate can go from 2 to 30 for 4032x3040 mode
gst-launch-1.0 nvarguscamerasrc sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=4032,height=3040,framerate=$FRAMERATE/1" ! nvvidconv ! "video/x-raw(memory:NVMM),width=1920,height=1080,framerate=$FRAMERATE/1" ! nvoverlaysink

MP4 recording

  • 1920×1080
SENSOR_ID=0 # 0 for CAM0 and 1 for CAM1 ports
FRAMERATE=60 # Framerate can go from 2 to 60 for 1920x1080 mode
gst-launch-1.0 -e nvarguscamerasrc sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=1920,height=1080,framerate=$FRAMERATE/1" ! nvv4l2h264enc ! h264parse ! mp4mux ! filesink location=rpi_v3_imx477_cam$SENSOR_ID.mp4
  • 4032×3040
SENSOR_ID=0 # 0 for CAM0 and 1 for CAM1 ports
FRAMERATE=30 # Framerate can go from 2 to 30 for 4032x3040 mode
gst-launch-1.0 -e nvarguscamerasrc sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=4032,height=3040,framerate=$FRAMERATE/1" ! nvv4l2h264enc ! h264parse ! mp4mux ! filesink location=rpi_v3_imx477_cam$SENSOR_ID.mp4

JPEG snapshots

  • 1920×1080
SENSOR_ID=0 # 0 for CAM0 and 1 for CAM1 ports
FRAMERATE=60 # Framerate can go from 2 to 60 for 1920x1080 mode
NUMBER_OF_SNAPSHOTS=20
gst-launch-1.0 -e nvarguscamerasrc num-buffers=$NUMBER_OF_SNAPSHOTS sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=1920,height=1080,framerate=$FRAMERATE/1" ! nvjpegenc ! multifilesink location=%03d_rpi_v3_imx477_cam$SENSOR_ID.jpeg
  • 4032×3040
SENSOR_ID=0 # 0 for CAM0 and 1 for CAM1 ports
FRAMERATE=30 # Framerate can go from 2 to 30 for 4032x3040 mode
NUMBER_OF_SNAPSHOTS=20
gst-launch-1.0 -e nvarguscamerasrc num-buffers=$NUMBER_OF_SNAPSHOTS sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=4032,height=3040,framerate=$FRAMERATE/1" ! nvjpegenc ! multifilesink location=%03d_rpi_v3_imx477_cam$SENSOR_ID.jpeg

Use two cameras at the same time

  • 1920×1080
SENSOR_ID=0 # 0 for CAM0 and 1 for CAM1 ports
FRAMERATE=60 # Framerate can go from 2 to 60 for 1920x1080 mode
gst-launch-1.0 nvarguscamerasrc sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=1920,height=1080,framerate=$FRAMERATE/1" ! nvvidconv ! nveglglessink
  • 4032×3040
SENSOR_ID=0 # 0 for CAM0 and 1 for CAM1 ports
FRAMERATE=30 # Framerate can go from 2 to 30 for 4032x3040 mode
gst-launch-1.0 nvarguscamerasrc sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=4032,height=3040,framerate=$FRAMERATE/1" ! nvvidconv ! nveglglessink

Was this article helpful to you? Yes 1 No 8