Proteus:I2C通信协议

简介

I2C(或IIC)代表IC间通信,是流行的微控制器通信协议之一。I2C通常用于与传感器通信,但也可用于许多其他应用。I2C 是一种同步协议,这意味着它有一条时钟线(有关同步和异步通信的更多信息,请参阅我们关于该主题的文章)。

I2C 通信

虽然 I2C 只使用两条通信线(时钟和数据),但它可以在同一条 I2C 总线上容纳多个设备;这是通过使用寻址方案实现的,总线上的每个设备都有一个唯一的地址。通信开始时,首先要发送通信所针对的设备地址,然后被寻址的设备必须确认它已存在并准备好进行通信。

由于只有一条数据线(SDA - 串行数据)用于发送和接收数据(半双工),因此需要一种方案,使通信中的主设备和从设备都能控制数据线,而不会发生冲突。必须避免总线冲突,即一个设备试图向总线写入高电平,而另一个设备试图向总线写入低电平,这将造成短路。

为了实现这一目标,我们采用了一种开漏方案,即任一设备只能将总线驱动为 "低 "或以其他方式 "释放",而上拉电阻则用于在总线释放时将线路拉高(如果你不熟悉开漏或上拉电阻这两个术语,请参阅我们的相关文章)。时钟线(SCL - 串行时钟)也采用了这种方案,并使用一些创新技术为 I2C 协议添加了一些有用的功能--稍后将详细介绍。

下图说明了 I2C 通信序列的典型特征:

图片

通信开始时,I2C 总线处于空闲状态--时钟线和数据线均无驱动,因此被上拉电阻器拉高。然后,主设备(启动通信的设备)首先将 SDA 线拉高,然后将 SCL 线拉低,从而启动通信--这被定义为启动条件。

接着,主站传输希望与之通信的设备的 7 位地址,然后是一个 "读或写 入"位,表示主站希望向设备写入 (0) 还是从设备读取 (1)。数据线在时钟线的上升沿被视为有效(从设备读取),数据先传输最重要位(MSB)(如果你不熟悉 "最小有效位 "和 "最重要位 "这两个术语,可以本文阅读更多内容)。

地址传输完成后,假定被寻址的从属设备存在于 I2C 总线上,主设备将释放数据线(漏极开路),从属设备将在一个时钟周期内保持数据线低电平,以确认(ack)其存在并准备通信。如果从属设备不在总线上,则上拉电阻会将数据线拉高,主设备就知道从属设备不可用。

在这个阶段,数据可在主站和从站之间传输。如果正在读取数据,则从站将传输数据(同时主站继续驱动时钟线);如果正在写入数据,则主站将传输数据。每个数据字节后都有一个 Ack 位,在此期间,接收器(可能是主站,也可能是从站,取决于哪一方传输数据)应将数据线保持为低电平,以表示它已接收到通信(并已准备好进行下一次通信,如果适用的话。)

时钟拉伸

I2C 总线上的从属设备可以通过将时钟 (SCL) 线保持为低电平来延迟响应(如果它们仍在忙并且尚未准备好响应),这种功能被称为 "时钟拉伸";一旦准备好响应,从属设备就会释放时钟线并继续数据传输。这与 UART 的流量控制线(CTS/RTS)类似,但不需要额外的通信线路(注意 SPI 协议没有流量控制功能)。

图片

一个或多个数据字节可依次传送,每个字节后都会出现一个应答。

图片

重复启动

由于从属设备可能有许多可读取的值(如多个传感器读数值以及设置值),因此从属设备可能要求主设备在进行实际读取之前,首先写入一条指令,说明要读取的内容。在这种情况下,主站将首先发出一条写入指令,其中的数据就是要读取的内容,然后主站将立即发出读取指令。但在这中间不会发出停止,而是主站使用重复启动条件(随后是 7 位地址和 1 位读/写位,显然现在已设置为读取)来实现从写入到读取的切换。要发出重复启动,主站首先将数据线置高,然后将时钟线置低,最后将数据线置低,再将时钟线置高。

图片

数据速率和距离

I2C 总线上的通信速度通常为 100kHz 或 400kHz。这些相对较低的速度可满足少量数据传输的需要,但 SPI(使用 MHz 范围内的时钟,可能采用双模式或四模式)通常是需要传输大量数据的高吞吐量应用的首选。I2C 通常只用于相对较短的通信距离,但也有通过差分对传输 I2C 以实现较长距离通信的方案(有关差分对的更多信息,请参阅我们有关高速设计的文章)。

Proteus 包括一个双模式(主模式或从模式)I2C 协议分析仪,你可以将其放置在原理图上并布线。然后,你就键入 I2C 序列并将其注入到正在运行的仿真中,并可以查看从 I2C 总线上的其他设备接收到的数据包。这是一个出色的教学工具,可以快速、轻松地测试主模式和从模式固件。你会发现许多示例设计都包括与传感器或多处理器项目的 I2C 通信,这些都可以在演示版中进行模拟。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值