1 /*
2  * Copyright (c) 2006-2023, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author            Notes
8  * 2023-03-24     spaceman          the first version
9  */
10 
11 #ifndef __DRV_OV2640_CFG_H
12 #define __DRV_OV2640_CFG_H
13 
14 #include <rtthread.h>
15 
16 // RGB565格式配置
17 const rt_uint8_t OV2640_RGB565_Config[][2] =
18     {
19         {0xff, 0x00}, // 设置DSP寄存器租
20         {0xda, 0x09}, // 数据接口模式
21         {0xd7, 0x03}, // 手册里没有说明该寄存器的功能,此处参考OpenMV的设置
22         {0xE0, 0x00}, // RESET,可选择复位 控制器、SCCB单元、JPEG单元、DVP接口单元等
23         {0x05, 0x00}, // 使能DSP
24         {0, 0},       // 结束
25 };
26 
27 // JPEG格式配置
28 const rt_uint8_t OV2640_JPEG_Config[][2] =
29     {
30         {0xff, 0x00}, // 设置DSP寄存器租
31         {0xda, 0x10}, // 数据接口模式
32         {0xe1, 0x77}, // 手册里没有说明该寄存器的功能,此处参考OpenMV的设置,JPG模式一定要设置为0x77!!
33         {0xd7, 0x03}, // 手册里没有说明该寄存器的功能,此处参考OpenMV的设置
34         {0xe0, 0x00}, // RESET,可选择复位 控制器、SCCB单元、JPEG单元、DVP接口单元等
35         {0x05, 0x00}, // 使能DSP
36         {0, 0},       // 结束
37 };
38 
39 /*  SVGA 分辨率为800*600,最高支持30帧 */
40 const rt_uint8_t OV2640_SVGA_Config[][2] =
41     {
42         {0xff, 0x01}, // 设置 sensor 寄存器组
43         {0x12, 0x80}, // 复位全部寄存
44 
45         {0xff, 0x00}, // 设置DSP寄存器租
46         {0x2c, 0xff}, // 手册里没有说明该寄存器的功能,但是给出的参考代码又配置了该寄存器,因此保留
47         {0x2e, 0xdf},
48 
49         {0xff, 0x01}, // 设置 sensor 寄存器组
50 
51         // 手册里没有说明这些寄存器的作用,这里直接保留官方给的设置参数
52         {0x3c, 0x32},
53         {0x2c, 0x0c},
54         {0x33, 0x78},
55         {0x3a, 0x33},
56         {0x3b, 0xfB},
57         {0x3e, 0x00},
58         {0x43, 0x11},
59         {0x16, 0x10},
60         {0x39, 0x92},
61         {0x35, 0xda},
62         {0x22, 0x1a},
63         {0x37, 0xc3},
64         {0x36, 0x1a},
65         {0x4c, 0x00},
66         {0x5B, 0x00},
67         {0x42, 0x03},
68         {0x4a, 0x81},
69         {0x21, 0x99},
70         {0x5c, 0x00},
71         {0x63, 0x00},
72         {0x7c, 0x05},
73         {0x6c, 0x00},
74         {0x6d, 0x80},
75         {0x6e, 0x00},
76         {0x70, 0x02},
77         {0x71, 0x94},
78         {0x73, 0xc1},
79         {0x20, 0x80},
80         {0x28, 0x30},
81         {0x37, 0xc0},
82         {0x3d, 0x38},
83         {0x6d, 0x00},
84         {0x23, 0x00},
85         {0x06, 0x88},
86         {0x07, 0xc0},
87         {0x0d, 0x87},
88         {0x0e, 0x41},
89 
90         // 该寄存器用于控制OV2640的系统时钟是否倍频或者分频
91         // Bit[7]:  设置为1时,开启PLL倍频,系统时钟 = 2倍的 XVCLK
92         // Bit[5:0]:分频系数, 系统时钟 = XVCLK / (Bit[5:0] + 1)
93         // 我们的模块使用的 XVCLK 是24M,是OV2640默认的时钟,因此不用调整,系统时钟 = XVCLK =24M
94         {0x11, 0x00}, // CLKRC,时钟分频控制
95 
96         {0x09, 0x02}, // COM2,公共控制,输出驱动能力选择
97         {0x04, 0x28}, // REG04,寄存器组4,可设置摄像头扫描方向等
98         {0x12, 0x40}, // COM7,公共控制,系统复位、摄像头分辨率选择、缩放模式、颜色彩条设置
99         {0x14, 0x48}, // COM9,公共控制,增益设置
100         {0x15, 0x00}, // COM10,公共控制,PCLK、HS、VS输出极性控制
101         {0x32, 0x09}, // REG32,寄存器组32,像素时钟分频以及水平起始、终止像素的(低3位)
102         {0x03, 0x8a}, // COM1,公共控制,无效帧设置、垂直窗口起始、结束行(低2位)
103         {0x46, 0x00}, // FLL,帧率长度调整,通过插入空行来降低帧率,也可以通过 0x2a/0x2b/0x47等寄存器去调整
104         {0x24, 0x40}, // AEW,环境平均亮度大于AEW(7:0)时,AEC/AGC值将降低
105         {0x25, 0x38}, // AEB,环境平均亮度小于AEB(7:0)时,AEC/AGC值将增加
106         {0x26, 0x82}, // VV,快速模式步进阈值
107         {0x34, 0xc0}, // ARCOM2,缩放窗口水平起始像素
108         {0x61, 0x70}, // HISTO_LOW ,低等级直方图算法
109         {0x62, 0x80}, // HISTO_HIGH,高等级直方图算法
110 
111         {0x17, 0x11}, // HREFST,水平窗口起始像素(高8位),默认值0x11
112         {0x18, 0x43}, // HREFEND,水平窗口终止像素(高8位),UXGA默认值 0x75, SVGA和CIF默认值0x43
113                       // VSTRT,垂直窗口起始行(高8位),数据手册建议的配置是:UXGA为 0x01, SVGA和CIF模式为 0x00
114                       // 在OpenMV的配置中,不管什么模式都建议配置成 0x01,代码的解释是解决垃圾像素的问题。
115                       // 在笔者实际的测试中,如果配置成0x00,发现在图像垂直翻转的时候会有一行显示不对,应该就是openMV所说的垃圾像素
116                       // 因此这里也直接配置成 0x01,问题解决
117         {0x19, 0x01}, // VSTRT,垂直窗口起始行(高8位)
118         {0x1a, 0x97}, // VEND, 垂直窗口结束行(高8位),默认值 0x97
119 
120         // 以下5个寄存器,共同决定了光带滤除的效果(室内照明灯具开关频率是50HZ,对于传感器而言,会捕捉到明暗交错的光带)
121         // 用户可以结合手册,根据实际场景去配置,以达到最佳的光带滤除效果
122         {0x13, 0xe5}, // COM8,公共控制,曝光、自动增益、滤波设置
123         {0x0c, 0x3a}, // COM3,公共控制,自动或手动设置带宽、快照和视频输出配置
124         {0x4f, 0xbb}, // BD50,50Hz带宽 AEC低8位
125         {0x50, 0x9c}, // BD60,60HZ带宽 AEC低8位
126         {0x5a, 0x23}, // 手册没有说明该寄存器的作用,参考手册进行配置
127 
128         {0xff, 0x00}, // 设置DSP寄存器租
129 
130         // 手册里没有说明这些寄存器的作用,这里直接保留官方给的设置参数  FanKe
131         {0xe5, 0x7f},
132         {0x41, 0x24},
133         {0x76, 0xff},
134         {0x33, 0xa0},
135         {0x42, 0x20},
136         {0x43, 0x18},
137         {0x4c, 0x00},
138         {0xd7, 0x03},
139         {0xd9, 0x10},
140         {0x88, 0x3f},
141         {0xc8, 0x08},
142         {0xc9, 0x80},
143         {0x7c, 0x00},
144         {0x7d, 0x00},
145         {0x7c, 0x03},
146         {0x7d, 0x48},
147         {0x7d, 0x48},
148         {0x7c, 0x08},
149         {0x7d, 0x20},
150         {0x7d, 0x10},
151         {0x7d, 0x0e},
152         {0x90, 0x00},
153         {0x91, 0x0e},
154         {0x91, 0x1a},
155         {0x91, 0x31},
156         {0x91, 0x5a},
157         {0x91, 0x69},
158         {0x91, 0x75},
159         {0x91, 0x7e},
160         {0x91, 0x88},
161         {0x91, 0x8f},
162         {0x91, 0x96},
163         {0x91, 0xa3},
164         {0x91, 0xaf},
165         {0x91, 0xc4},
166         {0x91, 0xd7},
167         {0x91, 0xe8},
168         {0x91, 0x20},
169         {0x92, 0x00},
170         {0x93, 0x06},
171         {0x93, 0xe3},
172         {0x93, 0x05},
173         {0x93, 0x05},
174         {0x93, 0x00},
175         {0x93, 0x04},
176         {0x93, 0x00},
177         {0x93, 0x00},
178         {0x93, 0x00},
179         {0x93, 0x00},
180         {0x93, 0x00},
181         {0x93, 0x00},
182         {0x93, 0x00},
183         {0x96, 0x00},
184         {0x97, 0x08},
185         {0x97, 0x19},
186         {0x97, 0x02},
187         {0x97, 0x0c},
188         {0x97, 0x24},
189         {0x97, 0x30},
190         {0x97, 0x28},
191         {0x97, 0x26},
192         {0x97, 0x02},
193         {0x97, 0x98},
194         {0x97, 0x80},
195         {0x97, 0x00},
196         {0x97, 0x00},
197         {0xa4, 0x00},
198         {0xa8, 0x00},
199         {0xc5, 0x11},
200         {0xc6, 0x51},
201         {0xbf, 0x80},
202         {0xc7, 0x10},
203         {0xb6, 0x66},
204         {0xb8, 0xA5},
205         {0xb7, 0x64},
206         {0xb9, 0x7C},
207         {0xb3, 0xaf},
208         {0xb4, 0x97},
209         {0xb5, 0xFF},
210         {0xb0, 0xC5},
211         {0xb1, 0x94},
212         {0xb2, 0x0f},
213         {0xc4, 0x5c},
214         {0x7f, 0x00},
215 
216         {0xf9, 0xc0}, // MC_BIST,控制器复位、ROM选择
217         {0xe0, 0x14}, // RESET,可选择复位 控制器、SCCB单元、JPEG单元、DVP接口单元等
218         {0x87, 0xd0}, // CTRL3,使能芯片内部的指定的模块
219         {0xc3, 0xed}, // CTRL1,使能芯片内部的指定的模块
220         {0xc2, 0x0e}, // CTRL0,使能YUV422、YUV_EN、RGB_EN
221         {0x86, 0x3d}, // CTRL2,使能芯片内部的指定的模块
222         {0xda, 0x09}, // 图像输出模式,可设置JPEG输出、RGB565等,可设置是否翻转DVP接口的输出
223 
224         // 此处设置的是传感器的图像尺寸,与配置的模式有关,例如SVGA需要设置成800*480,XVGA要设置成1600*1200
225         {0xc0, 0x64}, // 图像的水平尺寸,10~3 bit
226         {0xc1, 0x4b}, // 图像的垂直尺寸,10~3 bit
227         {0x8c, 0x00}, // 图像水平尺寸的第 11 bit以及2~0bit,图像垂直尺寸的 2~0bit
228 
229         {0x50, 0x00}, // CTRLI,设置 水平和垂直分频器
230         {0x51, 0xc8}, // 水平尺寸,7~0 bit,必须要能被4整除
231         {0x52, 0x96}, // 垂直尺寸,7~0 bit,必须要能被4整除
232         {0x53, 0x00}, // 水平偏移,7~0 bit,
233         {0x54, 0x00}, // 垂直偏移,7~0 bit,
234         {0x55, 0x00}, // 水平、垂直尺寸的第 8 bit, 水平、垂直偏移的 第 10~8 bit
235         {0x57, 0x00}, // 水平尺寸的第 9 bit
236 
237         // 0xd3 寄存器用于设置像素驱动时钟,即 PCLK 的输出频率,有自动模式和手动模式
238         //  在自动模式下,PCLK的频率会非常高,适用于高分辨率或者有高速缓存的场合,用户可根据实际工况选择最合适的模式
239         //
240         // Bit[7]:  设置为1时,开启自动模式,此时 PCLK 由OV2640自动控制,该模式下的PCLK频率非常高,
241         //           适用于高分辨率或者有高速缓存的场合
242         //
243         // Bit[6:0]:手动设置分频系数,当设置成YUV模式或RGB565模式时, PCLK = sysclk / Bit[6:0] ,
244         //           当 时钟控制寄存器 0x11(CLKRC)设置为 不分频 且外部输入时钟为24M时,
245         //           在SVGA模式下, PCLK = 2*24M / Bit[6:0]
246         //  fanke
247         // 如果要手动配置,用户需要根据实际输出的图像尺寸去计算具体的 PCLK ,这里以 480*360 分辨率为例:
248         // 一帧 RGB565(16位色) 图像的数据量为:480*360*2 = 345.6 KB ,
249         // OV2640在 SVGA模式下,帧率为30左右,则每秒的数据量在 345.6 * 30 = 10.4 MB 左右,
250         // 因为模块是8位的接口,则PCLK最少要设置为 10.4 MHz,才能满足图像传输的需求,不然会导致花屏  ,
251         // 加上OV2640的帧率是可以微调的,因此实际的 PCLK 要稍微大些,此处设置为 12M,
252         // 即  PCLK = 48M / Bit[6:0] = 48 / 0x04 = 12M
253         {0xd3, 0x04}, // R_DVP_SP, 设置 PCLK 引脚的时钟
254 
255         // 手册里没有说明这些寄存器的作用,这里直接保留官方给的设置参数
256         {0xe5, 0x1f},
257         {0xe1, 0x67},
258         {0xdd, 0x7f},
259 
260         {0xe0, 0x00}, // RESET,可选择复位 控制器、SCCB单元、JPEG单元、DVP接口单元等
261         {0x05, 0x00}, // 使能DSP
262 
263         // 以下为OpenMV增加的设置,0x0f寄存器在数据手册里没有说明,但是在编程手册4.2小节有提到,
264         // 按照编程手册给的代码, 0x0f这个寄存器是自动控制帧率用的,但是手册里只有在夜晚模式时才进行配置
265         // {0xff, 0x01},   // 设置 sensor 寄存器组
266         //  {0x0f, 0x4b},
267         // fanke
268 
269         {0, 0}, // 结束
270 };
271 
272 /*  UXGA 分辨率为1600*1200,最高支持15帧 */
273 const rt_uint8_t OV2640_UXGA_Config[][2] =
274     {
275         {0xff, 0x01}, // 设置 sensor 寄存器组
276         {0x12, 0x80}, // 复位全部寄存
277 
278         {0xff, 0x00}, // 设置DSP寄存器租
279         {0x2c, 0xff}, // 手册里没有说明该寄存器的功能,但是给出的参考代码又配置了该寄存器,因此保留
280         {0x2e, 0xdf},
281 
282         {0xff, 0x01}, // 设置 sensor 寄存器组
283 
284         // 手册里没有说明这些寄存器的作用,这里直接保留官方给的设置参数
285         {0x3c, 0x32},
286         {0x2c, 0x0c},
287         {0x33, 0x78},
288         {0x3a, 0x33},
289         {0x3b, 0xfB},
290         {0x3e, 0x00},
291         {0x43, 0x11},
292         {0x39, 0x82},
293         {0x35, 0x88},
294         {0x22, 0x0a},
295         {0x37, 0x40},
296         {0x23, 0x00},
297         {0x36, 0x1a},
298         {0x06, 0x02},
299         {0x07, 0xc0},
300         {0x0d, 0xb7},
301         {0x0e, 0x01},
302         {0x42, 0x83},
303         {0x4c, 0x00},
304         {0x5B, 0x00},
305         {0x4a, 0x81},
306         {0x21, 0x99},
307         {0x5c, 0x00},
308         {0x63, 0x00},
309         {0x7c, 0x05},
310         {0x20, 0x80},
311         {0x28, 0x30},
312         {0x6c, 0x00},
313         {0x6d, 0x80},
314         {0x6e, 0x00},
315         {0x70, 0x02},
316         {0x71, 0x94},
317         {0x73, 0xc1},
318         {0x3d, 0x34},
319         {0x16, 0x10},
320 
321         // 该寄存器用于控制OV2640的系统时钟是否倍频或者分频
322         // Bit[7]:  设置为1时,开启PLL倍频,系统时钟 = 2倍的 XVCLK
323         // Bit[5:0]:分频系数, 系统时钟 = XVCLK / (Bit[5:0] + 1)
324         // 我们的模块使用的 XVCLK 是24M,是OV2640默认的时钟,因此不用调整,系统时钟 = XVCLK =24M
325         {0x11, 0x00}, // CLKRC,时钟分频控制
326 
327         {0x09, 0x02}, // COM2,公共控制,输出驱动能力选择
328         {0x04, 0x28}, // REG04,寄存器组4,可设置摄像头扫描方向等
329         {0x12, 0x00}, // COM7,公共控制,系统复位、摄像头分辨率选择、缩放模式、颜色彩条设置
330         {0x14, 0x48}, // COM9,公共控制,增益设置
331         {0x15, 0x00}, // COM10,公共控制,PCLK、HS、VS输出极性控制
332         {0x32, 0x36}, // REG32,寄存器组32,像素时钟分频以及水平起始、终止像素的(低3位)
333         {0x03, 0x8F}, // COM1,公共控制,无效帧设置、垂直窗口起始、结束行(低2位)
334         {0x46, 0x00}, // FLL,帧率长度调整,通过插入空行来降低帧率,也可以通过 0x2a/0x2b/0x47等寄存器去调整
335         {0x24, 0x40}, // AEW,环境平均亮度大于AEW(7:0)时,AEC/AGC值将降低
336         {0x25, 0x38}, // AEB,环境平均亮度小于AEB(7:0)时,AEC/AGC值将增加
337         {0x26, 0x82}, // VV,快速模式步进阈值
338         {0x34, 0xa0}, // ARCOM2,缩放窗口水平起始像素
339         {0x61, 0x70}, // HISTO_LOW ,低等级直方图算法
340         {0x62, 0x80}, // HISTO_HIGH,高等级直方图算法
341 
342         {0x17, 0x11}, // HREFST,水平窗口起始像素(高8位),默认值0x11
343         {0x18, 0x75}, // HREFEND,水平窗口终止像素(高8位),UXGA默认值 0x75, SVGA和CIF默认值0x43
344                       // VSTRT,垂直窗口起始行(高8位),数据手册建议的配置是:UXGA为 0x01, SVGA和CIF模式为 0x00
345         {0x19, 0x01}, // VSTRT,垂直窗口起始行(高8位)
346         {0x1a, 0x97}, // VEND, 垂直窗口结束行(高8位),默认值 0x97
347 
348         // 以下5个寄存器,共同决定了光带滤除的效果(室内照明灯具开关频率是50HZ,对于传感器而言,会捕捉到明暗交错的光带)
349         // 用户可以结合手册,根据实际场景去配置,以达到最佳的光带滤除效果
350         {0x13, 0xe5}, // COM8,公共控制,曝光、自动增益、滤波设置
351         {0x0c, 0x3c}, // COM3,公共控制,自动或手动设置带宽、快照和视频输出配置
352         {0x4f, 0xa8}, // BD50,50Hz带宽 AEC低8位
353         {0x50, 0x8C}, // BD60,60HZ带宽 AEC低8位
354         {0x5a, 0x78}, // 手册没有说明该寄存器的作用,参考手册进行配置
355 
356         {0xff, 0x00}, // 设置DSP寄存器租
357 
358         // 手册里没有说明这些寄存器的作用,这里直接保留官方给的设置参数   Fanke
359         {0xe5, 0x7f},
360         {0x41, 0x24},
361         {0x76, 0xff},
362         {0x33, 0xa0},
363         {0x42, 0x20},
364         {0x43, 0x18},
365         {0x4c, 0x00},
366         {0xc8, 0x08},
367         {0xc9, 0x80},
368         {0x7c, 0x00},
369         {0x7d, 0x00},
370         {0x7c, 0x03},
371         {0x7d, 0x48},
372         {0x7d, 0x48},
373         {0x7c, 0x08},
374         {0x7d, 0x20},
375         {0x7d, 0x10},
376         {0x7d, 0x0e},
377         {0x90, 0x00},
378         {0x91, 0x0e},
379         {0x91, 0x1a},
380         {0x91, 0x31},
381         {0x91, 0x5a},
382         {0x91, 0x69},
383         {0x91, 0x75},
384         {0x91, 0x7e},
385         {0x91, 0x88},
386         {0x91, 0x8f},
387         {0x91, 0x96},
388         {0x91, 0xa3},
389         {0x91, 0xaf},
390         {0x91, 0xc4},
391         {0x91, 0xd7},
392         {0x91, 0xe8},
393         {0x91, 0x20},
394         {0x92, 0x00},
395         {0x93, 0x06},
396         {0x93, 0xe3},
397         {0x93, 0x05},
398         {0x93, 0x05},
399         {0x93, 0x00},
400         {0x93, 0x04},
401         {0x93, 0x00},
402         {0x93, 0x00},
403         {0x93, 0x00},
404         {0x93, 0x00},
405         {0x93, 0x00},
406         {0x93, 0x00},
407         {0x93, 0x00},
408         {0x96, 0x00},
409         {0x97, 0x08},
410         {0x97, 0x19},
411         {0x97, 0x02},
412         {0x97, 0x0c},
413         {0x97, 0x24},
414         {0x97, 0x30},
415         {0x97, 0x28},
416         {0x97, 0x26},
417         {0x97, 0x02},
418         {0x97, 0x98},
419         {0x97, 0x80},
420         {0x97, 0x00},
421         {0x97, 0x00},
422         {0x88, 0x3f},
423         {0xc4, 0x9a},
424         {0xa4, 0x00},
425         {0xa8, 0x00},
426         {0xc5, 0x11},
427         {0xc6, 0x51},
428         {0xbf, 0x80},
429         {0xc7, 0x10},
430         {0xb6, 0x66},
431         {0xb8, 0xA5},
432         {0xb7, 0x64},
433         {0xb9, 0x7C},
434         {0xb3, 0xaf},
435         {0xb4, 0x97},
436         {0xb5, 0xFF},
437         {0xb0, 0xC5},
438         {0xb1, 0x94},
439         {0xb2, 0x0f},
440         {0xc4, 0x5c},
441         {0x7f, 0x00},
442         {0xd7, 0x03},
443         {0xd9, 0x10},
444 
445         {0xf9, 0xc0}, // MC_BIST,控制器复位、ROM选择
446         {0xe0, 0x14}, // RESET,可选择复位 控制器、SCCB单元、JPEG单元、DVP接口单元等
447         {0x87, 0xd0}, // CTRL3,使能芯片内部的指定的模块
448         {0xc3, 0xed}, // CTRL1,使能芯片内部的指定的模块
449         {0xc2, 0x0e}, // CTRL0,使能YUV422、YUV_EN、RGB_EN
450         {0x86, 0x3d}, // CTRL2,使能芯片内部的指定的模块
451         {0xda, 0x09}, // 图像输出模式,可设置JPEG输出、RGB565等,可设置是否翻转DVP接口的输出
452 
453         // 此处设置的是传感器的图像尺寸,与配置的模式有关,例如SVGA需要设置成800*480,XVGA要设置成1600*1200
454         {0xc0, 0xc8}, // 图像的水平尺寸,10~3 bit
455         {0xc1, 0x96}, // 图像的垂直尺寸,10~3 bit
456         {0x8c, 0x00}, // 图像水平尺寸的第 11 bit以及2~0bit,图像垂直尺寸的 2~0bit
457 
458         {0x50, 0x00}, // CTRLI,设置 水平和垂直分频器
459         {0x51, 0x90}, // 水平尺寸,7~0 bit,必须要能被4整除
460         {0x52, 0x2c}, // 垂直尺寸,7~0 bit,必须要能被4整除
461         {0x53, 0x00}, // 水平偏移,7~0 bit,
462         {0x54, 0x00}, // 垂直偏移,7~0 bit,
463         {0x55, 0x88}, // 水平、垂直尺寸的第 8 bit, 水平、垂直偏移的 第 10~8 bit
464         {0x57, 0x00}, // 水平尺寸的第 9 bit
465 
466         // 0xd3 寄存器用于设置像素驱动时钟,即 PCLK 的输出频率,有自动模式和手动模式
467         //  在自动模式下,PCLK的频率会非常高,适用于高分辨率或者有高速缓存的场合,用户可根据实际工况选择最合适的模式
468         //
469         // Bit[7]:  设置为1时,开启自动模式,此时 PCLK 由OV2640自动控制,该模式下的PCLK频率非常高,
470         //           适用于高分辨率或者有高速缓存的场合
471         //
472         // Bit[6:0]:手动设置分频系数,当设置成YUV模式或RGB565模式时, PCLK = sysclk / Bit[6:0] ,
473         //           当 时钟控制寄存器 0x11(CLKRC)设置为 不分频 且外部输入时钟为24M时,
474         //           在 UXGA模式下, PCLK = 3*24M / Bit[6:0]
475         //
476         // 如果要手动配置,用户需要根据实际输出的图像尺寸去计算具体的 PCLK ,这里以 480*360 分辨率为例:
477         // 一帧 RGB565(16位色) 图像的数据量为:480*360*2 = 345.6 KB ,
478         // OV2640在 SVGA模式下,帧率为30左右,则每秒的数据量在 345.6 * 15 = 5.2 MB 左右,
479         // 因为模块是8位的接口,则PCLK最少要设置为 5.2 MHz,才能满足图像传输的需求,不然会导致花屏  ,
480         // 加上OV2640的帧率是可以微调的,因此实际的 PCLK 要稍微大些,此处设置为 7.2M,
481         // 即  PCLK = 72M / Bit[6:0] = 72 / 0x0a = 7.2M
482         {0xd3, 0x0a}, // R_DVP_SP, 设置 PCLK 引脚的时钟
483 
484         // 手册里没有说明这些寄存器的作用,这里直接保留官方给的设置参数
485         {0xe5, 0x1f},
486         {0xe1, 0x67},
487         {0xdd, 0x7f},
488 
489         {0xe0, 0x00}, // RESET,可选择复位 控制器、SCCB单元、JPEG单元、DVP接口单元等
490         {0x05, 0x00}, // 使能DSP
491 
492         {0, 0}, // 结束
493 };
494 
495 #endif //__DRV_OV2640_CFG_H
496