FPGA-基于I2C协议的EEPROM驱动控制

FPGA-基于I2C协议的EEPROM驱动控制

开启FPGA的学习之路,记录笔记,方便回顾记忆



一、I2C协议

I2C 通讯协议(Inter-Integrated Circuit)是由 Philips 公司开发的一种简单、双向二线制同步串行总线,只需要两根线即可在连接于总线上的器件之间传送信息。I2C 通讯协议和通信接口在很多工程中有广泛的应用,如数据采集领域的串行 AD,图像处理领域的摄像头配置,工业控制领域的 X 射线管配置等等。除此之外,由于 I2C 协议占用引脚特别少,硬件实现简单,可扩展型强,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
总的来说,I2C是一种较为简易,并且方便使用的通信协议。

二、I2C物理层

I2C 通讯设备之间的常用连接方式,如下图。
I2C通讯设备连接图
1、它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。
2、一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。
3、 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
4、总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
5、 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。
6、具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多 I2C 设备尚不支持高速模式普遍支持都是标准模式
7、连接到相同总线的 IC 数量受到总线的最大电容 400pF 限制 。

三、I2C协议层

1.I2C整体时序图

I2C协议整体时序图,如下图所示。
整体时序图
I2C 协议整体时序图分为 4 个部分,图中标注的①②③④表示 I2C 协议的 4个状态,分别为“总线空闲状态”、“起始信号”、“数据读/写状态”和“停止信号”。
1、 图中标注①表示“总线空闲状态”,在此状态下串口时钟信号 SCL 和串行数据信号 SDA 均保持高电平,此时无 I2C 设备工作
2、图中标注②表示“起始信号”,在 I2C 总线处于“空闲状态”时,SCL 依旧保持高电平时, SDA 出现由高电平转为低电平的下降沿,产生一个起始信号,此时与总线相连的所有 I2C 设备在检测到起始信号后,均跳出空闲状态,等待控制字节的输入。
3、图中标注③表示“数据读/写状态”
数据读写时序如下图
数据读写时序图
I2C 通讯设备的通讯模式是主从通讯模式,通讯双方有主从之分。
当主机向从机进行指令或数据的写入时,串行数据线 SDA 上的数据在串行时钟 SCL为高电平时写入从机设备,每次只写入一位数据串行数据线 SDA 中的数据在串行时钟SCL 为低电平时进行数据更新,以保证在 SCL 为高电平时采集到 SDA 数据的稳定状态
当一个完整字节的指令或数据传输完成,从机设备正确接收到指令或数据后,会通过拉低 SDA 为低电平,向主机设备发送单比特的应答信号,表示数据或指令写入成功。若从机正确应答,可以结束或开始下一字节数据或指令的传输,否则表明数据或指令写入失败,主机就可以决定是否放弃写入或者重新发起写入。
4、图中标注④表示“停止信号”,完成数据读写后,串口时钟 SCL 保持高电平,当串口数据信号 SDA 产生一个由低电平转为高电平的上升沿时,产生一个停止信号,I2C 总线跳转回“总线空闲状态”。

2.I2C 设备器件地址与存储地址

每个 I2C 设备在出厂前都被设置了器件地址,用户不可自主更改;器件地址一般位宽为 7 位,有的 I2C 设备的器件地址设置了全部位宽。

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

2.I2C 读/写操作

对传入从机的控制命令最低位读写控制位写入不同数据值,主机可实现对从机的读/写操作,读写控制位为 0 时,表示主机要对从机进行数据写入操作;读写控制位为 1 时,表示主机要对从机进行数据读出操作

1、I2C单字节写操作

I2C 设备单字节写操作时序图,如下图
单字节写操作时序图
单字节写操作
参照时序图,列出单字节写操作流程如下:
1、主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
2、从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。若为 2 字节地址,顺序执行操作;若为单字节地址跳转到步骤(5);
3、先向从机写入高 8 位地址,且高位在前低位在后;
4、待接收到从机回传的应答信号,再写入低 8 位地址,且高位在前低位在后,若为 2字节地址,跳转到步骤(6);
5、 按高位在前低位在后的顺序写入单字节存储地址
6、 地址写入完成,主机接收到从机回传的应答信号后,开始单字节数据的写入;
7、单字节数据写入完成,主机接收到应答信号后,向从机发送停止信号,单字节数据写入完成。

2、 I2C页写操作

单字节写操作中,主机一次向从机中写入单字节数据;页写操作中,主机一次可向从机写入多字节数据。
简单来说,页写操作写多字节数据,单字节写操作只写了单字节。

页写操作时序图,如下图
页写操作
参照时序图,列出页写操作流程如下:
1、 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
2、从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。若为 2 字节地址,顺序执行操作;若为单字节地址跳转到步骤(5);
3、先向从机写入高 8 位地址,且高位在前低位在后;
4、待接收到从机回传的应答信号,再写入低 8 位地址,且高位在前低位在后,若为 2字节地址,跳转到步骤(6);
5、按高位在前低位在后的顺序写入单字节存储地址;
6、地址写入完成,主机接收到从机回传的应答信号后,开始第一个单字节数据的写入;
7、数据写入完成,主机接收到应答信号后,开始下一个单字节数据的写入;
8、数据写入完成,主机接收到应答信号。若所有数据均写入完成,顺序执行操作流程;若数据尚未完成写入,跳回到步骤(7);
9、主机向从机发送停止信号,页写操作完成。

注意:所有 I2C 设备均支持单字节数据写入操作,但只有部分 I2C 设备支持页写操作;且支持页写操作的设备,一次页写操作写入的字节数不能超过设备单页包含的存储单元数。

3、 I2C随机读操作

I2C 随机读操作可以理解为单字节数据的读取。
操作时序图,如下图

随机读操作
参照时序图,列出页写时序操作流程如下:
1、主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
2、从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。若为 2 字节地址,顺序执行操作;若为单字节地址跳转到步骤(5);
3、先向从机写入高 8 位地址,且高位在前低位在后;
4、待接收到从机回传的应答信号,再写入低 8 位地址,且高位在前低位在后,若为 2字节地址,跳转到步骤(6);
5、按高位在前低位在后的顺序写入单字节存储地址;
6、地址写入完成,主机接收到从机回传的应答信号后,主机再次向从机发送一个起始信号;
7、主机向从机发送控制命令,读写控制位设置为高电平,表示对从机进行数据读操作;
8、主机接收到从机回传的应答信号后,开始接收从机传回的单字节数据;
9、数据接收完成后,主机产生一个时钟的高电平无应答信号;
10、 主机向从机发送停止信号,单字节读操作完成。

4、 I2C顺序读操作

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

顺序读操作时序图,如下图
顺序读操作

参照时序图,列出页写时序操作流程如下:

(1) 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
(2) 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。若为 2 字节地址,顺序执行操作;若为单字节地址跳转到步骤(5);
(3) 先向从机写入高 8 位地址,且高位在前低位在后;
(4) 待接收到从机回传的应答信号,再写入低 8 位地址,且高位在前低位在后,若为 2字节地址,跳转到步骤(6);
(5) 按高位在前低位在后的顺序写入单字节存储地址;
(6) 地址写入完成,主机接收到从机回传的应答信号后,主机再次向从机发送一个起始信号;
(7) 主机向从机发送控制命令,读写控制位设置为高电平,表示对从机进行数据读操作;
(8) 主机接收到从机回传的应答信号后,开始接收从机传回的第一个单字节数据;
(9) 数据接收完成后,主机产生应答信号回传给从机,从机接收到应答信号开始下一字节数据的传输,若数据接收完成,执行下一操作步骤;若数据接收未完成,在此执行步骤(9);
(10) 主机产生一个时钟的高电平无应答信号;
(11) 主机向从机发送停止信号,顺序读操作完成。


总结

FPGA-基于I2C协议的EEPROM驱动控制,内容知识包括I2C的物理层的理解、协议层。
协议层内容包括整体时序图、设备器件地址与存储地址、I2C的读写操作。
I2C的读写操作中包括单字节写操作、页写操作、随机读操作、顺序读操作,其中还包括各自的时序图,各自的时序操作流程;其实就是读写单字节还是多字节的一个操作

知识内容主要参考:FPGA Verilog开发实战指南、野火的学习资料
代码实战参考:野火征途开发板代码或ALINX的AX7010。

视频参考:https://www.bilibili.com/video/BV17z411i7er?p=199&vd_source=41e646f94a8a699c1dff7daee76f3787

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值