ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

IIC协议介绍

2022-09-01 21:34:41  阅读:246  来源: 互联网

标签:协议 信号 主机 写入 地址 介绍 从机 IIC 单字节


讲解I2C协议之前,首先列出GPIO的输出模式配置图,输出模式有推挽输出、开漏输出。
推挽输出:可以输出高、低电平,连接数字器件。推挽结果一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通时令一个三极管截止。(特点:是可以真正的输出高电平和低电平,且两种电平下都有驱动能力)。
开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要加上拉电阻才行。(特点:就是高电平没有驱动能力,需要借助外部上拉电阻才能真正输出高电平)。开漏只能输出低电平,高电平的时候实际上是个高阻态,需要外接电阻来拉高的。
image
在I2C协议中SCL和SDA都需要配置成开漏输出模式,同时都需要外接一个上拉电阻,以保证主从设备无操作时,SCL、SDA均为高电平,总线状态为空闲状态。由于SCL、SDA均配置的是开漏输出,如果不上拉电阻则没有输出高电平的能力。
开漏输出模式;当CPU在左边通过位设置/清除寄存器,或输出数据寄存器写入数据后,该数据位将通过输出控制电路传送到的I/O端口,如果输出控制电路输出的是逻辑“1”,则编号3的N-MOS管将处于开启状态,此时I/O端口的电平被N-MOS管拉到了VSS的零电位。如果是逻辑“0”,则的N-MOS管将处于关闭状态,此时I/O端口的电平将由外部的上拉电阻决定。同时在图的上半部,施密特触发器处于开启状态,这意味着CPU可以在“输入数据寄存器”的另一端,随时监控I/O端口的状态;通过这个特性,还实现了虚拟的I/O端口双向通信:I/O端口的电平将完全由外部电路决定,因此,CPU可以在“输入数据寄存器”读到外部电路的信号,而不是它自己输出的逻辑“1”。
image

图1 I2C 协议整体时序图

由图可知,I2C 协议整体时序图分为 4 个部分,图中标注的①②③④表示 I2C 协议的 4
个状态,分别为“总线空闲状态”、“起始信号”、“数据读/写状态”和“停止信号”。
其中①为总线空闲状态:此时串口时钟信号 SCL 和串行数据信号 SDA 均保持高电平,此时无 I2C 设备工作。
②为起始信号:在总线空闲状态,同时SCL 在高电平时, SDA 出现由高电平转为低电平的下降沿,称为其起始信号,此时与总线相连的所有 I2C 设备在检测到起始信号后,均跳出空闲状态,等待控制字节的输入。
③为数据读/写状态:其中应该包含有8位有效数据,和一位相应位ACK,其中数据的变化只能在时钟信号SCL的低电平期间,高电平期间需要保持数据的稳定,具体如图2所示。
image

图1 I2C 协议整体时序图

一个完整字节的指令或数据传输完成,从机设备正确接收到指令或数据后,会通过拉低 SDA 为低电平,向主机设备发送单比特的ACK应答信号,表示数据或指令写入成功。若从机正确应答,可以结束或开始下一字节数据或指令的传输,否则表明数据或指令写入失败,主机就可以决定是否放弃写入或者重新发起写入。
④为停止位:完成数据读写后,时钟 SCL 保持高电平,当数据信号 SDA 产生一个由低电平转为高电平的上升沿时,产生一个停止信号,I2C 总
线跳转回总线空闲状态。

IIC的读/写操作

I2C 写操作,由于一次写入数据量的不同,I2C 的写操作可分为单字节写操作和页写操作,具体如图3所示,
image

图1 I2C 协议整体时序图

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

图4 I2C 协议页写操作时序图

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

I2C随机操作

I2C 随机读操作可以理解为单字节数据的读取,操作时序图具体见图5.
image

图5 I2C 协议随机读操作时序图

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

I2C 顺序读操作

image

图6 I2C 协议顺序读操作时序图

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

标签:协议,信号,主机,写入,地址,介绍,从机,IIC,单字节
来源: https://www.cnblogs.com/powerforme/p/16587059.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有