标准I2C通信协议

标准I2C通信协议

IIC是一种多主多从两线制半双工串行通信总线,广泛用于微控制器和各种外围设备之间的通信,它使用两条线路:串行数据线(SDA)和串行时钟线(SCL)进行双向数据传输。
在进行通信时,一个器件作为主机(Master)启动总线上的数据传输,并产生时钟信号以允许传输,而另一个(几个)器件作为从机(Slave)对数据传输作出响应。
I2C总线上数据的传输速率在标准模式下可达100kbit/s在快速模式下可达400kbit/s在高速模式下可达3.4Mbit/s,连接到总线的接口数量只由总线电容的限制决定。
在下文中会用到如下定义:

发送器发送数据到总线的设备
接收器发送数据到总线的设备
主机开始传输,产生时钟信号,结束传输的设备
从机被主机寻址的设备


标准I2C协议的特点

一、支持多主多从

IIC的总线通信支持多主机和多从机模式,即可以存在多个主机和多个从机,但是同一时间,只能有一个主机能控制总线,产生时钟信号启动总线上的数据传输,其他从机则监听该总线上的信号。常见的应用中,MCU作为主机,控制多个从设备。
在该系统中,为了区分每一个设备,要求每个I2C设备都通过一个7位或10位的地址来识别,这使得总线上可以连接多个设备,当只有一个主机设备时,主机的地址不需要指定。
在这里插入图片描述

二、线与逻辑

线与逻辑(Wired AND Logic)是一种在数字电路中实现“与”逻辑功能的方法。它通过将多个输出端直接互连来实现逻辑“与”操作。当所有互连的输出端都为高电平时,最终输出才为高电平;只要有一个输出端为低电平,最终输出就为低电平。
在实际应用中,线与逻辑常用于总线传输等场景,需要多个门的输出端并联连接使用。为了避免短路电流和器件损坏,通常使用集电极开路门(OC门)或三态门(TS门)来实现线与逻辑。
在IIC总线中,同样是使用了线与逻辑,因此驱动SDA和SCL线的器件的输出级必须为漏极开路输出或集电极开路,以便执行总线的线“与”功能,使用外接上拉电阻以确保在总线空闲时两条线路能保持高电平状态。

二、标准IIC协议要求

1.数据有效性

IIC协议规定,每传输一个数据位,就会产生一个时钟脉冲。SCL时钟线为高电平期间时,SDA数据线电平必须稳定,此时的数据才有效,即此时的SDA为高电平时表示数据“1”,为低电平时表示数据“0”。当SCL为低电平期间时,SDA数据线上的电平状态才能改变。

如下图所示:
在这里插入图片描述

2.START和STOP信号

IIC通信的传输过程都以START信号开始,以STOP信号结束。

  • 开始信号:当SCL时钟线为高电平时,SDA数据线从高电平到低电平跳变,为开始信号START。
  • 结束信号:当SCL时钟线为高电平时,SDA数据线从低电平到高电平跳变,为结束信号STOP。
    在这里插入图片描述
    START 和 STOP 信号都是由主机生成的。

3.传输的字节格式

数据传输都以字节为单位,每次传输的字节数不受限制,但每传输一个字节必须跟一个应答位。数据按照MSB最高位优先传输。在Figure 6中,如果此时从机的接收任务被中断任务打断,不能继续完成正常的传输,从机可以保持SCL时钟线为低电平,强制主机进入等待状态;当时从机完成中断任务之后,释放SCL时钟线,此时便可以继续完成剩下的数据传输流程。
在这里插入图片描述

4.应答信号

包括 应答 (ACK)非应答 (NACK) 信号
每一个字节都需要应答,应答信号用于通知给发送器,传输的数据已经收到,可以发送下一个字节的数据。主机则继续生成新的时钟脉冲序列,包括应答位在内的九个脉冲,开始下一个字节的数据传输。

  • 应答信号ACK:在第9个应答脉冲期间,发送器会释放SDA数据线,此时接收器把SDA数据线的电平拉低。视为应答信号ACK,表示接收成功。
  • 非应答信号NACK:在第9个应答脉冲期间,若此时SDA数据线的电平仍为高,则定义为非应答信号NACK。此时,主机可以生成STOP信号结束传输过程,或者重新生成START信号开始新的传输。

5.从机地址和读写位

在START信号之后,要发送的第一个字节由从机的7bit地址一个R/W数据方向位组成。若R/W数据方向位为"0",表示该传输是发送的过程,即WRITE的操作,向接收器发送数据。若R/W数据方向位为"1",表示是一个请求数据的过程,即READ的操作,接收数据。

第一个字节

一个IIC的数据传输流程如下所示,从START信号开始,第一个字节为从机地址和R/W数据方向位,之后便是数据的传输,最终以STOP信号结束。如果主机想要重新访问其他地址的设备,主机可以不需要发送STOP信号,直接发起新的START信号即可开始新一轮的数据传输。在一个传输过程中,不单单只是读或写,可以是多种组合

在这里插入图片描述

6.读/写流程示意图

6.1 只进行写操作,传输方向不变

当主机对从机只进行写操作时,传输流程如下所示。

1.主机首先产生START信号。
2.接着第一个字节,发送一个7bit的从机地址,此时的第8位是数据方向位(R/W)为0,0表示主机发送数据(写),1表示主机接收数据(读)。
3.主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,则认为自己正在被主机寻址,根据R/W位将自己确定为发送器和接收器,此时R/W为0,表明从机为接收器,主机为发送器。
4.主机等待从机的应答信号(A)。
5.当主机收到应答信号时,接着开始传输字节数据, 继续等待从机的应答信号,之后每发送一个字节,都将等待接收器的应答,直到写数据接收。
6.如果某一个应答失败(NACK),则由主机提前产生STOP信号,终止传输过程
7.最终主机产生STOP信号,结束传输过程。

在这里插入图片描述

6.2 只进行读操作,传输方向不变

当主机对从机进入读操作时,同样,先发送从机的地址,将R/W标志位设置为1,此时第一个应答位由该字节的接收器(从机)应答,应答成功后,主机变为了接收器,等待接收来自从机的数据,并对之后接收的每一个字节进行应答,直到需要读取的字节数完全收到,之后发送非应答信号,接着STOP信号结束传输。

1.主机首先产生START信号。
2.接着第一个字节,发送一个7bit的从机地址,此时的第8位是数据方向位(R/W)为1,0表示主机发送数据(写),1表示主机接收数据(读)。
3.主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,则认为自己正在被主机寻址,根据R/W位将自己确定为发送器和接收器,此时R/W为1,表明从机为发送器,主机接收器。
4.主机等待从机的应答信号(A)。
5.当主机收到应答信号时,此时主机更改为接收器,等待发送器发送的数据,并对每一个字节进行应答(A)。
6.当主机接收数据完成之后,发送非应答信号(NACK),通知发送器停止数据的发送
7.最后主机产生STOP信号,结束传输过程。
在这里插入图片描述

6.3 读写操作组合流程,传输方向改变

大多数情况下,IIC的操作流程都是先写操作,之后再读操作。比如要读取一个IIC传感器的地址的数据,此时先通过写操作,指定要读取的地址;然后重新产生START信号,设置为读操作,等待传感器的数据发送。

1.主机首先产生START信号。
2.接着第一个字节,发送一个7bit的从机地址和数据方向位(R/W),0表示主机发送数据(写),1表示主机接收数据(读)。
3.主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,则认为自己正在被主机寻址,根据R/W位将自己确定为发送器和接收器。
4.主机等待从机的应答信号(A)。
5.接着主机根据传输数据方向为来进行收发过程,以及相应的应答。
6.之后重新开始START信号,进行新的数据读写流程。
7.最终主机产生STOP信号,结束传输过程。

在这里插入图片描述


资料来源:I2C-bus specification and user manual

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值