从零开始的FPGA学习14--基于 I2C 协议的 EEPROM 驱动控制

I2C物理层

在这里插入图片描述

I2C协议层

I2C 整体时序图

在这里插入图片描述

  1. 图中标注①表示“总线空闲状态”,在此状态下串口时钟信号 SCL 和串行数据信号 SDA 均保持高电平,此时无 I2C 设备工作。

  2. 图中标注②表示“起始信号”,在 I2C 总线处于“空闲状态”时,SCL 依旧保持高电平时, SDA 出现由高电平转为低电平的下降沿,产生一个起始信号,此时与总线相连的所有 I2C 设备在检测到起始信号后,均跳出空闲状态,等待控制字节的输入。

  3. 图中标注③表示“数据读/写状态”
    在这里插入图片描述
    当主机向从机进行指令或数据的写入时,串行数据线 SDA 上的数据在串行时钟 SCL为高电平时写入从机设备,每次只写入一位数据;串行数据线 SDA 中的数据在串行时钟SCL 为低电平时进行数据更新,以保证在 SCL 为高电平时采集到 SDA 数据的稳定状态。

    当一个完整字节的指令或数据传输完成,从机设备正确接收到指令或数据后,会通过拉低 SDA 为低电平,向主机设备发送单比特的应答信号,表示数据或指令写入成功。若从机正确应答,可以结束或开始下一字节数据或指令的传输,否则表明数据或指令写入失败,主机就可以决定是否放弃写入或者重新发起写入。

  4. 图中标注④表示“停止信号”,完成数据读写后,串口时钟 SCL 保持高电平,当串口数据信号 SDA 产生一个由低电平转为高电平的上升沿时,产生一个停止信号,I2C 总线跳转回“总线空闲状态”

I2C设备器件地址

每个 I2C 设备在出厂前都被设置了器件地址,用户不可自主更改;器件地址一般位宽为 7 位。本章节要使用的EEPROM 存储芯片,它的器件地址只设置了高 4 位,剩下的低 3 位由用户在设计硬件时自主设置。

在 I2C 主从设备通讯时,主机在发送了起始信号后,接着会向从机发送控制命令。控制命令长度为 1 个字节,它的高 7 位为上文讲解的 I2C 设备的器件地址,最低位为读写控制位。读写控制位为 0 时,表示主机要对从机进行数据写入操作;读写控制位为 1 时,表示主机要对从机进行数据读出操作。

EEPROM 储存芯片控制命令格式示意图如下。
在这里插入图片描述

主机在与从机建立通讯时,并不是直接向想要通讯的从机发送控制命令(器件地址 + 读/写控制位)以建立通讯,而是主机会将控制命令直接发送到串行数据线 SDA上,与主机硬件相连的从机设备都会接收到主机发送的控制命令。所有从机设备在接收到主机发送的控制命令后会与自身器件地址做对比;若两者地址相同,该从机设备会回应一个应答信号告知主机设备,主机设备接收到应答信号后,主从设备建立通讯连接,两者可进行数据通讯。

I2C设备存储地址

每一个支持 I2C 通讯协议的设备器件,内部都会包含一些可进行读/写操作的寄存器或存储器。本章节要使用的EEPROM 存储芯片内部则包含许多存储单元,需要存储的数据按照地址被写入对应存储单元。

以 EEPROM 存储芯片为例,在 ATMEL 公司生产的 AT24C 系列 EEPROM 存储芯片中选取两款存储芯片 AT24C04 和 AT24C64。AT24C04 的存储容量为 1Kbit(128byte),7 位存储地址即可满足所有存储单元的寻址,存储地址为单字节即可;而 AT24C64 的存储空间为64 Kbit(8Kbyte),需要 13 位存储地址才可满足所有存储单元的寻址,存储地址为 2 字节。

在这里插入图片描述

I2C 读/写操作

I2C 单字节写操作

在这里插入图片描述
在这里插入图片描述

(1) 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
(2) 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。
(3) 按高位在前低位在后的顺序写入单字节存储地址;
(4) 地址写入完成,主机接收到从机回传的应答信号后,开始单字节数据的写入;
(5) 单字节数据写入完成,主机接收到应答信号后,向从机发送停止信号,单字节数据
写入完成。

I2C 页写操作

略,需要留言

I2C 随机读操作

I2C 随机读操作可以理解为单字节数据的读取
从时序图上可以看出,IIC读时序要写两次器件地址,刚开始接触的时候我也很疑惑 dummy write。我个人这样理解这里,首先传送器件地址到总线上找到器件,然后写入寄存器地址,也就是word address找到需要读取数据的地址,但并不是真正的写入数据所以叫做dummy wirte(假写)。然后再传输一次器件地址后开始读数据。
在这里插入图片描述(1) 主机产生并发送起始信号到从机,将控制命令写入从机设备
(2) 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入
(3) 地址写入完成,主机接收到从机回传的应答信号后,主机再次向从机发送一个起始信号
(4) 主机向从机发送控制命令,读写控制位设置为高电平,表示对从机进行数据读操作
(5) 主机接收到从机回传的应答信号后,开始接收从机传回的单字节数据
(6) 数据接收完成后,主机产生一个时钟的高电平无应答信号
(7) 主机向从机发送停止信号,单字节读操作完成。

I2C 顺序读操作

I2C 顺序读操作就是对寄存器或存储单元数据的顺序读取。假如要读取 n 字节连续数据,只需写入要读取第一个字节数据的存储地址,就可以实现连续 n 字节数据的顺序读取。
在这里插入图片描述

实战演练

使用的 EEPROM 型号为 24C64,存储容量为 64 Kbit(8Kbyte),需要 13 位存储地址才可满足所有存储单元的寻址,存储地址为 2 字节。设定EEPROM 地址为 7’b1010_011
在这里插入图片描述
i2c_rw_data:数据收发模块,生成 eeprom 待写入数据,暂存 eeprom 读出数据
i2c_ctrl:I2C 驱动模块,按照 I2C 协议对 I2C 设备进行数据读写操作

I2C 驱动模块

在这里插入图片描述
将单字节写操作和随机读操作相结合,可以实现 I2C 设备单字节写操作和随机读操作的状态跳转。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值