微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于FPGA的多路I2C总线设计与实现

基于FPGA的多路I2C总线设计与实现

时间:07-01 来源:互联网 点击:

SCL_IDLE状态:当上电复位后,状态机就处于该状态。当I2C控制器为主节点并且总线空闲时,收到开始标志后,转移到START状态。
START状态:当在此状态时,根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_LOW_EDGE状态,否则保持在START状态。
SCL_LOW_EDGE状态:当在此状态时,在下一个系统时钟时,转移到SCL_LOW状态。
SCL_LOW状态:在此状态时,根据控制信号,设置SDA的输出,根据I2C协议,需要保持一定的时间,当保持时间满足要求时,转移到SCL_HIGH_EDGE状态,否则保持在该状态;如果仲裁丢失且已经传输了7个字节,则转移到SCL_IDLE状态。
SCL_HIGH_EDGE状态:在此状态时,完成一定的操作,持续一个时钟周期后,转移到SCL_HIGH状态。如果SCL输入为0或者状态寄存器中的位MCF=1,则一直停留在该状态。
SCL_HIGH状态:在此状态时,如果有重复起始信号,则SCL高电平持续一半时间,转移到START状态;如果有结束信号,则SCL高电平持续一半时间,转移到STOP_WAIT状态;根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_LOW_EDGE状态,否则保持在当前状态。
STOP_WAIT状态:在此状态时,根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_IDLE状态。
系统工作流程
多路I2C总线的系统在系统上电后,处理器通过FPGA与FPGA相连接的I2C设备通信。
(1)当处理器作为主设备与FPGA所实现的I2C总线上所挂的从设备进行通信时,处理器主体通过对FPGA内部的该路I2C总线控制器对应的寄存器进行操作,根据I2C总线通信协议,产生起始信号和时钟信号,并查询状态位,对该路I2C总线上的从设备进行发送或者接收数据的操作,在数据交换完成后,产生停止信号,完成整个通信。
(2)当处理器主体作为从设备与FPGA所实现的I2C总线上所挂的主设备进行通信时,FPGA所实现的I2C总线上所挂的主设备产生起始信号和时钟信号,处理器主体通过对FPGA内的该路I2C总线控制器对应的数据寄存器进行操作,发送或者接收数据。当通信完成后,FPGA所实现的I2C总线上所挂的主设备产生停止信号,完成整个通信。
通过可编程逻辑器件实现的多路I2C总线上每一路可以挂多个设备,可以是从设备,也可以是主设备,具体能挂的设备数量受总线电容的限制。
本设计利用可编程逻辑器件,完成对处理器主体I2C总线的扩展,使该处理器能够有多个I2C总线通道,每一路I2C总线上可以挂载多个不同的设备,可以是主设备,也可以是从设备,满足不同应用场合的要求。在可编程逻辑器件内,每个I2C总线控制器仅使用4个寄存器,大大降低了控制的复杂度,无需占用较多的CPU资源,系统稳定,执行效率高。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top