drv_ov2640_cfg.h 20 KB

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