00001 //mt9x001.h 00002 #define MT9M001_PARTID 0x8411 00003 #define MT9D001_PARTID 0x8511 00004 #define MT9T001_PARTID 0x1601 00005 #define MT9P001_PARTID 0x1801 00006 #define MT9X001_PARTIDMASK 0xff00 00007 #define MT9X001_I2C_ADDR 0xba 00008 #define MT9P001_I2C_ADDR 0x90 //change later to the same 0xba as others 00009 #define MT9M_TYP 1 00010 #define MT9D_TYP 2 00011 #define MT9T_TYP 3 00012 #define MT9P_TYP 4 00013 00014 /* i2c Micron MI-1300 registers will be defined here */ 00015 #define P_MT9X001_CHIPVER 0x00 /* Chip version, dflt= 0x8411 - will change??? /0x1801 */ 00016 #define P_MT9X001_ROWSTART 0x01 /* First row to read out, dflt=0x0c/0x0c/0x14/0x36 [0..2004],even*/ 00017 #define P_MT9X001_COLSTART 0x02 /* First column to read out, must be even! Dflt=0x14/18/20/0x10 [0..2750],even */ 00018 #define P_MT9X001_HEIGHT 0x03 /* Number of rows-1 (min value=2), dflt=0x03ff/4af/5ff/0x797 1..2005], odd */ 00019 #define P_MT9X001_WIDTH 0x04 /* Number of columns-1 (odd, >=3),dflt =0x4ff/63f/7ff/a1f [1..2751] odd */ 00020 #define P_MT9X001_HORBLANK 0x05 /* Horizontal blanking, dflt=0x09/35/8e/0 pixels [0..4095]*/ 00021 #define P_MT9X001_VERTBLANK 0x06 /* Vertical blanking, dflt=0x19/19/19/19 rows [8..2047]*/ 00022 #define P_MT9X001_OUTCTRL 0x07 /* Output format bits (dflt=2/2/2/1f82) : 00023 bit 0 - 0 - normal, 1 - do not update integration, gains, blanking, flip, decimation'' 00024 bit 1 - 0 - stop sensor, 1 - normal (0->1 restarts from start of the frame) 00025 bits 2,3 should be 0 (in mt9p bit 2 selects fifo output data) 00026 bit 6 - 0 - normal, 1 - test (mt9p - reserved) 00027 mt9p001: 00028 9:7 pixclk slew rate (0..7, higher - faster) dflt - 7 00029 12:10 output (but pixclk) slew rate (0..7, higher - faster) dflt -7 00030 00031 */ 00032 #define P_MT9X001_SHTRWDTHU 0x08 /* Shutter width upper - number of rows to integrate (dflt=0x?/?/0/0) */ 00033 #define P_MT9X001_SHTRWDTH 0x09 /* Shutter width - number of rows to integrate (dflt=0x419/4c9/619/797) */ 00034 #define P_MT9X001_PXLCTL 0x0a /* MT9P: Pixel clock control (dflt=0) 00035 bits 6:0 - divide pixel clock {0,1,2,4,8,16,32,64} 00036 bits 10:8 - shift pixel clock [-2,2] 00037 bit 15 - invert pixel clock 00038 */ 00039 #define P_MT9X001_RESTART 0x0b /* Sensor restart (autozeroed) writing 1 restarts frame /0 00040 bit 0 - 1 - restart (autoclearing bit) 00041 bit 1 - pause restart 00042 bit 2 - trigger (like trigger input) 00043 */ 00044 00045 #define P_MT9X001_SHTRDLY 0x0c /* Shutter delay - number of pixels before row reset (dflt=0/0/0) - not mt9p*/ 00046 00047 #define P_MT9X001_RESET 0x0d /* 0 - normal, 1 - reset /0 */ 00048 00049 #define P_MT9X001_PLL1 0x10 /* MT9P: PLL CTL 1 (dflt=0x50) 00050 bit 0 - power PLL 00051 bit 1 - use PLL 00052 other bits - set to dflt (0x50) 00053 */ 00054 00055 #define P_MT9X001_PLL2 0x11 /* MT9P: PLL CTL 2 (dflt=0x6404) 00056 5:0 - PLL n divider [0,63] - dflt 4 00057 15:8 PLL m factor [16,255] - dflt 0x64 00058 */ 00059 #define P_MT9X001_PLL3 0x12 /* MT9P: PLL CTL 3 (dflt=0x0) 00060 4:0 PLL p1 divider [0,127] 00061 */ 00062 00063 #define P_MT9X001_RMODE1 0x1e /* Read options 1, (dflt=0x8000/8040/8040/4006): 00064 ---+bits 0,1 - reserved, sould be 0 | strobe end 00065 ++--bit 2 - column skip 4 (1- skip, 0 - no) reg 0x20 bit 3 should be 0 to enable this bit 00066 ++--bit 3 - row skip 4 (1- skip, 0 - no) reg 0x20 bit 4 should be 0 to enable this bit 00067 ---+bits 3:2 - Strobe start 00068 ++-+bit 4 - column skip 8 (1- skip, 0 - no) bit 2 and reg 0x20 bit 3 should be 0 to enable this bit 00069 ---+bit 4 - Strobe enable 00070 ++--bit 5 - row skip 8 (1- skip, 0 - no) bit 3 and reg 0x20 bit 4 should be 0 to enable this bit 00071 ---+bit 5 - invert strobe 00072 -+--bit 6 - Noise suppression (1 - enabled, default=1) 00073 ---+bit 6 - bulb exposure 00074 ---+bit 7 - Global shutter reset (0 - ers) 00075 ++++bit 8 - snapshot mode (0 - continuous, 1 - wait trigger) 00076 +++-bit 9 - strobe enable (1 - enable, 0 - disable) 00077 ---+bit 9 - inver trigger 00078 +++-bit 10 - strobe width (0 - minimal, 1 - extended) 00079 ---+bit 10 - continuous line valid (during vert blank) 00080 +++-bit 11 - strobe override (strobe enable should be 0) - set strobe active if 1, 0 - normal 00081 ---+bit 11 - XOR line valid 00082 ---bits 12,13,14 - reserved, should be 0 00083 +++bit 15 - reserved, should be 1 00084 */ 00085 #define P_MT9X001_RMODE2 0x20 /* Read options 2, (dflt=0x1104/1104/0/40): 00086 +++-bit 0 - allow "bad frames". 0 (default) - output only good frames, 1 - allow bad also 00087 ----bits 1 - reserved, sould be 0 00088 ++--bit 2 - reserved, sould be 1/1/0 00089 ++--bit 3 - column skip (1 - read 2, skip 2; 0 - read all) If this bit is 1, both column skip 4 and column skip 8 (0x1e) are ignored 00090 ++--bit 4 - row skip (1 - read 2, skip 2; 0 - read all) Similar to the above 00091 ---+bit 5 -column sum in binning (0 - average) 00092 ++--bit 6 - reserved, should be 0 00093 ---+bit 6 - row BLC (dflt=`1) (use per-row black level, 0 - global) 00094 +??-bit 7 - flip odd/even rows (0 - normal) 00095 ++--bit 8 - reserved, should be 1 00096 +++-bit 9 - enable "line valid" during vertical blanking, 0 - normal (no lane valid during blanking) 00097 +++-bit 10 - XOR "line valid" with vertical blanking, 0 just mask "l.v." with bit 9 00098 +---bit 11 - reserved, sould be 0 00099 ---+bit 11 - show dark rows 00100 +---bit 12 - reserved, sould be 1 00101 ---+bit 12 - show dark columns 00102 +---bits 13 - reserved, sould be 0 00103 --++bit 14 - flip horizontal (0 - normal) *UNDOCUMENTED* documented in MT9P001 !! 00104 --++bit 15 - flip vertical (0 - normal) 00105 */ 00106 #define P_MT9X001_RMODE3 0x21 /* Read options 3 (MT9T only), (dflt=0x0): 00107 --+-bit 0 - Global Reset. If set, uses global reset in snapshot mode (dflt=0x0) 00108 --+-bit 1 - Use GSHT_CTL (if set uses GSHT_CTL pad signal only, if 0 - together with TRIGGER 00109 */ 00110 #define P_MT9X001_RAM 0x22 /* Row address mode (MT9T,P only), (dflt=0x0): 00111 --++bits 2:0 Row skip - number of rows to skip (0 - each row). Row period will be this value+1 (even in binning mode) 00112 --++bits 5:4 Row Bin - number of rows to bin to the first one. For full binning <Row skip>==<row bin> 00113 */ 00114 #define P_MT9X001_CAM 0x23 /* Column address mode (MT9T,P only), (dflt=0x0): 00115 --++bits 2:0 Column skip - number of column-pairs to skip (0 - each column-pair). Column-pair period will be this value+1 (even in binning mode) 00116 --++bits 5:4 Column Bin - number of columns to bin to the first one. Not clear is binning also in pairs? needs testing 00117 Column start address should be multiple of <column bin>+1 00118 */ 00119 #define P_MT9X001_GREEN1 0x2b /* Green Gain 1, dflt= 0x08 (1x) 00120 for MT9T bits 14:8 - "digital gain" */ 00121 #define P_MT9X001_BLUE 0x2c /* Green Gain 1, dflt= 0x08 (1x) 00122 for MT9T bits 14:8 - "digital gain" */ 00123 #define P_MT9X001_RED 0x2d /* Green Gain 1, dflt= 0x08 (1x) 00124 for MT9T bits 14:8 - "digital gain" */ 00125 #define P_MT9X001_GREEN2 0x2e /* Green Gain 1, dflt= 0x08 (1x) 00126 for MT9T bits 14:8 - "digital gain" */ 00127 #define P_MT9X001_ALLGAINS 0x35 /* write to all 4 gains (0x2b,0x2c,0x2d,0x2e), read from red (0x2b) */ 00128 #define P_MT9X001_DESIRBLACK 0x49 /* bits 11:2 - desired black level (MT9T,P only dflt=0xa8) */ 00129 #define P_MT9X001_ROWRBLACKOFFS 0x4b /* bits 11:0 - desired black level (MT9P only - dflt=0x28) */ 00130 #define P_MT9X001_COARSETHRSH 0x5d /* Black level calibration coarse thersholds (MT9T only), dflt=0x2d13 00131 --+bits 6:0 low coarse thershold (should be less than low thershold - see 0x5f) ,dflt=0x13 00132 --+bits 14:8 high coarse thershold (should be noless than high thershold - see 0x5f) ,dflt=0x2d 00133 */ 00134 00135 #define P_MT9X001_CALTHRESH 0x5f /* Black level calibration control fields b(dflt=0x904/a39f/231d): 00136 +--bits 5:0 - Low threshold for black in ADC LSBs (default - 4) 00137 -+-bits 5:0 - Low threshold for black in ADC LSBs (default - 29) 00138 --+bits 6:0 - Low threshold for black in ADC LSBs (default - 0x13) 00139 ++-bit 7 - Override automatic bits 5:0 and 14:8, 0 - automatic. dflt= 0/1/x 00140 +--bits 14:8 - Maximal allowed black level in ADC LSBs (default - low theresh+5=0x09) 00141 -+-bits 14:8 - Maximal allowed black level in ADC LSBs (default - low theresh+5=0x23) 00142 --+bits 14:8 - Maximal allowed black level in ADC LSBs (default - low theresh+5=0x23) 00143 ++-bit 15 - no gain dependence, 0 - both thresholds set automatically, dflt=0/1/x 00144 */ 00145 #define P_MT9X001_CALGREEN1 0x60 /* analog offset for GREEN1. For MT9M, MT9D: bits 7:0 - magnitude, bit 8 - sign, 00146 MT9T - two's complement 00147 */ 00148 #define P_MT9X001_CALGREEN2 0x61 /* analog offset for GREEN21. For MT9M, MT9D: bits 7:0 - magnitude, bit 8 - sign, 00149 MT9T - two's complement 00150 */ 00151 #define P_MT9X001_CALCTRL 0x62 /* Black levels calibration control fields (dflt 0x498/8498/0) 00152 +++bit 0 - manual override, correct with programmed values. 0 (default) - automatically adjust offset values 00153 ++-bits 2,1 - force/disable black level calibration. 00 - apply calibration during ADC operation only (default), 00154 10 - apply calibration continuously, X1 - disable black level correction (set calibration voltages to 0) 00155 --+bit 2 0 - enable offset calibration (dflt), 1 - disable offset calibration voltage 00156 ++-bits 4:3 - reserved, sould be 1 00157 ++-bits 6:5 - reserved, sould be 0 00158 ++-bit 7 - reserved, sould be 1 00159 ++-bits 9:8 - reserved, sould be 0 00160 ++-bit 10 - reserved, sould be 1 00161 ++-bit 11 - 1 - do not reset the upper threshold after a black level recalculation sweep, 0 - reset after sweep (default) 00162 +++bit 12 - (autoreset bit) - start a new running average and perform a fast black level calibration (0 - normal) 00163 ++-bits 14:13 - reserved, sould be 0 00164 --+bit 13 - if set, lock red and blue channels calibration (red and blue gains should be equal) 00165 --+bit 14 - if set, lock green1 and green2 channels calibration (red and blue gains should be equal) 00166 ++-bit 15 - 1 - do not perform fast sweep after gains change, 0 - normal operation 00167 */ 00168 #define P_MT9X001_CALRED 0x63 /* analog offset for RED. For MT9M, MT9D: bits 7:0 - magnitude, bit 8 - sign 00169 MT9T - two's complement 00170 */ 00171 #define P_MT9X001_CALBLUE 0x64 /* analog offset for BLUE. For MT9M, MT9D: bits 7:0 - magnitude, bit 8 - sign 00172 MT9T - two's complement */ 00173 #define P_MT9X001_7F 0x7f /* Should be written 0 to prevent blue "bluming" columns*/ 00174 00175 #define P_MT9X001_TEST 0xa0 00176 00193 #define P_MT9X001_CHIPEN 0xF1 /* Chip enable and i2c sync (mirrors bits in feg 0x07 (default=0x01): 00194 ++-bit 0 - 1 - normal operation, 0 - stop readout (same as reg 0x07, bit 1) 00195 ++-bit 1 - 0 - normal, appropriate changes are made at frame boudary. 1 - do not update (same as reg 7 bit 0) 00196 */ 00197 #define P_MT9X001_CHIPEN1 0xF8 /* Chip enable and i2c sync (mirrors bits in feg 0x07 (default=0x01): 00198 --+bit 0 - 1 - normal operation, 0 - stop readout (same as reg 0x07, bit 1) 00199 --+bit 1 - 0 - normal, appropriate changes are made at frame boudary. 1 - do not update (same as reg 7 bit 0) 00200 */ 00201 00202 int mt9x001_pgm_detectsensor (struct sensor_t * sensor, struct framepars_t * thispars, struct framepars_t * prevpars, int frame8); 00203 #if 0 00204 int adjustBinning_mt9x001(void); 00205 int program_woi_mt9x001(int nonstop); 00206 int program_gains_mt9x001(void); 00207 int program_exposure_mt9x001(void); 00208 #endif