Sapphire SoC DS Sapphire SoC UG Sapphire HP SoC DS Sapphire HP SoC UG RISC-V Embedded IDE UG Board Support Package
Loading...
Searching...
No Matches
IMX219.c
Go to the documentation of this file.
1
2// Copyright (C) 2013-2026 Efinix Inc. All rights reserved.
3// Full license header bsp/efinix/EfxSapphireSocRV64/include/LICENSE.MD
5
6#include "cam/device/IMX219.h"
7
17
18/*----------------------------------------------------------------------------*/
19/* Register Definition */
20/*----------------------------------------------------------------------------*/
21
22//Status Registers – [0x0000-0x001B] (Read Only Dynamic Registers)
23#define MODEL_ID1 0x0000 //[15:8]
24#define MODEL_ID0 0x0001 //[7:0]
25#define Lot_ID2 0x0004 //[23:16]
26#define Lot_ID1 0x0005 //[15:8]
27#define Lot_ID0 0x0006 //[7:0]
28#define Wafer_Num 0x0007
29#define Chip_Number1 0x000D //[15:8]
30#define Chip_Number0 0x000E //[7:0]
31#define FRM_CNT 0x0018
32#define Chip_number 0x0019
33#define DT_PEDESTAL1 0x001A //[9:8]
34#define DT_PEDESTAL0 0x001B //[7:0]
35
36// Frame Format Description – [0x0040-0x0047] (Read only)
37#define FRM_FMT_TYPE 0x0040
38#define FRM_FMT_SUBTYPE 0x0041
39#define FRM_FMT_DESC0_1 0x0042 //[15:8]
40#define FRM_FMT_DESC0_0 0x0043 //[7:0]
41#define FRM_FMT_DESC1_1 0x0044 //[15:8]
42#define FRM_FMT_DESC1_0 0x0045 //[7:0]
43#define FRM_FMT_DESC2_1 0x0046 //[15:8]
44#define FRM_FMT_DESC2_0 0x0047 //[7:0]
45
46
47//Analogue Gain Description Registers – [0x0080-0x0093] (Read Only)
48#define analogue_gain_capability 0x0081 //[7:0]
49#define analogue_gain_code_min 0x0085 //[7:0]
50#define analogue_gain_code_max 0x0086 //[7:0]
51#define analogue_gain_code_step 0x0088 //[7:0]
52#define analogue_gain_code_type 0x008A //[7:0]
53#define analogue_gain_code_m0 0x008C //[7:0]
54#define analogue_gain_code_c0 0x008E //[7:0]
55#define analogue_gain_code_m1 0x0090 //[7:0]
56#define analogue_gain_code_c1 0x0092 //[7:0]
57
58//Data Format Description – [0x00C0-0x00D1] (Read Only)
59#define DT_FMT_TYPE 0x00C0
60#define DT_FMT_SUBTYPE 0x00C1
61#define DT_FMT_DESC0_1 0x00C2 //[15:8]
62#define DT_FMT_DESC0_0 0x00C3 //[7:0]
63#define DT_FMT_DESC1_1 0x00C4 //[15:8]
64#define DT_FMT_DESC1_0 0x00C5 //[7:0]
65
66//General Set-up Registers – [0x0100-0x0106] (Read and Write)
67#define mode_select 0x0100
68#define software_reset 0x0103
69#define corrupted_frame_status 0x0104
70#define mask_corrupted_frames 0x0105
71#define fast_standby_enable 0x0106
72
73//Output Set-up Registers – [0x0110-0x0147] (Read and Write)
74#define CSI_CH_ID 0x0110 //[1:0]
75#define CSI_SIG_MODE 0x0111 //[1:0]
76#define CSI_LANE_MODE 0x0114 //[1:0]
77#define TCLK_POST_1 0x0118 //[8]
78#define TCLK_POST_0 0x0119 //[7:0]
79#define THS_PREPARE_1 0x011A //[8]
80#define THS_PREPARE_0 0x011B //[7:0]
81#define THS_ZERO_MIN_1 0x011C //[8]
82#define THS_ZERO_MIN_0 0x011D //[7:0]
83#define THS_TRAIL_1 0x011E //[8]
84#define THS_TRAIL_0 0x011F //[7:0]
85#define TCLK_TRAIL_MIN_1 0x0120 //[8]
86#define TCLK_TRAIL_MIN_0 0x0121 //[7:0]
87#define TCLK_PREPARE_1 0x0122 //[8]
88#define TCLK_PREPARE_0 0x0123 //[7:0]
89#define TCLK_ZERO_1 0x0124 //[8]
90#define TCLK_ZERO_0 0x0125 //[7:0]
91#define TLPX_1 0x0126 //[8]
92#define TLPX_0 0x0127 //[7:0]
93#define DPHY_CTRL 0x0128 //[0] 0: auto 1:manual
94#define EXCK_FREQ_1 0x012A //[15:8]
95#define EXCK_FREQ_0 0x012B //[7:0]
96#define TEMPERATURE 0x0140 //[7] Enable [6:0] val
97#define READOUT_V_CNT_1 0x0142 //[15:8]
98#define READOUT_V_CNT_0 0x0143 //[7:0]
99#define VSYNC_POL 0x0144 //[0] 0:low active 1:high active
100#define FLASH_POL 0x0145 //[0] 0:High-active 1:Lo-active
101#define VSYNC 0x0147 //[0] 0:Vsync 1:Reserved
102
103//Frame Bank Control Registers - [0x0150-0x0153] (Read and Write)
104#define FRAME_BANK_CTRL 0x0150 //[1:0] [1]Status [0]Enable
105#define FRAME_BANK_FRM_CNT 0x0151 //[7:0]
106#define FRAME_BANK_FAST_TRACKING 0x0152 //[0]
107
108//Frame Bank Registers Group “A”- [0x0154-0x018D] (Read and Write)
109
110#define FRAME_DURATION_A 0x0154
111#define COMP_ENABLE_A 0x0155
112#define ANA_GAIN_GLOBAL_A 0x0157
113#define DIG_GAIN_GLOBAL_A_1 0x0158 //[11:8]
114#define DIG_GAIN_GLOBAL_A_0 0x0159 //[7:0]
115#define COARSE_INTEGRATION_TIME_A_1 0x015A //[15:8]
116#define COARSE_INTEGRATION_TIME_A_0 0x015B //[15:8]
117#define SENSOR_MODE_A 0x015D //[0] 0:ERS
118#define FRM_LENGTH_A_1 0x0160 //[15:8]
119#define FRM_LENGTH_A_0 0x0161 //[7:0]
120
121
122#define LINE_LENGTH_A_1 0x0162//[15:8]
123#define LINE_LENGTH_A_0 0x0163//[7:0]
124#define X_ADD_STA_A_1 0x0164//[11:8]
125#define X_ADD_STA_A_0 0x0165//[7:0]
126#define X_ADD_END_A_1 0x0166//[11:8]
127#define X_ADD_END_A_0 0x0167//[7:0]
128#define Y_ADD_STA_A_1 0x0168//[11:8]
129#define Y_ADD_STA_A_0 0x0169//[7:0]
130#define Y_ADD_END_A_1 0x016A//[11:8]
131#define Y_ADD_END_A_0 0x016B//[7:0]
132#define x_output_size_A_1 0x016C//[11:8]
133#define x_output_size_A_0 0x016D//[7:0]
134#define y_output_size_A_1 0x016E//[11:8]
135#define y_output_size_A_0 0x016F//[7:0]
136
137
138#define X_ODD_INC_A 0x0170
139#define Y_ODD_INC_A 0x0171
140#define IMG_ORIENTATION_A 0x0172 //[1:0]
141#define BINNING_MODE_H_A 0x0174 //[1:0]
142#define BINNING_MODE_V_A 0x0175 //[1:0]
143#define BINNING_CAL_MODE_H_A 0x0176 //[0]
144#define BINNING_CAL_MODE_V_A 0x0177 //[0]
145#define ANA_GAIN_GLOBAL_SHORT_A 0x0189
146#define COARSE_INTEG_TIME_SHORT_A_1 0x018A //[15:8]
147#define COARSE_INTEG_TIME_SHORT_A_0 0x018B //[7:0]
148#define CSI_DATA_FORMAT_A_1 0x018C //[15:8]
149#define CSI_DATA_FORMAT_A_0 0x018D //[7:0]
150
151//Frame Bank Registers Group “B”- [0x0254-0x028D] (Read and Write)
152
153#define FRAME_DURATION_B 0x0254
154#define COMP_ENABLE_B 0x0255
155#define ANA_GAIN_GLOBAL_B 0x0257
156#define DIG_GAIN_GLOBAL_B_1 0x0258 //[11:8]
157#define DIG_GAIN_GLOBAL_B_0 0x0259 //[7:0]
158#define COARSE_INTEGRATION_TIME_B_1 0x025A //[15:8]
159#define COARSE_INTEGRATION_TIME_B_0 0x025B //[15:8]
160#define SENSOR_MODE_B 0x025D //[0] 0:ERS
161#define FRM_LENGTH_B_1 0x0260 //[15:8]
162#define FRM_LENGTH_B_0 0x0261 //[7:0]
163
164
165#define LINE_LENGTH_B_1 0x0262//[15:8]
166#define LINE_LENGTH_B_0 0x0263//[7:0]
167#define X_ADD_STA_B_1 0x0264//[11:8]
168#define X_ADD_STA_B_0 0x0265//[7:0]
169#define X_ADD_END_B_1 0x0266//[11:8]
170#define X_ADD_END_B_0 0x0267//[7:0]
171#define Y_ADD_STA_B_1 0x0268//[11:8]
172#define Y_ADD_STA_B_0 0x0269//[7:0]
173#define Y_ADD_END_B_1 0x026A//[11:8]
174#define Y_ADD_END_B_0 0x026B//[7:0]
175#define x_output_size_B_1 0x026C//[11:8]
176#define x_output_size_B_0 0x026D//[7:0]
177#define y_output_size_B_1 0x026E//[11:8]
178#define y_output_size_B_0 0x026F//[7:0]
179
180
181#define X_ODD_INC_B 0x0270
182#define Y_ODD_INC_B 0x0271
183#define IMG_ORIENTATION_B 0x0272 //[1:0]
184#define BINNING_MODE_H_B 0x0274 //[1:0]
185#define BINNING_MODE_V_B 0x0275 //[1:0]
186#define BINNING_CAL_MODE_H_B 0x0276 //[0]
187#define BINNING_CAL_MODE_V_B 0x0277 //[0]
188#define ANA_GAIN_GLOBAL_SHORT_B 0x0289
189#define COARSE_INTEG_TIME_SHORT_B_1 0x028A //[15:8]
190#define COARSE_INTEG_TIME_SHORT_B_0 0x028B //[7:0]
191#define CSI_DATA_FORMAT_B_1 0x028C //[15:8]
192#define CSI_DATA_FORMAT_B_0 0x028D //[7:0]
193
194//Clock Set-up Registers – [0x0300-0x0313] (Read and Write)
195
196
197#define VTPXCK_DIV 0x0301
198#define VTSYCK_DIV 0x0303
199#define PREPLLCK_VT_DIV 0x0304
200#define PREPLLCK_OP_DIV 0x0305
201#define PLL_VT_MPY_1 0x0306 //[10:8]
202#define PLL_VT_MPY_0 0x0307 //[7:0]
203#define OPPXCK_DIV 0x0309 //[4:0]
204#define OPSYCK_DIV 0x030B //[1:0]
205#define PLL_OP_MPY_1 0x030C //[10:8]
206#define PLL_OP_MPY_0 0x030D //[7:0]
207
208
209//Flash Control (ERS) Registers – [0x0320-0x0338] (Read and Write)
210
211#define FLASH_START_TRIG 0x0320
212#define FLASH_STATUS 0x0321
213#define FLASH_STROBE_DIV 0x0322//[7:0]
214#define FLASH_STROBE_OUTPUT_ENABLE 0x0324
215#define FLASH_MODE 0x032E //[1:0] 0:shutter single 1:shutter continue 2:vcnt single
216#define FLASH_REF_MODE 0x032F //[0]
217#define FLASH_STROBE_REF_1 0x0330 //[15:8]
218#define FLASH_STROBE_REF_0 0x0331 //[7:0]
219#define FLASH_STROBE_LATENCY_RS_1 0x0332 //[15:8]
220#define FLASH_STROBE_LATENCY_RS_0 0x0333 //[7:0]
221#define FLASH_STROBE_HI_PERIOD_RS_1 0x0334 //[15:8]
222#define FLASH_STROBE_HI_PERIOD_RS_0 0x0335 //[7:0]
223#define FLASH_STROBE_LO_PERIOD_RS_1 0x0336 //[15:8]
224#define FLASH_STROBE_LO_PERIOD_RS_0 0x0337 //[7:0]
225#define FLASH_STROBE_COUNT_RS 0x0338
226
227//Even increment Registers – [0x0381-0x0383] (Read Only)
228#define X_EVN_INC 0x0381 //[2:0]
229#define Y_EVN_INC 0x0383 //[2:0]
230
231//Integration Time Registers – [0x0388-0x0389] (Read only)
232#define FINE_INTEG_TIME_1 0x0388//[15:8]
233#define FINE_INTEG_TIME_0 0x0389//[7:0]
234
235//Test Pattern Registers – [0x0600-0x0627] (Read and Write)
236#define test_pattern_Ena 0x0600 //[0]
237#define test_pattern_mode 0x0601 //[7:0]
238#define TD_R_1 0x0602 //[9:8]
239#define TD_R_0 0x0603 //[7:0]
240#define TD_GR_1 0x0604 //[9:8]
241#define TD_GR_0 0x0605 //[7:0]
242#define TD_B_1 0x0606 //[9:8]
243#define TD_B_0 0x0607 //[7:0]
244#define TD_GB_1 0x0608 //[9:8]
245#define TD_GB_0 0x0609 //[7:0]
246#define H_CUR_WIDTH_1 0x060A //[15:8]
247#define H_CUR_WIDTH_0 0x060B //[7:0]
248#define H_CUR_POS_1 0x060C //[15:8]
249#define H_CUR_POS_0 0x060D //[7:0]
250#define V_CUR_WIDTH_1 0x060E //[15:8]
251#define V_CUR_WIDTH_0 0x060F //[7:0]
252#define V_CUR_POS_1 0x0601 //[15:8]
253#define V_CUR_POS_0 0x0602 //[7:0]
254#define TP_WINDOW_X_OFFSET_1 0x0620 //[11:8]
255#define TP_WINDOW_X_OFFSET_0 0x0621 //[7:0]
256#define TP_WINDOW_Y_OFFSET_1 0x0622 //[11:8]
257#define TP_WINDOW_Y_OFFSET_0 0x0623 //[7:0]
258#define TP_WINDOW_WIDTH_1 0x0624 //[11:8]
259#define TP_WINDOW_WIDTH_0 0x0625 //[7:0]
260#define TP_WINDOW_HEIGHT_1 0x0626 //[11:8]
261#define TP_WINDOW_HEIGHT_0 0x0627 //[7:0]
262
263//Integration Time Parameter Limit Registers – [0x1000-0x1007] (Read Only)
264
265#define integration_time_capability 0x1001
266#define coarse_integration_time_min_1 0x1004 //[15:8]
267#define coarse_integration_time_min_0 0x1005 //[7:0]
268#define coarse_integration_time_max_margin_1 0x1006 //[15:8]
269#define coarse_integration_time_max_margin_0 0x1007 //[7:0]
270
271//Digital Gain Parameter Limit Registers – [0x1080-0x1089] (Read Only)
272
273#define digital_gain_capability 0x1081 //[0]
274#define digital_gain_min_1 0x1084 //[15:8]
275#define digital_gain_min_0 0x1085 //[7:0]
276#define digital_gain_max_1 0x1086 //[15:8]
277#define digital_gain_max_0 0x1087 //[7:0]
278#define digital_gain_step_size_1 0x1088 //[15:8]
279#define digital_gain_step_size_0 0x1089 //[7:0]
280
281//Pre-PLL and PLL Clock Set-up Capability Registers – [0x1100-0x111F] (Read Only)
282
283#define min_ext_clk_freq_mhz_3 0x1100 //[31:24]
284#define min_ext_clk_freq_mhz_2 0x1101 //[23:16]
285#define min_ext_clk_freq_mhz_1 0x1102 //[15:8]
286#define min_ext_clk_freq_mhz_0 0x1103 //[7:0]
287#define max_ext_clk_freq_mhz_3 0x1104 //[31:24]
288#define max_ext_clk_freq_mhz_2 0x1105 //[23:16]
289#define max_ext_clk_freq_mhz_1 0x1106 //[15:8]
290#define max_ext_clk_freq_mhz_0 0x1107 //[7:0]
291#define min_pre_pll_clk_div_1 0x1108 //[15:8]
292#define min_pre_pll_clk_div_0 0x1109 //[7:0]
293#define max_pre_pll_clk_div_1 0x110A //[15:8]
294#define max_pre_pll_clk_div_0 0x110B //[7:0]
295
296#define min_pll_ip_freq_mhz_3 0x110C //[31:24]
297#define min_pll_ip_freq_mhz_2 0x110D //[23:16]
298#define min_pll_ip_freq_mhz_1 0x110E //[15:8]
299#define min_pll_ip_freq_mhz_0 0x110F //[7:0]
300
301#define max_pll_ip_freq_mhz_3 0x1110 //[31:24]
302#define max_pll_ip_freq_mhz_2 0x1111 //[23:16]
303#define max_pll_ip_freq_mhz_1 0x1112 //[15:8]
304#define max_pll_ip_freq_mhz_0 0x1113 //[7:0]
305
306#define min_pll_multiplier_1 0x1114 //[15:8]
307#define min_pll_multiplier_0 0x1115 //[7:0]
308#define max_pll_multiplier_1 0x1116 //[15:8]
309#define max_pll_multiplier_0 0x1117 //[7:0]
310#define min_pll_op_freq_mhz_3 0x1118 //[31:24]
311#define min_pll_op_freq_mhz_2 0x1119 //[23:16]
312#define min_pll_op_freq_mhz_1 0x111A //[15:8]
313#define min_pll_op_freq_mhz_0 0x111B //[7:0]
314
315#define max_pll_op_freq_mhz_3 0x111C //[31:24]
316#define max_pll_op_freq_mhz_2 0x111D //[23:16]
317#define max_pll_op_freq_mhz_1 0x111E //[15:8]
318#define max_pll_op_freq_mhz_0 0x111F //[7:0]
319
320//Read Domain Clock Set-up Capability Registers – [0x1120-0x1137] (Read only)
321
322#define min_vt_sys_clk_div_1 0x1120 //[15:8]
323#define min_vt_sys_clk_div_0 0x1121 //[7:0]
324#define max_vt_sys_clk_div_1 0x1122 //[15:8]
325#define max_vt_sys_clk_div_0 0x1123 //[7:0]
326
327#define min_vt_sys_clk_freq_mhz_3 0x1124 //[31:24]
328#define min_vt_sys_clk_freq_mhz_2 0x1125 //[23:16]
329#define min_vt_sys_clk_freq_mhz_1 0x1126 //[15:8]
330#define min_vt_sys_clk_freq_mhz_0 0x1127 //[7:0]
331
332#define max_vt_sys_clk_freq_mhz_3 0x1128 //[31:24]
333#define max_vt_sys_clk_freq_mhz_2 0x1129 //[23:16]
334#define max_vt_sys_clk_freq_mhz_1 0x112A //[15:8]
335#define max_vt_sys_clk_freq_mhz_0 0x112B //[7:0]
336
337#define min_vt_pix_clk_freq_mhz_3 0x112C //[31:24]
338#define min_vt_pix_clk_freq_mhz_2 0x112D //[23:16]
339#define min_vt_pix_clk_freq_mhz_1 0x112E //[15:8]
340#define min_vt_pix_clk_freq_mhz_0 0x112F //[7:0]
341
342#define max_vt_pix_clk_freq_mhz_3 0x1130 //[31:24]
343#define max_vt_pix_clk_freq_mhz_2 0x1131 //[23:16]
344#define max_vt_pix_clk_freq_mhz_1 0x1132 //[15:8]
345#define max_vt_pix_clk_freq_mhz_0 0x1133 //[7:0]
346
347#define min_vt_pix_clk_div_1 0x1134 //[15:8]
348#define min_vt_pix_clk_div_0 0x1135 //[7:0]
349#define max_vt_pix_clk_div_1 0x1136 //[15:8]
350#define max_vt_pix_clk_div_0 0x1137 //[7:0]
351
352//Frame Timing Parameter Limit Registers – [0x1140-0x114B] (Read Only)
353
354#define min_frame_length_lines_1 0x1140 //[15:8]
355#define min_frame_length_lines_0 0x1141 //[7:0]
356#define max_frame_length_lines_1 0x1142 //[15:8]
357#define max_frame_length_lines_0 0x1143 //[7:0]
358#define min_line_length_pck_1 0x1144 //[15:8]
359#define min_line_length_pck_0 0x1145 //[7:0]
360#define max_line_length_pck_1 0x1146 //[15:8]
361#define max_line_length_pck_0 0x1147 //[7:0]
362#define min_line_blanking_pck_1 0x1148 //[15:8]
363#define min_line_blanking_pck_0 0x1149 //[7:0]
364#define min_frame_blanking_lines_1 0x114A //[15:8]
365#define min_frame_blanking_lines_0 0x114B //[7:0]
366
367//Output Clock Set-up Capability Registers – [0x1160-0x1177] (Read Only)
368
369#define min_op_sys_clk_div_1 0x1160 //[15:8]
370#define min_op_sys_clk_div_0 0x1161 //[7:0]
371#define max_op_sys_clk_div_1 0x1162 //[15:8]
372#define max_op_sys_clk_div_0 0x1163 //[7:0]
373
374#define min_op_sys_clk_freq_mhz_3 0x1164 //[31:24]
375#define min_op_sys_clk_freq_mhz_2 0x1165 //[23:16]
376#define min_op_sys_clk_freq_mhz_1 0x1166 //[15:8]
377#define min_op_sys_clk_freq_mhz_0 0x1167 //[7:0]
378#define max_op_sys_clk_freq_mhz_3 0x1168 //[31:24]
379#define max_op_sys_clk_freq_mhz_2 0x1169 //[23:16]
380#define max_op_sys_clk_freq_mhz_1 0x116A //[15:8]
381#define max_op_sys_clk_freq_mhz_0 0x116B //[7:0]
382#define min_op_pix_clk_freq_mhz_3 0x116C //[31:24]
383#define min_op_pix_clk_freq_mhz_2 0x116D //[23:16]
384#define min_op_pix_clk_freq_mhz_1 0x116E //[15:8]
385#define min_op_pix_clk_freq_mhz_0 0x116F //[7:0]
386#define max_op_pix_clk_freq_mhz_3 0x1170 //[31:24]
387#define max_op_pix_clk_freq_mhz_2 0x1171 //[23:16]
388#define max_op_pix_clk_freq_mhz_1 0x1172 //[15:8]
389#define max_op_pix_clk_freq_mhz_0 0x1173 //[7:0]
390#define min_op_pix_clk_div_1 0x1174 //[15:8]
391#define min_op_pix_clk_div_0 0x1175 //[7:0]
392#define max_op_pix_clk_div_1 0x1176 //[15:8]
393#define max_op_pix_clk_div_0 0x1177 //[7:0]
394
395//Image Size Parameter Limit Registers – [0x1180-0x118F] (Read Only)
396#define x_addr_min_1 0x1180 //[15:8]
397#define x_addr_min_0 0x1181 //[7:0]
398#define y_addr_min_1 0x1182 //[15:8]
399#define y_addr_min_0 0x1183 //[7:0]
400#define x_addr_max_1 0x1184 //[15:8]
401#define x_addr_max_0 0x1185 //[7:0]
402#define y_addr_max_1 0x1186 //[15:8]
403#define y_addr_max_0 0x1187 //[7:0]
404#define min_x_output_size_1 0x1188 //[15:8]
405#define min_x_output_size_0 0x1189 //[7:0]
406#define min_y_output_size_1 0x118A //[15:8]
407#define min_y_output_size_0 0x118B //[7:0]
408#define max_x_output_size_1 0x118C //[15:8]
409#define max_x_output_size_0 0x118D //[7:0]
410#define max_y_output_size_1 0x118E //[15:8]
411#define max_y_output_size_0 0x118F //[7:0]
412
413//Sub-Sampling Parameter Limit Registers – [0x11C0-0x11C7] (Read Only)
414#define min_even_inc_1 0x11C0 //[15:8]
415#define min_even_inc_0 0x11C1 //[7:0]
416#define max_even_inc_1 0x11C2 //[15:8]
417#define max_even_inc_0 0x11C3 //[7:0]
418#define min_odd_inc_1 0x11C4 //[15:8]
419#define min_odd_inc_0 0x11C5 //[7:0]
420#define max_odd_inc_1 0x11C6 //[15:8]
421#define max_odd_inc_0 0x11C7 //[7:0]
422
423//Image Compression Capability Registers – [0x1300-0x1301] (Read Only)
424#define compression_capability 0x1301 //[0]
425
426/* -----------------------------------------------------------------------------*/
427/* CAM: Plug & Play Driver
428/* -----------------------------------------------------------------------------*/
430{
431 .cam_init = IMX219_cam_init,
432 .cam_startStreaming = IMX219_startStreaming,
433 .cam_stopStreaming = IMX219_stopStreaming,
434};
435
437{
438 cam_writeReg(cam, 0x30EB, 0x05);
439 cam_writeReg(cam, 0x30EB, 0x0C);
440 cam_writeReg(cam, 0x300A, 0xFF);
441 cam_writeReg(cam, 0x300B, 0xFF);
442 cam_writeReg(cam, 0x30EB, 0x05);
443 cam_writeReg(cam, 0x30EB, 0x09);
444}
445
447{
448 cam_writeReg(cam, x_output_size_A_1 , X>>8);
449 cam_writeReg(cam, x_output_size_A_0 , X & 0xFF);
450 cam_writeReg(cam, y_output_size_A_1 , Y>>8);
451 cam_writeReg(cam, y_output_size_A_0 , Y & 0xFF);
452}
453
454void IMX219_Output_activePixel(cam_instance_t *cam, u16 XStart,u16 XEnd, u16 YStart, u16 YEnd)
455{
456
457 //Max Active pixel 3280* 2464--imx219
458
459 cam_writeReg(cam, X_ADD_STA_A_1 , XStart>>8);
460 cam_writeReg(cam, X_ADD_STA_A_0 , XStart&0xFF);
461 cam_writeReg(cam, X_ADD_END_A_1 , XEnd>>8);
462 cam_writeReg(cam, X_ADD_END_A_0 , XEnd&0xFF);
463 cam_writeReg(cam, Y_ADD_STA_A_1 , YStart>>8);
464 cam_writeReg(cam, Y_ADD_STA_A_0 , YStart&0xFF);
465 cam_writeReg(cam, Y_ADD_END_A_1 , YEnd>>8);
466 cam_writeReg(cam, Y_ADD_END_A_0 , YEnd&0xFF);
467}
468
470{
471 //Max Active pixel 3280* 2464--imx219
472
473 cam_writeReg(cam, X_ADD_STA_A_1 , XStart>>8);
474 cam_writeReg(cam, X_ADD_STA_A_0 , XStart&0xFF);
475 cam_writeReg(cam, X_ADD_END_A_1 , XEnd>>8);
476 cam_writeReg(cam, X_ADD_END_A_0 , XEnd&0xFF);
477}
478
480{
481 //Max Active pixel 3280* 2464--imx219
482
483 cam_writeReg(cam, Y_ADD_STA_A_1 , YStart>>8);
484 cam_writeReg(cam, Y_ADD_STA_A_0 , YStart&0xFF);
485 cam_writeReg(cam, Y_ADD_END_A_1 , YEnd>>8);
486 cam_writeReg(cam, Y_ADD_END_A_0 , YEnd&0xFF);
487}
488
490{
491 //0:no-binning
492 //1:x2-binning
493 //2:x4-binning
494 //3:x2 analog (special)
495
496 if(Xmode>=3) Xmode=3;
497 if(Ymode>=3) Ymode=3;
498
499 cam_writeReg(cam, BINNING_MODE_H_A, Xmode);
500 cam_writeReg(cam, BINNING_MODE_V_A, Ymode);
501}
502
504{
505 cam_writeReg(cam, TP_WINDOW_WIDTH_1 , X>>8);
506 cam_writeReg(cam, TP_WINDOW_WIDTH_0 , X & 0xFF);
507 cam_writeReg(cam, TP_WINDOW_HEIGHT_1 , Y>>8);
508 cam_writeReg(cam, TP_WINDOW_HEIGHT_0 , Y & 0xFF);
509}
510
511void IMX219_TestPattern(cam_instance_t *cam, u8 Enable,u8 mode,u16 X,u16 Y)
512{
513 //0000h - no pattern (default)
514 //0001h - solid color
515 //0002h - 100 % color bars
516 //0003h - fade to grey color bar
517 //0004h - PN9
518 //0005h - 16 split color bar
519 //0006h - 16 split inverted color bar
520 //0007h - column counter
521 //0008h - inverted column counter
522 //0009h - PN31
523
524 cam_writeReg(cam, test_pattern_Ena, 0x00);
525
526 if(Enable==0) mode=0;
527
529
531}
532
533void IMX219_Gainfilter(cam_instance_t *cam , u8 AGain, u16 DGain)
534{
535 cam_writeReg(cam, ANA_GAIN_GLOBAL_A, AGain&0xFF);
536 cam_writeReg(cam, DIG_GAIN_GLOBAL_A_1, (DGain>>8)&0x0F);
537 cam_writeReg(cam, DIG_GAIN_GLOBAL_A_0, DGain&0xFF);
538}
539
540
546
552
554{
555// cam_writeReg(cam, mode_select, 0x00);
558 cam_writeReg(cam, CSI_LANE_MODE, 0x01);
559 cam_writeReg(cam, DPHY_CTRL, 0x00);
560 cam_writeReg(cam, EXCK_FREQ_1, 0x18);
561 cam_writeReg(cam, EXCK_FREQ_0, 0x00);
562 cam_writeReg(cam, FRM_LENGTH_A_1, 0x04);
563 cam_writeReg(cam, FRM_LENGTH_A_0, 0x59);
564
565 cam_writeReg(cam, LINE_LENGTH_A_1, 0x0D);
566 cam_writeReg(cam, LINE_LENGTH_A_0, 0x78);
567
568 //IMX219_Output_activePixel(0, 3279, 0, 2463);
569 IMX219_Output_activePixel(cam, 680, 3279, 0, 2463); //Use offset to have central view for 1920 frame width
570
571 IMX219_Output_Size(cam, 1920, 1080);
572 //IMX219_Output_Size(1280, 720);
573 //IMX219_Output_Size(640, 480);
574
575 cam_writeReg(cam, X_ODD_INC_A, 0x01);
576 cam_writeReg(cam, Y_ODD_INC_A, 0x01);
577
578 //0: No binning; 1: x2 binning; 2: x4 binning; 3: x2 binning (analog special)
579 IMX219_SetBinningMode(cam, 0, 0);
580
583
584 cam_writeReg(cam, VTPXCK_DIV, 0x05);
585 cam_writeReg(cam, VTSYCK_DIV, 0x01);
586 cam_writeReg(cam, PREPLLCK_VT_DIV, 0x03);
587 cam_writeReg(cam, PREPLLCK_OP_DIV, 0x03);
588 cam_writeReg(cam, PLL_VT_MPY_1, 0x00);
589 cam_writeReg(cam, PLL_VT_MPY_0, 0x39);
590 cam_writeReg(cam, OPPXCK_DIV, 0x0A);
591 cam_writeReg(cam, OPSYCK_DIV, 0x01);
592 cam_writeReg(cam, PLL_OP_MPY_1, 0x00);
593 cam_writeReg(cam, PLL_OP_MPY_0, 0x72);
594
595 cam_writeReg(cam, OPPXCK_DIV, 0x0A);
596 cam_writeReg(cam, OPSYCK_DIV, 0x01);
597 cam_writeReg(cam, PLL_OP_MPY_1, 0x00);
598 cam_writeReg(cam, PLL_OP_MPY_0, 0x72);
599
600// cam_writeReg(cam, mode_select, 0x01);
602
603 IMX219_Gainfilter(cam, 0xB9, 0x200);
604
605 cam_writeReg(cam, LINE_LENGTH_A_1, 0x0D);
606 cam_writeReg(cam, LINE_LENGTH_A_0, 0x78);
607
608/*
609 //Shorter camera exposure time. Higher frame rate. 48 fps
610 cam_writeReg(cam, FRM_LENGTH_A_1, 0x03);
611 cam_writeReg(cam, FRM_LENGTH_A_0, 0x71);
612 cam_writeReg(cam, COARSE_INTEGRATION_TIME_A_1, 0x04);
613 cam_writeReg(cam, COARSE_INTEGRATION_TIME_A_0, 0x54);
614*/
615/*
616 //Longer camera exposure time. Trade-off with lower frame rate. 30fps
617 cam_writeReg(cam, FRM_LENGTH_A_1, 0x06);
618 cam_writeReg(cam, FRM_LENGTH_A_0, 0xE3);
619 cam_writeReg(cam, COARSE_INTEGRATION_TIME_A_1, 0x04);
620 cam_writeReg(cam, COARSE_INTEGRATION_TIME_A_0, 0x54);
621*/
622
623 //Longer camera exposure time, suitable for low light condition. Trade-off with lower frame rate. 20 fps
624 cam_writeReg(cam, FRM_LENGTH_A_1, 0x0A);
625 cam_writeReg(cam, FRM_LENGTH_A_0, 0xA8);
628
630
631 return CAM_OK;
632}
#define CSI_LANE_MODE
Definition IMX219.c:76
#define Y_ADD_END_A_0
Definition IMX219.c:131
#define OPPXCK_DIV
Definition IMX219.c:203
#define TP_WINDOW_HEIGHT_0
Definition IMX219.c:261
void IMX219_SetBinningMode(cam_instance_t *cam, u8 Xmode, u8 Ymode)
Definition IMX219.c:489
#define PREPLLCK_OP_DIV
Definition IMX219.c:200
#define EXCK_FREQ_1
Definition IMX219.c:94
#define x_output_size_A_1
Definition IMX219.c:132
#define PREPLLCK_VT_DIV
Definition IMX219.c:199
#define test_pattern_mode
Definition IMX219.c:237
#define Y_ADD_END_A_1
Definition IMX219.c:130
#define Y_ADD_STA_A_0
Definition IMX219.c:129
#define PLL_VT_MPY_0
Definition IMX219.c:202
#define COARSE_INTEGRATION_TIME_A_1
Definition IMX219.c:115
#define TP_WINDOW_WIDTH_1
Definition IMX219.c:258
#define OPSYCK_DIV
Definition IMX219.c:204
#define FRM_LENGTH_A_1
Definition IMX219.c:118
#define FRM_LENGTH_A_0
Definition IMX219.c:119
#define X_ODD_INC_A
Definition IMX219.c:138
#define CSI_DATA_FORMAT_A_0
Definition IMX219.c:149
#define X_ADD_END_A_0
Definition IMX219.c:127
#define CSI_DATA_FORMAT_A_1
Definition IMX219.c:148
#define TP_WINDOW_WIDTH_0
Definition IMX219.c:259
#define DIG_GAIN_GLOBAL_A_1
Definition IMX219.c:113
#define X_ADD_STA_A_1
Definition IMX219.c:124
void IMX219_Output_activePixel(cam_instance_t *cam, u16 XStart, u16 XEnd, u16 YStart, u16 YEnd)
Definition IMX219.c:454
#define ANA_GAIN_GLOBAL_A
Definition IMX219.c:112
void IMX219_Output_Size(cam_instance_t *cam, u16 X, u16 Y)
Definition IMX219.c:446
#define IMG_ORIENTATION_A
Definition IMX219.c:140
void IMX219_AccessCommSeq(cam_instance_t *cam)
Definition IMX219.c:436
#define LINE_LENGTH_A_1
Definition IMX219.c:122
#define y_output_size_A_1
Definition IMX219.c:134
#define X_ADD_STA_A_0
Definition IMX219.c:125
#define DPHY_CTRL
Definition IMX219.c:93
#define Y_ODD_INC_A
Definition IMX219.c:139
#define DIG_GAIN_GLOBAL_A_0
Definition IMX219.c:114
#define X_ADD_END_A_1
Definition IMX219.c:126
#define VTPXCK_DIV
Definition IMX219.c:197
#define BINNING_MODE_H_A
Definition IMX219.c:141
#define PLL_VT_MPY_1
Definition IMX219.c:201
#define VTSYCK_DIV
Definition IMX219.c:198
#define COARSE_INTEGRATION_TIME_A_0
Definition IMX219.c:116
#define test_pattern_Ena
Definition IMX219.c:236
#define x_output_size_A_0
Definition IMX219.c:133
#define EXCK_FREQ_0
Definition IMX219.c:95
#define y_output_size_A_0
Definition IMX219.c:135
#define Y_ADD_STA_A_1
Definition IMX219.c:128
#define TP_WINDOW_HEIGHT_1
Definition IMX219.c:260
void IMX219_Gainfilter(cam_instance_t *cam, u8 AGain, u16 DGain)
Definition IMX219.c:533
#define PLL_OP_MPY_0
Definition IMX219.c:206
#define mode_select
Definition IMX219.c:67
#define PLL_OP_MPY_1
Definition IMX219.c:205
#define BINNING_MODE_V_A
Definition IMX219.c:142
#define LINE_LENGTH_A_0
Definition IMX219.c:123
void IMX219_Output_ColorBarSize(cam_instance_t *cam, u16 X, u16 Y)
Definition IMX219.c:503
IMX219 Driver API definitions. This file provides data structures and APIs for controlling the IMX219...
cam_status_t
CAM Status List.
Definition cam.h:60
@ CAM_OK
Successful Operation *‍/.
Definition cam.h:61
void cam_writeReg(cam_instance_t *cam, u16 reg, u8 data)
Write Data to specific register in camera.
Definition cam.c:19
struct cam_instance cam_instance_t
Forward declaration of CAM instance.
Definition cam.h:107
const cam_api_t IMX219_DRIVER
IMX219 Driver Instance. Point your generic CAM pointer to this structure to use the IMX219 hardware.
Definition IMX219.c:429
void IMX219_Output_activePixelY(cam_instance_t *cam, u16 YStart, u16 YEnd)
Set Active Pixel Range (Y-Axis).
Definition IMX219.c:479
void IMX219_TestPattern(cam_instance_t *cam, u8 Enable, u8 mode, u16 X, u16 Y)
Configure Test Pattern Generator.
Definition IMX219.c:511
cam_status_t IMX219_startStreaming(cam_instance_t *cam)
Start Stream Video.
Definition IMX219.c:541
cam_status_t IMX219_cam_init(cam_instance_t *cam)
Initialize Camera Sequence.
Definition IMX219.c:553
cam_status_t IMX219_stopStreaming(cam_instance_t *cam)
Stop Stream Video.
Definition IMX219.c:547
void IMX219_Output_activePixelX(cam_instance_t *cam, u16 XStart, u16 XEnd)
Set Active Pixel Range (X-Axis).
Definition IMX219.c:469
CAM API structure.
Definition cam.h:113
uint8_t u8
Definition type.h:26
uint16_t u16
Definition type.h:24