Datasheet
Table Of Contents
- 1/3.2-Inch System-On-A-Chip (SOC) CMOS Digital Image Sensor
- Features
- Applications
- Ordering Information
- General Description
- Feature Overview
- Typical Connection
- Ballout and Interface
- Architecture Overview
- Registers and Variables
- Registers
- Registers
- IFP Registers, Page 1
- IFP Registers, Page 2
- JPEG Indirect Registers
- Table 8: JPEG Indirect Registers (See Registers 30 and 31, Page 2)
- Firmware Driver Variables
- Table 9: Drivers IDs
- Table 10: Driver Variables-Monitor Driver (ID = 0)
- Table 11: Driver Variables-Sequencer Driver (ID = 1)
- Table 12: Driver Variables-Auto Exposure Driver (ID = 2)
- Table 13: Driver Variables-Auto White Balance (ID = 3)
- Table 14: Driver Variables-Flicker Detection Driver (ID = 4)
- Table 15: Driver Variables-Auto Focus Driver (ID = 5)
- Table 16: Driver Variables-Auto Focus Mechanics Driver (ID = 6)
- Table 17: Driver Variables-Mode/Context Driver (ID = 7)
- Table 18: Driver Variables-JPEG Driver (ID = 9)
- Table 19: Driver Variables-Histogram Driver (ID = 11)
- MCU Register List and Memory Map
- JPEG Indirect Registers
- Output Format and Timing
- Sensor Core
- Feature Description
- PLL Generated Master Clock
- PLL Setup
- Window Control
- Pixel Border
- Readout Modes
- Figure 20: 6 Pixels in Normal and Column Mirror Readout Modes
- Figure 21: 6 Rows in Normal and Row Mirror Readout Modes
- Table 30: Skip Values
- Figure 22: 8 Pixels in Normal and Column Skip 2x Readout Modes
- Figure 23: 16 Pixels in Normal and Column Skip 4x Readout Modes
- Figure 24: 32 Pixels in Normal and Column Skip 8x Readout Modes
- Figure 25: 64 Pixels in Normal and Column Skip 16x Readout Modes
- Table 31: Row Addressing
- Table 32: Column Addressing
- Frame Rate Control
- Context Switching
- Integration Time
- Flash STROBE
- Global Reset
- Analog Signal Path
- Analog Inputs AIN1-AIN3
- Firmware
- Firmware
- Start-Up and Usage
- General Purpose I/O
- Introduction
- GPIO Output Control Overview
- Waveform Programming
- Notification Signals
- Digital and Analog Inputs
- GPIO Software Drivers
- Auto Focus
- Figure 42: Search for Best Focus
- Figure 43: Scene with Two Potential Focus Targets at Different Distances from Camera
- Figure 44: Dependence of Luminance-Normalized Local Sharpness Scores on Lens Position
- Figure 45: Example of Position Weight Histogram Created by AF Driver
- Figure 46: Auto Focus Windows
- Figure 47: Computation of Sharpness Scores and Luminance Average for an AF Window
- Table 41: Examples of AF Filters that can be Programmed into the MT9D111
- Spectral Characteristics
- Electrical Specifications
- Packaging
- Appendix A: Two-Wire Serial Register Interface
- Protocol
- Sequence
- Bus Idle State
- Start Bit
- Stop Bit
- Slave Address
- Data Bit Transfer
- Acknowledge Bit
- No-Acknowledge Bit
- Page Register
- Sample Write and Read Sequences
- Figure 52: WRITE Timing to R0x09:0-Value 0x0284
- Figure 53: READ Timing from R0x09:0; Returned Value 0x0284
- Figure 54: WRITE Timing to R0x09:0-Value 0x0284
- Figure 55: READ Timing from R0x09:0; Returned Value 0x0284
- Figure 56: Two-Wire Serial Bus Timing Parameters
- Table 46: Two-wire Serial Bus Characteristics
- Revision History
PDF: 09005aef8202ec2e/Source: 09005aef8202ebf7 Micron Technology, Inc., reserves the right to change products or specifications without notice.
MT9D111__6_REV5.fm - Rev. B 2/06 EN
136 ©2004 Micron Technology, Inc. All rights reserved.
MT9D111 - 1/3.2-Inch 2-Megapixel SOC Digital Image Sensor
Firmware
Micron Confidential and Proprietary
Firmware
Firmware implements all automatic functionality of the camera, including auto expo-
sure, white balance, auto focus, flicker detection and so on. The firmware consists of
drivers, generally one driver per each major control function. The firmware runs on a
6811-compatible microcontroller with a mathematical co-processor. 32K of metal mask-
programmable PROM is available for non-volatile code. 2K of volatile SRAM is available,
where typically the first 1K of SRAM is used by the PROM drivers for data and stack,
while to the second 1K is reserved for loadable custom code.
The firmware and MCU subsystem targets to achieve the following high-level goals and
features:
• execute applications from ROM and RAM
• execute applications in real-time, synchronized to IFP
• allow loading custom executable programs
• firmware controls IFP by reading and writing ring bus registers
• firmware consists from drivers and bootstrap code
• user can extend or override functionality of ROM drivers
• user can add all new drivers
• drivers have variables; user configures drivers by setting variables via two-wire serial
interface
• when idle, puts MCU into low-power sleep mode
• a minimal code overhead due to flexibility
• transparency from firmware build version
• stability, diagnostics and recovery from software crashes
• framework for application and driver development
The firmware is written in C with some inline assembler where extra performance is
required. It runs on 6811-compatible microcontroller with a mathematical co-processor.
Overview of Architecture
Bootstrap Routine
The firmware consists of a bootstrap code, drivers and a test module. The bootstrap
code initializes internal low-level MCU registers, performs a mini-self-test, and sets up a
128-bytes deep stack. The main routine is then invoked.
Drivers
Firmware applications are organized into drivers. Each driver performs a specific func-
tion. Each driver has its own data structure with various variables. The user can access
the data structure via R198:1 and R200:1 to read or write variables. The access is imple-
mented using hardware direct memory access (DMA).
Drivers are static objects with virtual methods. Each driver has an associated data struc-
ture and a driver ID. To access a driver variable, the user must know driver ID and vari-
able offset in the data structure. Driver methods are implemented using a virtual
method table (VMT). VMT is a table of pointers to driver methods. The object data struc-
ture has a pointer to VMT. Software routines must call methods indirectly, via VMT
pointer. This allows overriding of methods.
Extending and Overriding Drivers
VMTs are necessary to be able to override a driver. To override a driver, the software
developer has to perform the following steps:
1. Load executable code










