作者:qikaibinglan
转自:http://blog.csdn.net/qikaibinglan/article/details/5883346
经过4天的调试,摄像头终于可以拍照片保存到电脑上来了,ov9650的调试走了不少弯路,一些教训总结如下:
1:OV9650是OmniVision公司的COMS摄像头,号称有130万像素,但是实际效果感觉不如CCD的,特别是远处的背景更糟糕。
2:OV9650的datasheet上写的寄存器控制协议是Serial Camera Control Bus (SCCB),还给了个时序图,但是它用的是两线制 的SCCB协议;根据它的时序图是可以兼容I2C的,两者在细微之处有点差别,但不影响,但实际应用中,都是后端平台的 I2C接camera的SCCB。可惜我没有仔细分析,愣是用两个GPIO模拟SCCB通信协议。此乃一错
3:对于OV9650,OmniVision公司是提供了参考寄存器配置的!一定要找相关人员要!(可能是他们的datasheet写得太烂的原因吧),可以我过分相信自己,没有找技术支持沟通!此乃二错
4v9650复位后默认配置是不能收到图像的!(在我的这个模式下:YUV422,VGA),当我在用I2C配置时,有的像的轮廓但颜色偏绿,我以为是没有配置起寄存器,但是实际上是配置起寄存器了,是YUV的顺序有问题!此乃三错
5:我们用的是杰得提供的VIA模块控制API,杰得的API多、复杂、有错且没有系统的说明,又由于我没有调试摄像头的相关经验,也没有弄明白杰得的VIA模块API。所以调试的时候没有图像,到底是摄像头输出问题?还是Z228接收处理的问题?无法判断!调试完摄像头了才知道杰得的库是可以输入4:2:2,输出4:2:0的!
我觉得调试步骤应该如下:
一:先要保证硬件没有问题!
1:首先要看RESET脚和,PDN脚.的电平是否正确,RESET:高电平复位.PDN:低电平工作正常。
2:第一次调试I2C总线的时候,把示波器放在数据线上,抓图分析看OV9650是否应答。地址应该是60H不要搞错了!
3:测试关键信号(这一小步要寄存器配置正确芯片正常工作了才有的):
时钟输入信号pin13: 24M正弦波(外部晶振的输入)。
时钟输出信号(像素频率):24M,变形了的像正弦波的方波。
场同步信号Vsync:形如: ----_----------_----- :两个低电平之间是20ms左右(我测试的是22ms)
行同步信号Href: 形如: ----_----------_----- :两个低电平之间是64us左右(我测试的是15.9Khz)
以上三个信号是电视信号标准,一定要对。但是,在测试的时候有时候信号不是这个值,比如Vsync=34ms,why?我还没有搞清楚,请高手指点.
二:OV寄存器配置:
1:如果没有测试硬件,千万不要妄想配置寄存器! 也是我的调试原则,可惜这次我又违背了!嘚反省!
2: 用I2C读取OV9650的ProducaitonID寄存器【0x0A】【0x0B】:读出来版本号应该是0x9652,这里也一定要对,特别是你手上有几个信号的OV芯片的时候,不同型号的oV芯片,RESET复位信号不同,(有高有低哦!有一个网友就犯了这个错误浪费了四天),datasheet上没有说的很明白Reset是高复位还是低复位,我的小窍门是reset引脚内部有上拉电阻的话应该是低电平复位,有内部下拉电阻的话应该是高电平复位。
3:证明能够通过I2C控制OV9650后,将厂家给的或者网上下的相应的配置写入到ov9650。
4:如果配置大体正确,现在摄像头的数据应该出来了。
==============
以下是厂家给的配置:共有三个VGA,CIF,SXVGA,输出都是YUV模式,如是时钟是24M,帧率是15fps,我只验证了VGA模式的,效果还可以!
;09032004
;OV9650
;VGA YUV
;15fps when 24MHz input clock
;Device Address(Hex)/Register(Hex)/Value(Hex)
;
60 12 80
60 11 81
60 6b 0a
60 6a 3e
60 3b 09
60 13 e0
60 01 80
60 02 80
60 00 00
60 10 00
60 13 e5
;
60 39 43 ;50 for 30fps
60 38 12 ;92 for 30fps
60 37 00
60 35 91 ;81 for 30fps
60 0e 20
60 1e 04
;
60 A8 80
60 12 40
60 04 00
60 0c 04
60 0d 80
60 18 c6
60 17 26
60 32 ad
60 03 00
60 1a 3d
60 19 01
60 3f a6
60 14 2e
60 15 02
60 41 02
60 42 08
;
60 1b 00
60 16 06
60 33 e2 ;c0 for internal regulator
60 34 bf
60 96 04
60 3a 00
60 8e 00
;
60 3c 77
60 8B 06
60 94 88
60 95 88
60 40 c1
60 29 3f ;2f for internal regulator
60 0f 42
;
60 3d 92
60 69 40
60 5C b9
60 5D 96
60 5E 10
60 59 c0
60 5A af
60 5B 55
60 43 f0
60 44 10
60 45 68
60 46 96
60 47 60
60 48 80
60 5F e0
60 60 8c ;0c for advanced AWB (related to lens)
60 61 20
60 a5 d9
60 a4 74
60 8d 02
60 13 e7
;
60 4f 3a
60 50 3d
60 51 03
60 52 12
60 53 26
60 54 38
60 55 40
60 56 40
60 57 40
60 58 0d
;
60 8C 23
60 3E 02
60 a9 b8
60 aa 92
60 ab 0a
;
60 8f df
60 90 00
60 91 00
60 9f 00
60 a0 00
60 3A 01
;
60 24 70
60 25 64
60 26 c3
;
60 2a 00 ;10 for 50Hz
60 2b 00 ;40 for 50Hz
;
;gamma
60 6c 40
60 6d 30
60 6e 4b
60 6f 60
60 70 70
60 71 70
60 72 70
60 73 70
60 74 60
60 75 60
60 76 50
60 77 48
60 78 3a
60 79 2e
60 7a 28
60 7b 22
60 7c 04
60 7d 07
60 7e 10
60 7f 28
60 80 36
60 81 44
60 82 52
60 83 60
60 84 6c
60 85 78
60 86 8c
60 87 9e
60 88 bb
60 89 d2
60 8a e6
;
==============
;09032004
;OV9650
;CIF YUV
;15fps when 24MHz input clock
;Device Address(Hex)/Register(Hex)/Value(Hex)
;
60 12 80
60 11 83
60 6b 0a
60 6a 30
60 3b 09
60 13 e0
60 01 80
60 02 80
60 00 00
60 10 00
60 13 e5
;
60 39 43
60 38 12
60 37 00
60 35 91
60 0e a0
60 1e 04
;
60 A8 80
60 12 20
60 04 00
60 0c 04
60 0d 80
60 18 7e
60 17 26
60 32 24
60 03 36
60 1a 24
60 19 00
60 14 2e
60 15 02
60 3f a6
60 41 02
60 42 08
;
60 1b 00
60 16 06
60 33 e2 ;c0 for internal regulator
60 34 bf
60 96 04
60 3a 00
60 8e 00
;
60 3c 77
60 8B 06
60 94 88
60 95 88
60 40 c1
60 29 3f ;2f for internal regulator
60 0f 42
;
60 3d 92
60 69 40
60 5C b9
60 5D 96
60 5E 10
60 59 c0
60 5A af
60 5B 55
60 43 f0
60 44 10
60 45 68
60 46 96
60 47 60
60 48 80
60 5F e0
60 60 8c ;0c for advanced AWB (related to lens)
60 61 20
60 a5 d9
60 a4 74
60 8d 02
60 13 e7
;
60 4f 3a
60 50 3d
60 51 03
60 52 12
60 53 26
60 54 38
60 55 40
60 56 40
60 57 40
60 58 0d
;
60 8C 23
60 3E 02
60 a9 b8
60 aa 92
60 ab 0a
;
60 8f df
60 90 00
60 91 00
60 9f 00
60 a0 00
60 3A 01
;
60 24 70
60 25 64
60 26 c3
;
60 2a 00 ;00 for 50Hz
60 2b 00 ;D2 for 50Hz
;
;gamma
60 6c 40
60 6d 30
60 6e 4b
60 6f 60
60 70 70
60 71 70
60 72 70
60 73 70
60 74 60
60 75 60
60 76 50
60 77 48
60 78 3a
60 79 2e
60 7a 28
60 7b 22
60 7c 04
60 7d 07
60 7e 10
60 7f 28
60 80 36
60 81 44
60 82 52
60 83 60
60 84 6c
60 85 78
60 86 8c
60 87 9e
60 88 bb
60 89 d2
60 8a e6
;
=================
;09032004
;OV9650
;SXGA YUV
;7.5fps when 24MHz input clock
;Device Address(Hex)/Register(Hex)/Value(Hex)
;
60 12 80
60 11 80
60 6b 0a
60 6a 41
60 3b 09
60 13 e0
60 01 80
60 02 80
60 00 00
60 10 00
60 13 e5
;
60 39 43 ;50 for 15fps
60 38 12 ;93 for 15fps
60 37 00
60 35 91 ;81 for 15fps
60 0e 20
60 1e 04
;
60 A8 80
60 12 00
60 04 00
60 0c 00
60 0d 00
60 18 bd
60 17 1d
60 32 ad
60 03 12
60 1a 81
60 19 01
60 14 2e
60 15 00
60 3f a6
60 41 02
60 42 08
;
60 1b 00
60 16 06
60 33 e2 ;c0 for internal regulator
60 34 bf
60 96 04
60 3a 00
60 8e 00
;
60 3c 77
60 8B 06
60 94 88
60 95 88
60 40 c1
60 29 3f ;2f for internal regulator
60 0f 42
;
60 3d 92
60 69 40
60 5C b9
60 5D 96
60 5E 10
60 59 c0
60 5A af
60 5B 55
60 43 f0
60 44 10
60 45 68
60 46 96
60 47 60
60 48 80
60 5F e0
60 60 8C ;0c for advanced AWB (Related to lens)
60 61 20
60 a5 d9
60 a4 74
60 8d 02
60 13 e7
;
60 4f 3a
60 50 3d
60 51 03
60 52 12
60 53 26
60 54 38
60 55 40
60 56 40
60 57 40
60 58 0d
;
60 8C 23
60 3E 02
60 a9 b8
60 aa 92
60 ab 0a
;
60 8f df
60 90 00
60 91 00
60 9f 00
60 a0 00
60 3A 01
;
60 24 70
60 25 64
60 26 c3
;
60 2a 00 ;10 for 50Hz
60 2b 00 ;34 for 50Hz
;
;gamma
60 6c 40
60 6d 30
60 6e 4b
60 6f 60
60 70 70
60 71 70
60 72 70
60 73 70
60 74 60
60 75 60
60 76 50
60 77 48
60 78 3a
60 79 2e
60 7a 28
60 7b 22
60 7c 04
60 7d 07
60 7e 10
60 7f 28
60 80 36
60 81 44
60 82 52
60 83 60
60 84 6c
60 85 78
60 86 8c
60 87 9e
60 88 bb
60 89 d2
60 8a e6