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