PicoCamera 0.2.0
Camera library for RP2040 with an esp32-camera compatible API
GitHub
Loading...
Searching...
No Matches
ov2640_settings.h
1/*
2 * This file is part of the PicoCamera project.
3 * https://github.com/umeiko/PicoCamera
4 *
5 * Author: umeko <umeko@stu.xmu.edu.cn>
6 * License: MIT
7 */
8
9#ifndef OV2640_INIT_H
10#define OV2640_INIT_H
11#include <stdint.h>
12
13#include "ov2640_regs.h"
14
15const uint8_t ov2640_settings_cif[][2] = {
16 {BANK_SEL, BANK_SEL_DSP},
17 {0x2c, 0xff},
18 {0x2e, 0xdf},
19 {BANK_SEL, BANK_SEL_SENSOR},
20 // {ADDVSL, 8},
21 {0x46, 0x3f},
22 {0x3c, 0x32},
23 {COM1, 0x06},
24 {CLKRC, CLKRC_2X | CLKRC_DIV(1)}, //12MHz internal clock for DIV=1
25 {COM2, COM2_OUT_DRIVE_3x},
26 {COM3, 0x38 | COM3_BAND_AUTO},
27 {REG04, REG04_DEFAULT},
28 {COM8, COM8_DEFAULT | COM8_BNDF_EN | COM8_AGC_EN | COM8_AEC_EN},
29 {COM9, COM9_AGC_SET(COM9_AGC_GAIN_8x)},
30 {0x2c, 0x0c},
31 {0x33, 0x78},
32 {0x3a, 0x33},
33 {0x3b, 0xfB},
34 {0x3e, 0x00},
35 {0x43, 0x11},
36 {0x16, 0x10},
37 {0x39, 0x92},
38 {0x35, 0xda},
39 {0x22, 0x1a},
40 {0x37, 0xc3},
41 {0x23, 0x00},
42 {ARCOM2, 0xc0},
43 {0x06, 0x88},
44 {0x07, 0xc0},
45 {COM4, 0x87},
46 {0x0e, 0x41},
47 {0x4c, 0x00},
48 {0x4a, 0x81},
49 {0x21, 0x99},
50 {AEW, 0x40},
51 {AEB, 0x38},
52 {VV, VV_AGC_TH_SET(8,2)},
53 {0x5c, 0x00},
54 {0x63, 0x00},
55 // {FLH, 0x02},
56 {HISTO_LOW, 0x70},
57 {HISTO_HIGH, 0x80},
58 {0x7c, 0x05},
59 {0x20, 0x80},
60 {0x28, 0x30},
61 {0x6c, 0x00},
62 {0x6d, 0x80},
63 {0x6e, 0x00},
64 {0x70, 0x02},
65 {0x71, 0x94},
66 {0x73, 0xc1},
67 {0x3d, 0x34},
68 {0x5a, 0x57},
69 {BD50, 0xbb},
70 {BD60, 0x9c},
71 {COM7, COM7_RES_CIF},
72 {HSTART, 0x11},
73 {HSTOP, 0x43},
74 {VSTART, 0x00},
75 {VSTOP, 0x25},
76 {REG32, REG32_CIF},
77 {0x37, 0xc0},
78 {BD50, 0xca},
79 {BD60, 0xa8},
80 {0x6d, 0x00},
81 {0x3d, 0x38},
82 {BANK_SEL, BANK_SEL_DSP},
83 {0xe5, 0x7f},
84 {MC_BIST, MC_BIST_RESET | MC_BIST_BOOT_ROM_SEL},
85 {0x41, 0x24},
86 {RESET, RESET_JPEG | RESET_DVP},
87 {0x76, 0xff},
88 {0x33, 0xa0},
89 {0x42, 0x20},
90 {0x43, 0x18},
91 {0x4c, 0x00},
92 {CTRL3, CTRL3_WPC_EN | 0x10 },
93 {0x88, 0x3f},
94 {0xd7, 0x03},
95 {0xd9, 0x10},
96 {R_DVP_SP, R_DVP_SP_AUTO_MODE},
97 {0xc8, 0x08},
98 {0xc9, 0x80},
99 {BPADDR, 0x00},
100 {BPDATA, 0x00},
101 {BPADDR, 0x03},
102 {BPDATA, 0x48},
103 {BPDATA, 0x48},
104 {BPADDR, 0x08},
105 {BPDATA, 0x20},
106 {BPDATA, 0x10},
107 {BPDATA, 0x0e},
108 {0x90, 0x00},
109 {0x91, 0x0e},
110 {0x91, 0x1a},
111 {0x91, 0x31},
112 {0x91, 0x5a},
113 {0x91, 0x69},
114 {0x91, 0x75},
115 {0x91, 0x7e},
116 {0x91, 0x88},
117 {0x91, 0x8f},
118 {0x91, 0x96},
119 {0x91, 0xa3},
120 {0x91, 0xaf},
121 {0x91, 0xc4},
122 {0x91, 0xd7},
123 {0x91, 0xe8},
124 {0x91, 0x20},
125 {0x92, 0x00},
126 {0x93, 0x06},
127 {0x93, 0xe3},
128 {0x93, 0x05},
129 {0x93, 0x05},
130 {0x93, 0x00},
131 {0x93, 0x04},
132 {0x93, 0x00},
133 {0x93, 0x00},
134 {0x93, 0x00},
135 {0x93, 0x00},
136 {0x93, 0x00},
137 {0x93, 0x00},
138 {0x93, 0x00},
139 {0x96, 0x00},
140 {0x97, 0x08},
141 {0x97, 0x19},
142 {0x97, 0x02},
143 {0x97, 0x0c},
144 {0x97, 0x24},
145 {0x97, 0x30},
146 {0x97, 0x28},
147 {0x97, 0x26},
148 {0x97, 0x02},
149 {0x97, 0x98},
150 {0x97, 0x80},
151 {0x97, 0x00},
152 {0x97, 0x00},
153 {0xa4, 0x00},
154 {0xa8, 0x00},
155 {0xc5, 0x11},
156 {0xc6, 0x51},
157 {0xbf, 0x80},
158 {0xc7, 0x10},
159 {0xb6, 0x66},
160 {0xb8, 0xA5},
161 {0xb7, 0x64},
162 {0xb9, 0x7C},
163 {0xb3, 0xaf},
164 {0xb4, 0x97},
165 {0xb5, 0xFF},
166 {0xb0, 0xC5},
167 {0xb1, 0x94},
168 {0xb2, 0x0f},
169 {0xc4, 0x5c},
170 {CTRL1, 0xfd},
171 {0x7f, 0x00},
172 {0xe5, 0x1f},
173 {0xe1, 0x67},
174 {0xdd, 0x7f},
175 {IMAGE_MODE, 0x00},
176 {RESET, 0x00},
177 {R_BYPASS, R_BYPASS_DSP_EN},
178 ENDMARKER
179};
180
181static const uint8_t ov2640_settings_to_cif[][2] = {
182 {BANK_SEL, BANK_SEL_SENSOR},
183 {COM7, COM7_RES_CIF},
184
185 //Set the sensor output window
186 {COM1, 0x0A},
187 {REG32, REG32_CIF},
188 {HSTART, 0x11},
189 {HSTOP, 0x43},
190 {VSTART, 0x00},
191 {VSTOP, 0x25},
192
193 //{CLKRC, 0x00},
194 {BD50, 0xca},
195 {BD60, 0xa8},
196 {0x5a, 0x23},
197 {0x6d, 0x00},
198 {0x3d, 0x38},
199 {0x39, 0x92},
200 {0x35, 0xda},
201 {0x22, 0x1a},
202 {0x37, 0xc3},
203 {0x23, 0x00},
204 {ARCOM2, 0xc0},
205 {0x06, 0x88},
206 {0x07, 0xc0},
207 {COM4, 0x87},
208 {0x0e, 0x41},
209 {0x4c, 0x00},
210 {BANK_SEL, BANK_SEL_DSP},
211 {RESET, RESET_DVP},
212
213 //Set the sensor resolution (UXGA, SVGA, CIF)
214 {HSIZE8, 0x32},
215 {VSIZE8, 0x25},
216 {SIZEL, 0x00},
217
218 //Set the image window size >= output size
219 {HSIZE, 0x64},
220 {VSIZE, 0x4a},
221 {XOFFL, 0x00},
222 {YOFFL, 0x00},
223 {VHYX, 0x00},
224 {TEST, 0x00},
225
226 {CTRL2, CTRL2_DCW_EN | 0x1D},
227 {CTRLI, CTRLI_LP_DP | 0x00},
228 //{R_DVP_SP, 0x08},
229 ENDMARKER
230};
231
232static const uint8_t ov2640_settings_to_svga[][2] = {
233 {BANK_SEL, BANK_SEL_SENSOR},
234 {COM7, COM7_RES_SVGA},
235
236 //Set the sensor output window
237 {COM1, 0x0A},
238 {REG32, REG32_SVGA},
239 {HSTART, 0x11},
240 {HSTOP, 0x43},
241 {VSTART, 0x00},
242 {VSTOP, 0x4b},
243
244 //{CLKRC, 0x00},
245 {0x37, 0xc0},
246 {BD50, 0xca},
247 {BD60, 0xa8},
248 {0x5a, 0x23},
249 {0x6d, 0x00},
250 {0x3d, 0x38},
251 {0x39, 0x92},
252 {0x35, 0xda},
253 {0x22, 0x1a},
254 {0x37, 0xc3},
255 {0x23, 0x00},
256 {ARCOM2, 0xc0},
257 {0x06, 0x88},
258 {0x07, 0xc0},
259 {COM4, 0x87},
260 {0x0e, 0x41},
261 {0x42, 0x03},
262 {0x4c, 0x00},
263 {BANK_SEL, BANK_SEL_DSP},
264 {RESET, RESET_DVP},
265
266 //Set the sensor resolution (UXGA, SVGA, CIF)
267 {HSIZE8, 0x64},
268 {VSIZE8, 0x4B},
269 {SIZEL, 0x00},
270
271 //Set the image window size >= output size
272 {HSIZE, 0xC8},
273 {VSIZE, 0x96},
274 {XOFFL, 0x00},
275 {YOFFL, 0x00},
276 {VHYX, 0x00},
277 {TEST, 0x00},
278
279 {CTRL2, CTRL2_DCW_EN | 0x1D},
280 {CTRLI, CTRLI_LP_DP | 0x00},
281 //{R_DVP_SP, 0x08},
282 ENDMARKER
283};
284
285static const uint8_t ov2640_settings_to_uxga[][2] = {
286 {BANK_SEL, BANK_SEL_SENSOR},
287 {COM7, COM7_RES_UXGA},
288
289 //Set the sensor output window
290 {COM1, 0x0F},
291 {REG32, REG32_UXGA},
292 {HSTART, 0x11},
293 {HSTOP, 0x75},
294 {VSTART, 0x01},
295 {VSTOP, 0x97},
296
297 //{CLKRC, 0x00},
298 {0x3d, 0x34},
299 {BD50, 0xbb},
300 {BD60, 0x9c},
301 {0x5a, 0x57},
302 {0x6d, 0x80},
303 {0x39, 0x82},
304 {0x23, 0x00},
305 {0x07, 0xc0},
306 {0x4c, 0x00},
307 {0x35, 0x88},
308 {0x22, 0x0a},
309 {0x37, 0x40},
310 {ARCOM2, 0xa0},
311 {0x06, 0x02},
312 {COM4, 0xb7},
313 {0x0e, 0x01},
314 {0x42, 0x83},
315 {BANK_SEL, BANK_SEL_DSP},
316 {RESET, RESET_DVP},
317
318 //Set the sensor resolution (UXGA, SVGA, CIF)
319 {HSIZE8, 0xc8},
320 {VSIZE8, 0x96},
321 {SIZEL, 0x00},
322
323 //Set the image window size >= output size
324 {HSIZE, 0x90},
325 {VSIZE, 0x2c},
326 {XOFFL, 0x00},
327 {YOFFL, 0x00},
328 {VHYX, 0x88},
329 {TEST, 0x00},
330
331 {CTRL2, CTRL2_DCW_EN | 0x1d},
332 {CTRLI, 0x00},
333 //{R_DVP_SP, 0x06},
334 ENDMARKER
335};
336
337static const uint8_t ov2640_settings_yuv422[][2] = {
338 {BANK_SEL, BANK_SEL_DSP},
339 {RESET, RESET_DVP},
340 {IMAGE_MODE, IMAGE_MODE_YUV422},
341 {0xD7, 0x01},
342 {0xE1, 0x67},
343 {RESET, 0x00},
344 ENDMARKER
345};
346
347static const uint8_t ov2640_settings_rgb565[][2] = {
348 {BANK_SEL, BANK_SEL_DSP},
349 {RESET, RESET_DVP},
350 {IMAGE_MODE, IMAGE_MODE_RGB565}, // high byte first, matching esp32-camera's wire order
351 {0xD7, 0x03},
352 {0xE1, 0x77},
353 {RESET, 0x00},
354 ENDMARKER
355};
356
357static const uint8_t ov2640_settings_jpeg[][2] = {
358 {BANK_SEL, BANK_SEL_DSP},
359 {RESET, RESET_JPEG | RESET_DVP},
360 {IMAGE_MODE, IMAGE_MODE_JPEG_EN | IMAGE_MODE_HREF_VSYNC},
361 {0xD7, 0x03},
362 {0xE1, 0x77},
363 {0xE5, 0x1F},
364 {0xD9, 0x10},
365 {0xDF, 0x80},
366 {0x33, 0x80},
367 {0x3C, 0x10},
368 {0xEB, 0x30},
369 {0xDD, 0x7F},
370 {RESET, 0x00},
371 ENDMARKER
372};
373
374#define NUM_BRIGHTNESS_LEVELS (5)
375static const uint8_t brightness_regs[NUM_BRIGHTNESS_LEVELS + 1][5] = {
376 {BPADDR, BPDATA, BPADDR, BPDATA, BPDATA },
377 {0x00, 0x04, 0x09, 0x00, 0x00 }, /* -2 */
378 {0x00, 0x04, 0x09, 0x10, 0x00 }, /* -1 */
379 {0x00, 0x04, 0x09, 0x20, 0x00 }, /* 0 */
380 {0x00, 0x04, 0x09, 0x30, 0x00 }, /* +1 */
381 {0x00, 0x04, 0x09, 0x40, 0x00 }, /* +2 */
382};
383
384#endif
中文文档