[FPGA] IIC读写EEPROM

一 IIC协议

1.1 iic介绍

I2C即Inter-Integrated Circuit(集成电路总线),是由Philips半导体公司(现在的NXP
半导体公司)在八十年代初设计出来的一种简单、双向、二线制总线标准。多用于主机和从机
在数据量不大且传输距离短的场合下的主从通信。主机启动总线,并产生时钟用于传送数据,
此时任何接收数据的器件均被认为是从机。
IIC是一种两线式串行总线,由数据线SDA和时钟线SCL构成通信线路,既可用于发送数据,也可接受数据,是一种半双工通信协议。总线上的主设备和从设备之间以字节为单位进行双向的数据传输。 多用于主机和从机在数据量不大且传输距离短的场合下的主从通信。
I2C总线由数据线SDA和时钟线SCL构成通信线路,既可用于发送数据,也可接收数据。在
主控与被控IC之间可进行双向数据传送,数据的传输速率在标准模式下可达100kbit/s,在快
速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s,各种被控器件均并联在总线上,通过
器件地址(SLAVE ADDR,具体可查器件手册)识别。

1.2 iic传输速率

标准:100kbit/s,

快速:400kbit/s,

高速:3.4Mbit/s。

在读写EEPROM实验中,速率为(50Mbit/s)/250=200Kbit/s

1.3 iic特点 (物理层)

(1) 它是一个支持多设备的总线(支持多主机多从机)。

(2) IIC总线只使用两条总线线路,一条双向串行数据线(SDA) 一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。

(3) 每个连接到IIC总线的设备都有一个独立的地址,主机可以利用设备独立地址访问不同设备。

(4) IIC总线通过上拉电阻接到电源。当IIC设备空闲时,设备会输出高阻态,当所有设备都空闲,都输出高阻态时,由上拉电阻把IIC总线拉成高电平。

(5) IIC总线具有仲裁机制。

1.4 iic时序

空闲状态:
I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。


起始信号:
由主机产生,在SCL保持高电平期间,SDA的电平被拉低,称为 I2C总线总线的起始信号,标志着一次数据传输开始。起始信号由主机主动建立的,在建立该信号之前I2C总线必须处于空闲状态。


数据传输:
字节为单位进行串行传输数据,每传输1bit数据都需要一个时钟周期,即20 * 250ns,在时钟线为低电平的时候进行传输数据,高电平的时候保持不变,进行采样。在时钟信号线SCL为低电平时,将需要写入的数据提前给到数据信号线SDA,方便时钟信号线SCL为高电平时,准确获取到数据信号线SDA上的数据。

当sda、scl为低电平时,发送端开始发送数据,当接收完8bit数据会通过数据线反馈一个应答信号ACK ,应答信号低电平有效,表示已经接收到了该字节;当反馈为高电平时,表示接收该字节失败,在反馈期间 ,即接收端 在第九个时钟脉冲之前将SDA拉低,确保在该时钟周期保持低电平。另外发送多字节数据会在 有效应答后scl低电平期间继续发送数据,知道发送完所有字节数据,反馈一个NACK高电平,在scl高电平期间采样,此时表示发送数据完成,结束发送。进入停止位。


应答信号:
12C总线上的所有数据都是以字节传送的,发送端每发送一个字节,就必须在第9个SCL脉冲期间释放SDA,由接收端反馈一个应答信号。应答信号为低电平时,称为有效应答位(ACK),表示接收端成功接收了该字节;应答信号为高电平时,称为非应答位(NACK),表示接收端接收该字节失败。对于反馈有效应答位ACK的要求是,接收端在第9个时钟脉冲之前的低电平期间将SDA拉低,并且确保在该时钟周期的高电平期间保持低电平。如果接收端是主控端,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送端结束数据发送,并释放SDA线,以便主控接收器发送停止信号。


停止信号:
在SCL保持高电平期间,SDA被释放,返回高电平,称为I2C总线的停止信号,标志着一次数据传输的终止。停止信号由主机主动建立的,建立 该信号之后,I2C总线将返回空闲状态。

二 SCCB协议

2.1 SCCB介绍

SCCB ( Serial Camera Control Bus)是 OmniVision公司公布的串行摄像机控制总线协议,相当于一个简易的I2C 协议。SCCB有三线和两线之分,三线的是一主机多从机,两线的是一主机一从机。

2.2 数据传输

在SCCB协议中,一个基本传输单元称作一个相(phase),一个相包含总共9比特,前8比特为数据,它的响应信号ACK被称为一个传输单元的第9位,分为Don’t care和 NA(No ACK)。Don’t care位由从机产生;NA位由主机产生,由于SCCB不支持多字节的读写,NA位必须为高电平。sCCB没有重复起始的概念,因此在 SCCB的读周期中,当主机发送完片内寄存器地址后,必须发送总线停止条件。不然在发送读命令时,从机将不能产生 Don’t care 响应信号。
当写数据到从机被定义为写传输,当从机中读数据被定义为读传输,每一个传输都要有开始位(start)和结束位(sotp);完整的数据传输包括两个或三个阶段,每一个阶段包含9位数据,其中高8位为所要传输的数据,最低位根据器件读写情况有不同的取值:
每一个阶段组成:8位数据+don’t care/NA
如果是主机发送数据,即进行写操作,第9位就为don’t care;如果是从机发送数据,即为读操作,第九位就为NA。

dont care:
摄像头发送数据给主机,不在乎发送0或者1,
NA:
主机给从机发送停止位,sda为高电平

2.3 写操作

三相写传输或者四相写

ID Addr : 表示从机的器件地址 以及 一位读写控制位   7位器件地址 + 1位写控制位  0

Sub Addr :表示从机的寄存器地址

Write Data :主机给从机写的一字节的数据

 X : 从机反馈don‘t care,不在乎0或者1

 特别注意 :ov5640摄像头的器件地址有两个字节,因此写操作是四相写传输,先 起始位+器件地址+字节高地址+字节字节+一字节数据

 2.4 读操作

读操作分两个阶段:

第一阶段 :

写:两相写传输或者三相写

ID Addr : 表示从机的器件地址 以及 一位读写控制位   7位器件地址 + 1位写控制位  0

Sub Addr :表示从机的寄存器地址

X : 从机反馈don‘t care,不在乎0或者1

 

 第二阶段 :

ID Addr : 表示从机的器件地址 以及 一位读写控制位   7位器件地址 + 1位读控制位  1

Read Data :从机发送给主机的八位数据

X : 从机反馈don‘t care,不在乎0或者1

NA :主机应答从机发送数据,为高电平

 三 EEPROM

3.1 写操作时序

写操作,发起始位->写写控制字->接收ACK->写字节地址->接收ACK->写数据接收ACK->发停止位。
写控制字:
{7’b101000,1’b0}

单字节写:一次只写一个字节。

 页写:一次可以写16个字节。

 

 3.2 读操作时序


从当前地址读
发起始位->写控制字->接收ACK->写读地址->接收读数据->发NACK->发停止位。

 随机读
随机读,发起始位->写控制字->写读地址->接收ACK->发起始位->写读控制字->接收读数据->发NACK->发停止位。

 顺序读
顺序读,发起始位->写控制字->写读地址->接收ACK->发起始位->写读控制字->接收读数据->发ACK->接收读数据->发NACK->发停止位。

四 设计方案

4.1 I2C数据传输状态图

 4.2 EEPROM 读写控制状态输出

4.3 系统框图

猜你喜欢

转载自blog.csdn.net/qq_52445967/article/details/125490313