欢迎光临散文网 会员登陆 & 注册

FPGA的I2C协议实现(FPGA学习笔记)

2023-03-25 20:01 作者:莫奈印象中的睡莲  | 我要投稿

参考资料:正点原子E2PROM读写测试

I2C总线结构
I2C单次写

SCL为高电平时,SDA产生下降沿表示I2C传输开始,在传输完7位器件地址及一位写命令(0)后,主机释放SDA总线,从机拉低SDA应答。对于16位器件存储字地址而言,需要分两次8位器件存储字地址传输,等待从机应答后再传输8位数据,最后SDA在SCL为高电平时产生上升沿表示一次I2C单次传输结束。

I2C随机读

I2C随机读操作与前面传输器件地址和传输16位器件存储字地址相同,在传输完器件存储字地址后SDA会在次在SCL为高电平时产生下降沿(既起始信号)和再次传输器件地址,只不过这次7位器件地址后面是读命令(1),这种操作称为虚写,主要是为了使从机内部指针指向需要读取得存储单元地址。

I2C驱动模块状态机

I2C驱动时钟频率为scl频率的4倍(便于SDA实现在SCL低电平中间(此时为dri_clk上升沿)改变数据,并在SCL为高电平时保持数据),dri_clk由输入的50MHZ晶振分频得到1000KHZ。初始状态SCL与SDA保持高电平,当收到外部I2C触发信号i2c_exec高电平时,SCL拉低启动I2C,接着后面状态转移分为8个部分。

8个状态
I2C驱动模块

由于SDA为双向接口,所以要避免同时作为输入与输出

三态门解决sda双向传输问题

当i2c_exec拉高时,外部传入I2C的控制信号通过寄存器临时保存

寄存外部数据

后面由三段式状态机实现I2C的状态转移

第一段时序电路描述状态转移

第二段逻辑电路描述状态转移条件

第三段时序电路描述状态输入与输出

I2C写操作

写入7位器件地址及写命令

写入16位字地址的高8位
向从机写入8位数据10101010

I2C读操作

重新写入器件地址及读命令

读取8位数据10101010


FPGA的I2C协议实现(FPGA学习笔记)的评论 (共 条)

分享到微博请遵守国家法律