硬件学习(第二章)

本文详细介绍了I2C通讯协议,包括其物理层特性、协议时序、设备地址设置、存储地址结构以及读写操作流程,重点讲解了单字节和页写操作。
摘要由CSDN通过智能技术生成

二、I2C 通讯协议

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

2.1 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 限制。

2.2 I2C 协议层

I2C 协议的整体时序图

        由图可知,I2C 协议整体时序图分为 4 个部分,图中标注的①②③④表示 I2C 协议的 4 个状态,分别为“总线空闲状态”、“起始信号”、“数据读/写状态”和“停止信号”, 针对这 4 个状态,我们来做一下详细介绍。

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

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

(3) 图中标注③表示“数据读/写状态”,“数据读/写状态”时序图具体见下图 

        I2C 通讯设备的通讯模式是主从通讯模式,通讯双方有主从之分。 当主机向从机进行指令或数据的写入时,串行数据线 SDA 上的数据在串行时钟 SCL 为高电平时写入从机设备,每次只写入一位数据;串行数据线 SDA 中的数据在串行时钟 SCL 为低电平时进行数据更新,以保证在 SCL 为高电平时采集到 SDA 数据的稳定状态。 当一个完整字节的指令或数据传输完成,从机设备正确接收到指令或数据后,会通过拉低 SDA 为低电平,向主机设备发送单比特的应答信号,表示数据或指令写入成功。若从机正确应答,可以结束或开始下一字节数据或指令的传输,否则表明数据或指令写入失败,主机就可以决定是否放弃写入或者重新发起写入。

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

2.3 I2C 设备的器件地址

        每个 I2C 设备在出厂前都被设置了器件地址,用户不可自主更改;器件地址一般位宽为 7 位,有的 I2C 设备的器件地址设置了全部位宽( OV7725、 OV5640 摄像头);有的 I2C 设备的器件地址设置了部分位宽( EEPROM 存储芯片,它的器件地址只设置了高 4 位,剩下的低 3 位由用户在设计硬件时自主设置),例如AT24C64 EEPROM 存储芯片的器件地址包括厂商设置的高 4 位 1010 和用户需自主设置的低 3 位 A0、A1、A2 。在硬件设计 时,通过将芯片的 A0、A1、A2 这 3 个引脚分别连接到 VCC 或 GND 来实现器件地址低 3 位的设置,若 3 个引脚均连接到 VCC,则设置后的器件地址为 1010_111;若 3 个引脚均连 接到 GND,则设置后的器件地址为 1010_000。由于 A0、A1、A2 这 3 位只能组合出 8 种 情况,所以一个主机最多只能连接 8 个 AT24C64 存储芯片。

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

EEPROM 储存芯片控制命令格式示意图

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

2.4 I2C 设备的存储地址

        每一个支持 I2C 通讯协议的设备器件,内部都会包含一些可进行读/写操作的寄存器或存储器。OV7725、OV5640 摄像头使用的是与 I2C 协议极为相似的 SCCB 协议,他们内部包含一些需要进行读/写配置的寄存器,只有向对应寄存器写入正确参数,摄像头才能被正确使用;同样,EEPROM 存储芯片内部则包含许多存储单元,需要存储的数据按照地址被写入对应存储单元。

        由于 I2C 设备要配置寄存器的多少或存储容量的大小的不同,存储地址根据位宽分为单字节和 2 字节两种。OV7725、OV5640 摄像头,两者的寄存器数量不同,OV7725 摄像头需要配置寄存器较少,单个字节能够实现所有寄存器的寻址,所以他的存储地址位宽为 8 位;而 OV5640 摄像头需要配置寄存器较多,单个字节不能够实现所有寄存器的寻址,所以他的存储地址位宽为 16 位,2 个字节。 以 EEPROM 存储芯片为例,AT24C04 的存储容量为 1Kbit(128byte),7 位存储地址即可满足所有存储单元的寻址,存储地址为单字节即可;而 AT24C64 的存储空间为 64 Kbit(8Kbyte),需要 13 位存储地址才可满足所有存储单元的寻址,存储地址为 2 字节。

AT24C04、AT24C64 存储地址示意图

2.5 I2C 的读/写操作

        对传入从机的控制命令最低位读写控制位写入不同数据值,主机可实现对从机的读/写操作,读写控制位为 0 时,表示主机要对从机进行数据写入操作;读写控制位为 1 时,表 示主机要对从机进行数据读出操作。对于 I2C 协议的读/写操作,我们将其分为读操作和写操作两部分进行讲解。

        首先讲解 I2C 写操作,由于一次写入数据量的不同,I2C 的写操作可分为单字节写操作和页写操作,详细讲解如下。

I2C 设备单字节写操作

I2C 设备单字节写操作时序图

(单字节存储地址)

(2 字节存储地址)

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

1.单字节存储地址

(1) 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;

(2) 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入;

(3) 按高位在前低位在后的顺序写入单字节存储地址;

(4) 地址写入完成,主机接收到从机回传的应答信号后,开始单字节数据的写入;

(5) 单字节数据写入完成,主机接收到应答信号后,向从机发送停止信号,单字节数据写入完成。

2.两字节存储地址

(1) 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;

(2) 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入,顺序执行操作;

(3) 先向从机写入高 8 位地址,且高位在前低位在后;

(4) 待接收到从机回传的应答信号,再写入低 8 位地址,且高位在前低位在后;

(5) 地址写入完成,主机接收到从机回传的应答信号后,开始单字节数据的写入;

(6) 单字节数据写入完成,主机接收到应答信号后,向从机发送停止信号,单字节数据写入完成。

I2C 页写操作

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

连续写时序图

(单字节存储地址)

(2 字节存储地址)

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

1.单字节存储地址:

(1) 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;

(2) 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。

(3) 按高位在前低位在后的顺序写入单字节存储地址;

(4) 地址写入完成,主机接收到从机回传的应答信号后,开始第一个单字节数据的写入;

(5) 数据写入完成,主机接收到应答信号后,开始下一个单字节数据的写入;

(6) 数据写入完成,主机接收到应答信号。若所有数据均写入完成,顺序执行操作流程;若数据尚未完成写入,重复步骤(5);

(7) 主机向从机发送停止信号,页写操作完成。

2.双字节存储地址:

(1) 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;

(2) 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写入。

(3) 先向从机写入高 8 位地址,且高位在前低位在后;

(4) 待接收到从机回传的应答信号,再写入低 8 位地址,且高位在前低位在后;

(5) 地址写入完成,主机接收到从机回传的应答信号后,开始第一个单字节数据的写入;

(6) 数据写入完成,主机接收到应答信号。若所有数据均写入完成,顺序执行操作流程;若数据尚未完成写入,重复步骤(5);

(9) 主机向从机发送停止信号,页写操作完成。

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

I2C 随机读操作/顺序读操作

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

        步骤基本一致,唯一区别是结尾接收完成后,主机产生一个时钟的高电平无应答信号,之后主机向从机发送停止信号,读操作完成。

  • 31
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值