什么是IIC通信协议?

目录

1.IIC简介

2.IIC通信协议

2.1 IIC的空闲状态

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

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

2.4 IIC总线上数据有效性

 2.5 IIC总线上数据帧格式

2.6 IIC寻址

2.7 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.5 IIC总线上数据帧格式

        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:主机进而产生停止信号,结束传送过程。

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

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿!=程序员

感谢来过,感谢有你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值