正点原子资料参考,自己记录笔记精炼一点,方便回忆
1.摄像头结构构造
中心主要落在引脚上:
输入引脚:
电源类引脚
ADVDD:ADC电源输入引脚
AVDD:模拟电源输入
DVDD:
DOVDD:数字电源输入
VREFH:接一个0.1uf电容到地
VREFN:接一个0.1uf电容到地
ADGND:内部ADC用的地
AGND:模拟地
DOGND:数字地
XCLK: 时钟输入
FSIN:帧同步输入
RSTB:复位输入
PWDN:给0 摄像头普通模式 给1摄像头POWER DOWN MODE(休眠模式)
SCL: SCCB协议的时钟输入(可以双向使用)
SDA:SCCB协议的数据输入
输出引脚:
HREF:行同步信号
PCLK:
VSYNC:场同步信号
D[0:9]:使用D0(低位)-D9(高位)时,是图像 原始 10bit数据并行输出脚
使用D2(低位)--D9(高位)时,是8bit YUV 或者RGB565/555
2.SCCB协议解析
SCCD类似于I2C协议
2.1接口解析
其中有两线版本和三线版本,两线只能控制一个从设备,三线可以控制多个从设备。
不管是两线还是三线都是有CLK线和DATA线
CLK线,只能由主机(eg.FPGA STM32)配置
DATA线,双向引脚,可以主写给从也可以从写给主
三线版本就多了个片选线,来认从机是哪个
2.2时序解析
起始位:当SCL高电平时,突然来个下降沿(1-》0),代表起始位,开始传输
数据传输:
在SCL高电平时,DATA线上的数据必须保持稳定
在SCL低电平时,DATA线上的数据可以改变
停止位:当SCL高电平时,突然来个上升沿(0-》1),代表停止位,接收传输
不管是主给从机写数据,还是主机读取从机发来的数据都是这个时序
2.3本次实验具体数据格式要求
主机写数据给从机:
起始位(下降沿 1bit)
+0x42(包含写控制指令和ov7725地址0x21)(8bit)+x(1bit)
+器件地址(8bit)+x(1bit)
+写入的数据(8bit)+x(1bit)
+停止位(上升沿 1bit)
主机读取从机的数据:
起始位(下降沿,1bit)
+0x42(包含写控制指令和ov7725地址0x21)(8bit)+x(1bit)
+器件地址(8bit)+x(1bit)
+停止位(上升沿 1bit)
间隔
+起始位(下降沿 1bit)
+0x43(包含读控制指令和ov7725地址0x21)(8bit)+x(1bit)
+要读的数据(8bit)+NA(1bit,和x不同必是高电平)
+停止位(上升沿 1bit)
3.寄存器解析
3.1时钟控制寄存器:
如果要实现30帧及其以上的帧率,则必须提高频率,这里同配置此地址的寄存器来PLL倍频
输出时钟的计算公式:输入时钟*COM4/(CLLKRC[5:0]+1)*2
CLKRC默认00
当输入时钟=12Mhz时
eg.COM4=01
01:24M=12Mhz*4/2(刚好30帧需要的时钟)
03:48M=12*8/2(60帧)
3.2性能控制寄存器:
3.3数据手册时钟资料代码查看
帧率和时钟的写入代码eg,官方手册中有
4.RGB565时序分析(较VGA简单,没有行场信号的概念)![](https://img-blog.csdnimg.cn/direct/a97ede86efa54130a7a1fe2da41348c2.png)
历程里输入12Mhz时钟,经过寄存器等公式转化,PCLK=24Mhz时钟
HREF高电平时,像素数据D[9:2]的数据有效
反之无效
16bit数据为一组完整的数据,所以由8bit的并行数据发送两组
所以虽然clk是24Mhz,单完整的发送一组要两个周期的clk,所以相当于12Mhz
eg.如图
first byte : D[9]-D[5]=R4-R0 D[4]-D[2]=G5-G3
second byte: D[9]-D[7]=G2-G0 D[6]-D[2]=B4-B0
R:5bit G:6bit B:5bit 一共16bit
5.VGA时序分析
一帧画面输出时间:每一帧一共用时510 个t_LINE
1 t_LINE=784tp=784*2*t_PCLK(乘以2是因为连个时钟周期拼成一个完整的周期)
1s/一帧画面输出时间=1s能输出多少个画面=多少帧