1. Home
  2. Docs
  3. Camera breakout board
  4. 14MP MT9F001/MT9F002
  5. Software Guide

Software Guide


This page describle 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.

Sensor I2C Slave Address

The MT9F001/MT9F002 camera I2C 8-bit slave address is fixed to 0x20. With 16bit regsiter address, and 16bit register value.

There is a ” model_id ” register (0x0000) which can help diagnose if the I2C bus is accessable and distinguish the camera models.

Camera Modelmodel_id register ( 0x0000 )

Sensor Initialization

You need a basic settings to bring up the sensor and make it working in normal streaming mode. Here is the sample config for the Window GUI.

MT9F001Sample Config

Manual Exposure Control

The integration (exposure) time of the MT9F001/MT9F002 is controlled by the fine_integration_time and coarse_integration_time registers. The limits for the fine integration time are defined by:

fine_integration_time_min ≤fine_integration_time ≤ (line_length_pck – fine_integration_time_max_margin)

The limits for the coarse integration time are defined by:

coarse_integration_time_min ≤ coarse_integration_time

The actual integration time is given by:

It is required that: coarse_integration_time < = (frame_length_lines – coarse_integration_time_max_margin)

If this limit is exceeded, the frame time will automatically be extended to (coarse_integration_time + coarse_integartion_time_max_margin) to accommodate the larger integration time.

Fine Integration Time Limits

The limits for the fine_integration_time can be found from fine_integration_time_min and fine_integration_time_max_margin.

It is necessary to change fine_correction (R0x3010) when binning is enabled or the pixel clock divider (row_speed[2:0]) is used. The corresponding fine_correction values are shown in following Table .

Fine Correction

For the fine_integration_time limits, the fine_correction constant will change with the pixel clock speed and binning mode.

Given the pixel clock is 24MHz, line_length_pck_ register (0x300c) is 13248. In order to simplify the testing purpose, we only set the coarse_integration_time_ registe(0x3012).

Exposure = 5.5ms, RegAddr = 12306 (0x3012), Value = 10

Exposure = 16.5ms, RegAddr = 12306 (0x3012), Value = 30

Exposure = 55ms, RegAddr = 12306 (0x3012), Value = 100

Manual Gain Control

Gain settings are like the ISO settings in most digital cameras. The gain is divided into analog and digital gain, and there are separate gain settings for four color-specific gains. There is also global gain setting to change all the four color-specific gains.

Here we demonstrate how to change the gain through the analogue_gain_code_global_ register (0x3028 in hex, 12328 in decimal). Given the exposure register 0x3012(12306) is 10.

RegAddr = 12328 (0x3028), Value = 10

RegAddr = 12328 (0x3028), Value = 50

RegAddr = 12328 (0x3028), Value = 100

White Balance Control

The MT9F001/MT9F002 sensor output is RAW bayer format, each RGB channel gain is controlled by corresponding gain regsiter.

There are 5 registers related to color gain settings which can be used for control white balance.

0x020C analog_gain_code_greenb

The global gain is used to set all color gain value at one time. The other 4 registers control GR, R, B, GB respectively.

Tips: GR, GB should be set equally, and Red, Blue gain can be set higher than GR/GB gain to get better color represent. Automatic software whtie balance is also possible with proper AWB algorithm to set these gain settings automatically.

ISO Speed Equivalent Gain Settings

ISO LevelRegister Address Recommended ValueGain Value
ISO 1000x305E0x14331.58
ISO 2000x305E0x18323.14
ISO 4000x305E0x1C326.24
ISO 8000x305E0x1C6412.46
ISO 16000x305E0x2C6424.90
ISO 32000x305E0x4C6449.76
Was this article helpful to you? Yes No 1