SCCB与IIC的异同及FPGA实现
本文主要参考了两种协议的规范文档和一个摄像头传感器(OV7725)的数据手册,文档链接如下:
IIC规范:UM10204
SCCB规范:SCCBSpec_AN
OV7725数据手册:OV7725
概述
之所以写这篇文章,是因为我在使用SCCB接口控制的摄像头时,看到有的人说SCCB和IIC是兼容的,也有的人说它们有区别,但区别不大。网上众说风云,让我感觉很迷糊,所以在这里总结一下。
IIC接口有比较广泛的应用,而SCCB接口主要用于摄像头控制,可以说SCCB是低配版的IIC。因为IIC可以实现多主多从,IIC规范文档中有提到多主机的时钟同步、总线仲裁功能。而SCCB的文档中则没有这部分内容,因为一般来说都是单个主机控制多个摄像头,只有一主多从的功能。除此之外,SCCB和IIC的数据格式也有一点区别,这部分在后面详述。
信号线
IIC
SCCB
SCL、SDA
SCCB_E、SIO_C、SIO_D、PWDN
IIC只有两根信号线,SCCB的SIO_C、SIO_D和IIC的SCL、SDA分别对应,SCCB额外还有SCCB_E和PWDN两根控制线,这个影 ...
CMOS与非门振荡器原理分析
问题背景
上图是一个简易的电子门铃电路,主要是采用两个CMOS与非门74HC00和一些阻容产生振荡信号,再由一个NPN型的双极结型三极管驱动小喇叭来实现的。分析这个电路需要对逻辑门和电容的特性有一定的了解。
原理分析
电路中的C2、C3是滤波电容,R1是BJT的基极限流电阻不需要多做分析,我们主要关注由两个与非门构成的振荡电路。
R3是一个下拉电阻,在按键没有按下时,确保U1A的一个输入端是低电平,从而保持一个稳定的初始状态。
U1B直接将与非门的两个输入短接其实就是一个反相器,也就是输出总是和输入保持相反的电平。
初始状态的主体电路可以表示为:
上图中用标示出了电路中各个节点的电位,这里的“L”表示低电平0V,“H”表示高电平,也就是电路中的“5V”。值得注意的是,这是电容两端是有压差的,电容的B端比A端高一个VCC的电压,这里以“U”表示。
在开关按下的瞬间,逻辑门的信号能够快速地传递,但是电容两端的电压不能突变,A节点的电势变为5V,再加上电容上的电压,B节点的电势则为10V,因此用“2H”表示。这个时候的状态肯定是不稳定的,电容上的电荷会通过R1和 ...
基于Zynq的VGA驱动
用ZYNQ做VGA显示确实有点大材小用,一般都是直接用VDMA、VTC等IP来驱动HDMI接口,输出图像视频。这里的VGA驱动仅用作练习。
VGA驱动电路
VGA驱动芯片用的是ADV7123,实际上是三路10bit的DAC。
VGA驱动
在写驱动之前需要确定具体的时序,可以通过这个网站查到,还可以参考知乎的这篇文章。
在PL的驱动中可以把一些具体的时序参数都提前准备好,然后把这个驱动封装成IP时,可以直接通过下拉菜单选择,就像下面这样。
实际的设计需求是,图像大小和实际的显示分辨率大小不一致,实际图像的分辨率小于等于屏幕的分辨率,而且屏幕的分辨率是实际图像分辨率的整数倍。一个简单的拉伸图像的方法就是对像素进行复制。比如我想将图像的长和宽都拉伸成原来的两倍,那么就只需要将单个像素在重复显示4次(行列各两次)即可。
具体实现采用行列两个方向的状态机进行控制,以下是行方向上的状态机:
以下是列方向上的状态机:
在代码中还实例化了一块BRAM,用作显存,因此只有在显存初始化完成后,状态机才能真正进入工作。
列方向的状态机就是单纯地按照时序进行切换。 ...