摄像头上的接口是SCCB(PCLK,XCLK)的,用uart是肯定读不出的,其实SCCB接口就是向当时I2C接口,所以现在了解一下I2C然后实践一下怎么把这个I2C的数据读出来。
I2C是两根线的,分别时SDA和SCL,开漏输出。
I2C的传输是有起点和终点的,当SDA在下降沿的时候信号开始传输,当SDA在上升沿的时候信号结束传输,期间SCL都是保持高电平。
所有的起始和终止信号都是由主机发送,这也就是为什么XCLK是摄像头的输入端,因为信号是由单片机输出后摄像头接收的。
其流程是:主控(单片机)会发送一个地址,当被控器件(摄像头)检测到主控发送的地址是自己的地址的时候会发送一个应答信号(ACK),主控收到ACK后会发送数据字节,这就考试了,当被控器件发送NACK时代表传输结束。
这就是I2C的基本概念。
其实I2C有许多细枝末节的细节,比如只有在SCL处于低电平的时候数据线才能改变;SCL发出的电平也并不是那种规整的周期波形;直接用I\O口是无法读取SCL和SDA的,只能写协议;想直接读SCL和SDA只能用逻辑分析仪之类的。
接下来了解一下SCCB的概念。
那么对于这个摄像头,我们接住P1.0和P1.1这两个I/O口接上PCLK和XCLK这两个引脚。
我们需要编写一个代码,目的是让数据开始传输。
整个过程分成三部:
一、告诉总线,现在开始传输I2C数据
二、告诉控线,现在开始输出数据
三、告诉总线,现在开始接受数据
具体实现:
一、我们先给XCLK高电平,PCLK一个高电平,随后给PCLK一个低电平,这就制造了一个下降沿,发出开始信号。
二、摄像头接收到开始信号以后,应该给出一个ACK信号作传输指令。这个信号是8位的,前七位是数据,最后一位是0、1代表读或者写。我们当然是读像素信息。