【ZedBoard实验随笔】OV7670 摄像头 简单总结

时间:2021-05-21 16:49:29

1,OV7670 有一大堆寄存器需要配置,这些配置可以参考别人已经做好的代码。

2,OV7670 设置为640*480 16的分辨率,30帧每秒,就是30FPS,每一个RGB的数据是16位的,这16位的数据分成两次从8BIT的总线传输过来。

3,计算时钟是多少: 640*480个点,每秒传递30帧(也就是刷屏30次每秒),这样就是640*480*30,而每个点是16位的需要在0OV7670位的传输总线上传输2次。因此显示的存储带宽应该是 640*480*30*2  (字节每秒)。

4,而实际的给OV7670的时钟XCLK应该考虑到消隐和同步的开销,这点计算和VGA的时钟计算相似,计算数值约为25M。采用25M的XCLK 就可以。

5,XCLK是嫁给OV7670的时钟信号,PCLK 是OV7670输出同步信号(而非时钟)。

6,从OV7670获取图像再存在一个缓冲区,之后VGA显示控制器从这个缓冲区获取数据,现在在VGA屏幕上。

7,上面提到的缓冲区,在ZYNQ7 新片有丰富的BRAM,我们直接用BRAM 开辟出深度为307200(460*480),宽度为12位(因为VGA显示是12位的)的BRAM块。采用准双口模式,OV7670的数据每采集两个连续的8位转换并从BRAM的A口写入这个BRAM;VGA控制器直接从B口读出数据进行显示。

8,OV7670采用了类似I2C的串行接口,实现对多个寄存器的配置,SIOD相当于I2C的SDA,是双向的,只我们一般忽略了从OV7670的应答(正确的时序了链接必然得到正确应答,另外如果不应答,程序也似乎没有别的招应对处理)。

9,【ZedBoard实验随笔】OV7670 摄像头 简单总结图像色彩还有点问题,还有继续调试,应该是寄存器配置问题,或者RGB信号线对应。

10,


【ZedBoard实验随笔】OV7670 摄像头 简单总结

 


11,下面是PMOD A B口约束文件的对应。



NET OV7670_PWDN LOC =  Y11  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JA1
NET OV7670_D<0>  LOC =  AA11  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JA2
NET OV7670_D<2> LOC =  Y10  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JA3
NET OV7670_D<4> LOC =  AA9  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JA4




NET OV7670_RESET LOC = AB11  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JA7
NET OV7670_D<1> LOC =  AB10  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JA8
NET OV7670_D<3> LOC =  AB9  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JA9
NET OV7670_D<5> LOC =  AA8   | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JA10




NET OV7670_D<6> LOC =  W12  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JB1
NET OV7670_XCLK LOC =  W11  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JB2
NET OV7670_HREF LOC =  V10  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JB3
NET OV7670_SIOD LOC =  W8  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JB4


NET OV7670_D<7> LOC =  V12  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JB7
NET OV7670_PCLK LOC =  W10  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JB8
NET OV7670_VSYNC LOC =  V9  | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JB9
NET OV7670_SIOC LOC =  V8   | IOSTANDARD=LVCMOS33 | SLEW=SLOW; # JB10