[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 系统框图

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
FPGA上实现IIC总线驱动来EEPROM是一种常见的应用。通过引用和中的内容,我们可以了解到以下步骤和问题解决方案: 1. IIC协议简介:IIC协议是一种串行通信协议,它允许多个设备在同一总线上进行通信。IIC协议在硬件结构上包含了两根线路,即串行数据线(SDA)和串行时钟线(SCL)。 2. 设计思想:在FPGA上实现IICEEPROM的设计思路是通过编Verilog HDL代码来实现IIC总线的驱动功能,并通过IIC总线对EEPROM进行测试。 3. RTL代码重要部分:在RTL代码的实现中,需要考虑起始信号、应答信号以及数据的时序。根据引用的内容,可能会遇到从机无应答、应答正常但出数据不对以及时钟问题等问题。对于从机无应答的情况,可以通过添加状态机中的等待应答的机制来解决。对于应答正常但出数据不对的情况,可能是EEPROM本身的问题,可以尝试重新上电来解决。而时钟问题可以通过添加边沿检测程序来解决。 4. 开发过程遇到的问题:在开发过程中可能会遇到一些问题,如从机无应答、出数据错误等。通过使用SignalTap抓取波形图可以帮助分析问题所在。 综上所述,实现IICEEPROMFPGA设计可以根据IIC协议的时序特点编Verilog HDL代码,并解决可能出现的问题,如从机无应答、出数据错误等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [FPGA中 通过IICEEPROM驱动代码示例](https://download.csdn.net/download/qq_20222919/12733052)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [FPGA实现IIC通信(EEPROM)](https://blog.csdn.net/xs_sd/article/details/114534036)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值