基于FPGA的I2C协议实现

I²CInter-Integrated Circuit)即集成电路总线,它其实是I²C Bus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板嵌入式系统手机用以连接低速周边设备而发展。I²C的正确读法为“I平方C”("I-squared-C"),而“I二C”("I-two-C")则是另一种错误但被广泛使用的读法。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属设备地址。--------维基百科

图1 I2C总线

 一、I^2C总线的概念

I^2C通过SCL和SDA在连接到总线的器件之间进行信息交流。每个器件都有一个唯一的地址识别(微处理器、lCD驱动器、存储器及键盘接口)。而且都可以作为一个发送器或接收器,由器件的功能决定。很明显 LCD驱动器只是一个接收器,而存储器则既可以接收又可以发送数据,除了发送器和接收器外器件在执行数据传输时也可以被看作是主机或从机 。见表 1主机是初始化总线的数据传输并产生允许传输的时钟信号的器件,此时任何被寻址的器件都被认为是从机。
1.1I^2C总线的特征

I^2C总线的两条线SCL和SDA都是双向线路,都通过一个电流源或上拉电阻连接到正的电源电压。实际使用中,通常将SCL定义为输出类型,SDA为输入输出类型。当总线空闲时,这两条线路都是高电平。I^2C总线上的数据传输速率在标准模式下可达100Kbit/s,在快速模式下可达400kbit/s,在高速模式下可达3.4Mbit/s。连接到总线的接口数量只由总线电容400pF的限制决定。

 1.2 位传输

由于连接到I^2C总线的器件有不同种类的工艺(CMOS、NMOS、双极性),逻辑0和1的电平不是固定的,它由V_D_D的相关电平决定。每传输一个数据位就产生一个时钟脉冲。

1.2.1 数据的有效性

SDA线上的数据必须在时钟的高电平周期保持稳定。数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。

 

图2 IIC数据改变

 图2中给出了SDA上数据何时改变的示意图,由图可知,在SCL高电平期间,数据必须保持稳定;在SCL为低电平期间,才允许SDA上数据发生改变。

1.2.2 起始和停止条件

起始条件:在SCL为高电平器件,SDA由高电平跳变为低电平,此情况表示起始条件。

停止条件:在SCL为高电平期间,SDA由低电平跳变为高电平,此情况表示停止条件。

起始条件和停止条件一般由主机产生。起始条件和停止条件如图3所示:

图3 起始条件和停止条件

 图3中S表示起始条件,此时,SCL为高电平,SDA由高电平跳变为低电平;P表示结束条件,此时,SCL为高电平,由低电平跳变为高电平。

1.2.3 数据发送过程

在检测到起始条件后,接下来可以进行数据的发送,发送到SDA线上的每个字节必须为8位。每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应信号。首先传输的是数据的最高位。

响应:在一个字节发送完毕后后面必须跟一个响应信号。想关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间,主机释放SDA线(此时SDA为输入类型),此时若从机发通过SDA数据线传入一个低电平,则从机响应;从机相应后可以继续进行数据的传输,若不在进行数据传输,此时只需要在从机响应后主机再产生一个停止信号即可。

图4 IIC 总线的数据发送过程

图4中通过是I^2C 总线发送数据的过程,首先主控器产生起始信号(告诉从机主机要发送数据了),然后从机接收到起始信号后开始做好接收数据的准备,接下来主机就可以进行数据的发送,图4中首先发送的是被控器7位地址和一位读写选择信号,在主机发送完成后,主机会释放SDA总线(此时SDA由输出类型变为输入类型),同时从机在接收完数据信号后通过SDA线传输给主机一个应答信号ACK(SCL为高时,SDA为低),在主机检测到应答信号后主机继续发送下一个字节,待发送完成后主机释放SDA总线(SDA由输出变为输入类型),同时从机在接收完数据信号后通过SDA线传输给主机一个

  • 38
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
基于FPGAI2C控制器设计是一种用于实现I2C总线通信协议的方案。I2C是一种串行通信接口,用于在多个设备之间进行数据传输。FPGA作为一种可编程逻辑器件,具有高度灵活性和可重构性,非常适合用于设计I2C控制器。 在设计基于FPGAI2C控制器时,首先需要了解I2C协议的工作原理。I2C总线由一个主设备和多个从设备组成,主设备负责发起并控制通信过程,从设备负责响应主设备的指令。 设计中,我们可以利用FPGA的可编程性和并行处理能力来实现I2C控制器。首先,我们可以使用FPGA的I/O引脚作为SCL(时钟线)和SDA(数据线)来与外部的I2C总线进行连接。然后,我们可以使用FPGA内部的逻辑电路实现I2C协议的各个功能。 例如,在FPGA中可以设计一个状态机来控制I2C的起始,停止,发送和接收等操作。该状态机可以根据I2C的时钟以及外部的读写信号进行状态转换。同时,我们可以使用FPGA内部的存储器来缓存发送和接收的数据,以便实现数据的存储和传输。 此外,FPGA还可以使用硬件描述语言(如Verilog或VHDL)来描述I2C控制器的行为,方便实现和调试。通过FPGA的可编程性,我们可以根据需求对控制器进行优化和修改,以适应不同的应用场景。 总的来说,基于FPGAI2C控制器设计可以充分发挥FPGA的可编程性和并行处理能力,实现灵活、高效的I2C通信功能。该设计方案可以应用于各种需要I2C通信的电子设备中,提升系统的可扩展性和性能。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值