什么是IIC通信协议?

目录

1.IIC简介

2.IIC通信协议

[2.1 IIC的空闲状态](#2.1 IIC的空闲状态)

[2.2 IIC总线的起始信号与终止信号](#2.2 IIC总线的起始信号与终止信号)

[2.3 IIC总线上数据传送的应答信号](#2.3 IIC总线上数据传送的应答信号)

[2.4 IIC总线上数据有效性](#2.4 IIC总线上数据有效性)

[2.5 IIC总线上数据帧格式](#2.5 IIC总线上数据帧格式)

[2.6 IIC寻址](#2.6 IIC寻址)

[2.7 IIC主机向从机发送数据](#2.7 IIC主机向从机发送数据)

[2.8 IIC从机向主机发送数据](#2.8 IIC从机向主机发送数据)


🌈你好呀!我是 程序猿

🌌 2024感谢你的陪伴与支持 ~

🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!


1.IIC简介

IIC通信协议,也称为I2C(Inter-Integrated Circuit),是一种串行、半双工总线,主要用于近距离、低速的芯片(如传感器、存储器、显示屏等)之间的通信。它由飞利浦(Philips)公司开发,用于简化PCB板上的连接和通信需求。

I2C协议采用两根双向的信号线进行通信:

  1. 串行数据线(SDA):用于传输数据的双向线路。
  2. 串行时钟线(SCL):用于同步数据传输的时钟信号线。

这种协议支持多主设备(多个微控制器或主控制器)和多从设备(外部设备)的连接。通过地址分配和数据传输阶段,主控制器可以选择和控制特定的从设备进行通信,从而实现多设备之间的数据交换和控制操作。

I2C协议的优点包括简单、灵活、成本低廉,适合在资源有限的嵌入式系统中使用。

I2C总线物理拓扑图

SDA和SCL都是双向的,所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。I2C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。

2.IIC通信协议

2.1 IIC的空闲状态

当IIC总线的数据线SDA和时钟线同时处于高电平时,规定为总线的空闲状态。此时各个器件输出级场效应管均处在截止状态,即释放总线,由两条信号线的上拉电阻把电平拉高。

2.2 IIC总线的起始信号与终止信号

IIC 总线在传送数据过程中一共有三种类型的信号,它们分别是:开始信号(S)、结束信号(P)和应答信号(ACK/NACK)。
**开始信号:**在SCL 串行时钟线为高电平期间,SDA 线由高电平向低电平的变化表示起始信号,只有在起始信号以后,其他命令才有效。

开始信号

**结束信号:**在SCL 串行时钟线为高电平期间,SDA 线由低电平向高电平的变化表示终止信号,随着终止信号的出现,所有外部操作就结束。

结束信号

起始信号和终止信号都是由主机发送的,起始信号产生之后,总线处于被占用的状态,在终止信号产生之后,总线就处于空闲状态。

2.3 IIC总线上数据传送的应答信号

应答信号:IIC总线进行数据传送时,传送的字节数并没有限制,但是每个字节长必须为8位长。数据传送过程中,先传送最高位(MSB),每一个被传送的字节后面都必须跟随着1位由接收器反馈的应答位(即一帧共有9位长)。

1、应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;

2、应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

应答--ACK 非应答--NACK

对于反馈有效应答位ACK的要求是:接收器在第9个时钟脉冲之前的低电平期间将数据线SDA拉低,并且确保在该时钟的高电平期间为稳定的低电平。 如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放数据线SDA,以便主控接收器发送一个停止信号P。

2.4 IIC总线上数据有效性

IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定;只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。

即:SDA线上的数据在SCL时钟"高"期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的"高"或"低"状态才可以改变。

应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答。

2.5IIC总线上数据帧格式

1.字节传输与应答:每一个字节必须保证是8bit长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随1bit的应答位(即每一帧数据一共有9bit)

2.在IIC总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。

2.6 IIC寻址

在I2C(IIC)通信协议中,寻址是确定要发送或接收数据的目标设备的过程。以下是关于I2C寻址的关键点:

  1. 地址格式:

    • 每个I2C设备都有一个唯一的7位或10位地址。
    • 7位地址是最常见的,但有些设备支持10位地址,这取决于设备的制造商和规范要求。
  2. 地址类型

    • 写地址(写操作):主设备(通常是微控制器)向从设备发送数据。写地址的最低位为0。
    • 读地址(读操作):主设备从从设备接收数据。读地址的最低位为1。
  3. 地址传输

    • 在I2C通信的起始阶段,主设备通过SDA线发送目标设备的地址。
    • 主设备发送一个字节的数据,包括从设备的地址和读写位(最低位),告诉从设备是发送数据还是接收数据。
    • 如果设备支持10位地址,首先发送两个字节的扩展地址,然后再发送读写位。
  4. 地址确认

    • 每当主设备发送完设备地址和读写位后,接收设备会发送一个应答信号(ACK)来确认它被正确地寻址和准备好进行数据传输。
    • 如果没有设备响应(应答),或者设备拒绝通信,则没有应答(NACK)信号被发送,通信将中止或重新尝试。
  5. 多主设备冲突

    • I2C支持多主设备的连接,但是在多主模式下,会出现地址冲突的情况。
    • 主设备在发送地址后,会监视SDA线的状态,如果检测到其他主设备也在发送,则会停止发送,并等待总线空闲。
      总体来说,I2C的寻址过程是通过在总线上发送设备地址和读写位来确定通信目标,确保设备之间可以安全、有效地进行数据传输。

2.7 IIC主机向从机发送数据

S: 主机首先产生START 信号
从设备地址: 然后紧跟着发送一个从机地址 ,这个地址共有7位,紧接着的第8位是数据方向位 (R/W) ,0表示主机发送数据(写),1表示主机接收数据(读)
W: 主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,则认 为自己正在被主机寻址,根据R/T位将自己确定为发送器和接收器
ACK: 这时候主机等待从机的应答信号(A)
数据+ACK :当主机收到应答信号时,发送要访问从机的那个地址, 继续等待从机的应答信号
数据+ACK: 当主机收到应答信号时,发送N个字节的数据,继续等待从机的N次应答信号,
**P:**主机产生停止信号,结束传送过程。

2.8 IIC从机向主机发送数据

**S:**主机首先产生START信号;

**从设备地址:**然后紧跟着发送一个从机地址,注意此时该地址的第8位为0,表明是向从机写命令;

**R:**这时候主机等待从机的应答信号(ACK);

**ACK:**当主机收到应答信号时,发送要访问的地址,继续等待从机的应答信号;

数据+ACK:当主机收到应答信号后,主机要改变通信模式(主机将由发送变为接收,从机将由接收变为发送)所以主机重新发送一个开始start信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为1,表明将主机设置成接收模式开始读取数据;

数据+NACK这时候主机等待从机的应答信号,当主机收到应答信号时,就可以接收1个字节的数据,当接收完成后,主机发送非应答信号,表示不再接收数据;

**P:**主机进而产生停止信号,结束传送过程。

期待批评指正,共同进步!

相关推荐
析木不会编程2 小时前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
枯无穷肉6 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名6776 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式大圣7 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
云山工作室7 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设
嵌入式-老费7 小时前
基于海思soc的智能产品开发(mcu读保护的设置)
单片机·嵌入式硬件
qq_397562319 小时前
MPU6050 , 设置内部低通滤波器,对于输出数据的影响。(简单实验)
单片机
liyinuo20179 小时前
嵌入式(单片机方向)面试题总结
嵌入式硬件·设计模式·面试·设计规范
艺术家天选10 小时前
STM32点亮LED灯
stm32·单片机·嵌入式硬件
向阳逐梦10 小时前
基于STM32F4单片机实现ROS机器人主板
stm32·单片机·机器人