1. Home
  2. Docs
  3. Camera breakout board
  4. 12MP IMX477/IMX577
  5. Software Guide

Software Guide

Introduction

This page describe the basic control over the sensor registers using Arducam camera breakout board, it might not be able to cover all the detail register operations, but give you an insight how to adjust these settings using Arducam USB Camera shield evaluation tool. It also helpful to hack the camera when using other platforms like Raspberry pi or Jetson Nano which might come with the default camera driver.

Sensor I2C Slave Address

The IMX477/IMX577 camera I2C 8-bit slave address is configured through SLASEL pin (A8 pin). When SLASEL pin is connected to ground or float, the slave address is 0x34, or else it is 0x20. The 8bit register value can be accessed from 16bit register address. The Raspberry Pi High Quality camera uses the 0x34 as its I2C slave address.

IMX477 SlaveAddress

The device identification register is 0x0016 and 0x0017. Using Arducam USB Camera shield tool, we can read out the default value is 0x04 and 0x77 as read only register values from IMX477 camera module. For IMX577 the device id should be 0x05 and 0x77 instead.

IMX477 ID REG16
IMX477 ID REG17

Sensor Initialization

You need a basic settings to bring up the sensor and make it working in normal streaming mode. Please contact us for the config file for the Arducam USB Camera shield Window GUI. In the demo below, it use ArduCAM USB2 camera shield Rev.E, which only get 3fps at 12MP full resolution due to the USB2.0 bandwidth limitation.

IMX477 demo

Gain Settings

There are analog gain and digital gain before and after ADC. The max analog gain is 27dB and digital gain max is 24dB.

Analog Gain formula is :

Analog Gain[times] = 1024/(1024-ANA_GAIN_GLOBAL)

Where ANA_GAIN_GLOBAL is range from 0~978 (0dB~27dB):

Register AddrBitsDescription
0x0204[1:0]ANA_GAIN_GLOBAL[9:8]
0x0205[7:0]ANA_GAIN_GLOBAL[7:0]

Digital Gain Can be set by global register or by separate colors.

Register AddrBitRegister NameDescription
0x3FF9[0]DPGA_USE_GLOBAL_GAIN0 = By color
1 = All color (Same as DIG_GAIN_GR reg value)
Register AddrBitRegister NameDescription
0x020E[7:0]DIG_GAIN_GR[15:8]Range:
0x020F[7:0]DIG_GAIN_GR[7:0]0x0100~0x0FFF
0x0210[7:0]DIG_GAIN_R[15:8]Range:
0x0211[7:0]DIG_GAIN_R[7:0]0x0100~0x0FFF
0x0212[7:0]DIG_GAIN_B[15:8]Range:
0x0213[7:0]DIG_GAIN_B[7:0]0x0100~0x0FFF
0x0214[7:0]DIG_GAIN_GB[15:8]Range:
0x0215[7:0]DIG_GAIN_GB[7:0]0x0100~0x0FFF

Digital gain [times] = upper_byte + lower_byte/256

The upper_byte ranges from 1 ~ 15, and lower_byte ranges from 0 ~ 255. So the Digital gain ranges from:

1+0/256[times](=0[dB]) ≤ Digitalgain ≤ 15+255/256[times] (≈ 24dB)

Exposure Time Settings

The exposure time or shutter speed is based on lines, the COARSE_INTEG_TIME register defines the coarse integration time.

Register AddrBitRegister NameDescription
0x0202[7:0]COARSE_INTEG_TIME[15:8]coarse integration time.
0x0203[7:0]COARSE_INTEG_TIME[7:0]Unit: lines

Tline = LINE_LENGTH_PCK [pixels/line] × IVTPXCK_period / 4 ( Total number of image pipe lines )

Tsh Tline × ( COARSE_INTEG_TIME [lines] + FINE_INTEG_TIME [pixels] / LINE_LENGTH_PCK [pixels/line] )

Register AddrBitRegister NameDescription
0x0200[7:0]FINE_INTEG_Time[15:8]Read Only
0x0201[7:0]FINE_INTEG_Time[7:0]
0x0342[7:0]LINE_LENGTH_PCK[15:8]The total line length
0x0343[7:0]LINE_LENGTH_PCK[7:0]Unit: pixels

Was this article helpful to you? Yes No 1