什么是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 小时前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen3 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
森焱森5 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白5 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D6 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术9 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt9 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘9 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang9 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c
几个几个n12 小时前
STM32-第二节-GPIO输入(按键,传感器)
单片机·嵌入式硬件