I2C通信协议介绍

I2C是本人在实际项目中使用最多的一个通信协议,其只用两条线(SDA和SCL)在连接到总线上的设备之间传送数据。每一个设备都由唯一的地址来识别(不管是MCU、外部sensor、LCD驱动器、存储器或者键盘接口),并且可以依照设备的功能作为发送器或者接收器使用。LCD驱动器可能只是个接收器,而存储器可以发送和接受数据。除了发送器和接收器,当传送数据时设备还可以作为主机或者从机。主机就是初始化数据传输和产生时钟信号的设备,在那个时刻,任何被寻址的设备都是从机。
在这里插入图片描述

SDA和SCL信号
SDA和SCL都是双向线路,通过电流源或者上拉电阻连接到一个正向电压。当总线空闲时,两条线都是高电平.连接到总线的设备的输出级必须是OD(漏极开路)或者OC(集电极开路)门才能执行线与功能.在标准模式下I2C总线传输数据可以达到100kb/s的速度,而在快速模式下达到400kb/s的速度,高速模式下是3.4Mb/s的速度。时钟信号SCL通常是主机设备的责任。
数据有效性
在时钟SCL为高期间SDA线上的数据必须稳定.只有在SCL线上的时钟信号低时数据线才可以改变高低状态.每个数据位传输都需要一个时钟产生。

开始和终止条件
所有的传输都由一个START(S)开始,有一个STOP§终止。
START条件是当SCL高时,SDA从高到低
STOP条件是SCL高时,SDA从低到高
在这里插入图片描述

开始条件和终止条件一直由主机产生。在开始条件后总线就处于忙状态.在终止条件后隔上一个固定时间总线就处于空闲状态.如果没有终止条件产生,而是一个重复的开始条件(Sr),那总线依旧是忙状态.这种情况下S和Sr在功能上是一样的.如果连接到总线的设备包含了必须的接口硬件那么开始条件和终止条件的检测时很容易的.但是没有这样接口的微控制器在每个时钟周期内至少要采样两次SDA线来识别有没有电平变化.
数据传输的字节格式
发送到SDA线上的每个字节必须是8位.每次传输的字节数量是不受限制的.每个字节后必须跟着一个ACK应答位.数据从最高有效位(MSB)开始传输.如果从机要执行一些功能后才能接收或者发送新的完整数据,比如说服务一个内部中断,那么它可以将时钟线SCL拉低来强制使主机进入wait状态.当从机准备好新的字节数据传输时,释放时钟线SCL,数据传输便继续进行.
在这里插入图片描述

ACK和NACK
每个字节后都有ACK发生.ACK应答位允许接收器通知发送器字节成功接收了下一个字节可以发送了.主机产生所有的时钟脉冲,包括应答位的第9个时钟脉冲.
ACK应答信号是如下定义的:在ACK的第9个时钟脉冲中发送器释放SDA线,所以接收器可以将SDA拉低,使得在这个时钟脉冲的高电平期间保证SDA是低电平.建立和保持时间也应该计算在内.
在这里插入图片描述

当在第9个时钟脉冲期间SDA仍然是高,这时定义为NACK信号.这时主机可以产生一个终止条件来终止传输,或者一个重复的开始条件来开始一个新的传输.这里有5中情况导致NACK的产生:
1.总线当前的传输地址上没有接收器,所以没有设备用ACK来响应.
2.因为接收者正在处理一些实时的功能,尚未准备与主机的通信,所以接收者不能收发.
3.在传输期间,接收者收到不能识别的数据或者命令.
4.在传输期间,接收者无法接收更多的数据字节.
5.主-接收器要通知从-发送器传输的结束.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
I2C通信协议是一种串行总线协议,它允许多个设备在同一条总线上进行通信。在I2C总线上,每个设备都有一个唯一的地址,可以通过这个地址与其他设备进行通信。下面是I2C通信协议的详细讲解: 1. 总线结构 I2C总线结构包括两根信号线:SCL和SDA。SCL是时钟线,由主设备负责产生;SDA是数据线,用于传输数据。 2. 通信方式 I2C通信协议主要分为两种方式:传输数据和发送命令。在传输数据时,从设备首先向主设备发送一个应答信号(ACK),主设备接收到应答信号后,才会继续发送数据。在发送命令时,主设备向从设备发送命令并等待从设备的应答信号。 3. 传输数据 在I2C总线上传输数据时,每个字节都由8位二进制数字组成。在传输一个字节之前,主设备必须向从设备发送一个起始信号(Start Bit),表示一个新的传输过程开始了。然后主设备会先发送从设备的地址(包括读/写位),然后等待从设备的应答信号。如果从设备存在,并且它的地址与主设备发送的地址匹配,那么它会发送一个应答信号。接下来主设备会开始发送数据,每发送一个字节就等待从设备的应答信号。当主设备发送完最后一个字节后,它会发送一个停止信号(Stop Bit),表示这次传输已经结束了。 4. 发送命令 在I2C总线上发送命令时,主设备首先向从设备发送命令,并等待从设备的应答信号。如果从设备存在,并且它的地址与主设备发送的地址匹配,那么它会发送一个应答信号。接下来主设备可以向从设备发送一个或多个字节的数据,然后等待从设备的应答信号。当主设备完成数据传输后,它会向从设备发送停止信号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值