IIC协议介绍
作者:互联网
讲解I2C协议之前,首先列出GPIO的输出模式配置图,输出模式有推挽输出、开漏输出。
推挽输出:可以输出高、低电平,连接数字器件。推挽结果一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通时令一个三极管截止。(特点:是可以真正的输出高电平和低电平,且两种电平下都有驱动能力)。
开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要加上拉电阻才行。(特点:就是高电平没有驱动能力,需要借助外部上拉电阻才能真正输出高电平)。开漏只能输出低电平,高电平的时候实际上是个高阻态,需要外接电阻来拉高的。
在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”。
图1 I2C 协议整体时序图
由图可知,I2C 协议整体时序图分为 4 个部分,图中标注的①②③④表示 I2C 协议的 4
个状态,分别为“总线空闲状态”、“起始信号”、“数据读/写状态”和“停止信号”。
其中①为总线空闲状态:此时串口时钟信号 SCL 和串行数据信号 SDA 均保持高电平,此时无 I2C 设备工作。
②为起始信号:在总线空闲状态,同时SCL 在高电平时, SDA 出现由高电平转为低电平的下降沿,称为其起始信号,此时与总线相连的所有 I2C 设备在检测到起始信号后,均跳出空闲状态,等待控制字节的输入。
③为数据读/写状态:其中应该包含有8位有效数据,和一位相应位ACK,其中数据的变化只能在时钟信号SCL的低电平期间,高电平期间需要保持数据的稳定,具体如图2所示。
图1 I2C 协议整体时序图
一个完整字节的指令或数据传输完成,从机设备正确接收到指令或数据后,会通过拉低 SDA 为低电平,向主机设备发送单比特的ACK应答信号,表示数据或指令写入成功。若从机正确应答,可以结束或开始下一字节数据或指令的传输,否则表明数据或指令写入失败,主机就可以决定是否放弃写入或者重新发起写入。
④为停止位:完成数据读写后,时钟 SCL 保持高电平,当数据信号 SDA 产生一个由低电平转为高电平的上升沿时,产生一个停止信号,I2C 总
线跳转回总线空闲状态。
IIC的读/写操作
I2C 写操作,由于一次写入数据量的不同,I2C 的写操作可分为单字节写操作和页写操作,具体如图3所示,
图1 I2C 协议整体时序图
图3 I2C 协议单字节操作时序图
参照时序图,列出单字节写操作流程如下:
(1) 主机 产生并发送起始信号到 从机,将控制命令写入从机设备,读写控制位设置为低电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
(2) 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址(WORD ADDRESS)的写入。若为 2 字节地址,顺序执行操作;若为单字节地址跳转到步骤(5);
(3) 先向从机写入高 8 位地址,且高位在前低位在后;
(4) 待接收到从机回传的应答信号,再写入低 8 位地址,且高位在前低位在后,若为 2字节地址,跳转到步骤(6);
(5) 按高位在前低位在后的顺序写入单字节存储地址;
(6) 地址写入完成,主机接收到从机回传的应答信号后,开始单字节数据的写入;
(7) 单字节数据写入完成,主机接收到应答信号后,向从机发送停止信号,单字节数据
写入完成。
I2C 页写操作
单字节写操作中,主机一次向从机中写入单字节数据;页写操作中,主机一次可向从机写入多字节数据。
图4 I2C 协议页写操作时序图
参照时序图,列出页写操作流程如下:
(1) 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低
电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
(2) 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写
入。若为 2 字节地址,顺序执行操作;若为单字节地址跳转到步骤(5);
(3) 先向从机写入高 8 位地址,且高位在前低位在后;
(4) 待接收到从机回传的应答信号,再写入低 8 位地址,且高位在前低位在后,若为 2
字节地址,跳转到步骤(6);
(5) 按高位在前低位在后的顺序写入单字节存储地址;
(6) 地址写入完成,主机接收到从机回传的应答信号后,开始第一个单字节数据的写
入;
(7) 数据写入完成,主机接收到应答信号后,开始下一个单字节数据的写入;
(8) 数据写入完成,主机接收到应答信号。若所有数据均写入完成,顺序执行操作流
程;若数据尚未完成写入,跳回到步骤(7);
(9) 主机向从机发送停止信号,页写操作完成。
I2C随机操作
I2C 随机读操作可以理解为单字节数据的读取,操作时序图具体见图5.
图5 I2C 协议随机读操作时序图
参照时序图,列出页写时序操作流程如下:
(1) 主机产生并发送起始信号到从机,将控制命令写入从机设备,读写控制位设置为低
电平,表示对从机进行数据写操作,控制命令的写入高位在前低位在后;
(2) 从机接收到控制指令后,回传应答信号,主机接收到应答信号后开始存储地址的写
入。若为 2 字节地址,顺序执行操作;若为单字节地址跳转到步骤(5);
(3) 先向从机写入高 8 位地址,且高位在前低位在后;
(4) 待接收到从机回传的应答信号,再写入低 8 位地址,且高位在前低位在后,若为 2
字节地址,跳转到步骤(6);
(5) 按高位在前低位在后的顺序写入单字节存储地址;
(6) 地址写入完成,主机接收到从机回传的应答信号后,主机再次向从机发送一个起始
信号
(7) 主机向从机发送控制命令,读写控制位设置为高电平,表示对从机进行数据读操
作;
(8) 主机接收到从机回传的应答信号后,开始接收从机传回的单字节数据;
(9) 数据接收完成后,主机产生一个时钟的高电平无应答信号;
(10) 主机向从机发送停止信号,单字节读操作完成。
I2C 顺序读操作
图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