×
嵌入式 > 其他资讯 > 详情

I2C总线详解笔记

发布时间:2020-06-19 发布时间:
|

1. 引言

I2C总线是事实上的世界标准,现在由超过50家公司制造的1000多种不同的IC实现。此外,多功能I2C总线用于各种控制架构,如系统管理总线(SMBus),电源管理总线(PMBus),智能平台管理接口(IPMI),显示数据通道(DDC)和高级电信计算架构(ATCA))。


在消费者电子电讯和工业电子中看上去不相关的设计里经常有很多相似的地方例如几乎每个系统都包括:

为了使这些相似之处对系统设计者和器件厂商都得益而且使硬件效益最大电路最简单Philips (现NXP)开发了一个简单的双向两线总线实现有效的IC 之间控制这个总线就称为Inter IC 或I2C 总线。所有符合I2C总线的器件组合了一个片上接口使器件之间直接通过I2C 总线通讯。


I2C总线是由飞利浦在80年代早期设计开发的,允许在同一电路板上的组件之间轻松通信,一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。飞利浦半导体于2006年迁移至恩智浦。


主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。



2. 特征

只要求两条总线线路:一条串行数据线(serial data line ,SDA),一条串行时钟线(serial clock line , SCL)

每个连接到总线的器件都可以通过唯一的地址和始终存在的简单的主/从机关系进行软件寻址; 主机可以作为主机发送器或主机接收器

它是真正的多主总线,包括冲突检测和仲裁,以防止两个或多个主设备同时启动数据传输时数据损坏。

串行,8位,双向数据传输在标准模式下最高可达100 kbit / s,在快速模式下最高可达400 kbit / s,在快速+模式下最高可达1 Mbit / s, 或高速模式下高达3.4 Mbit / s。

串行,8位,单向数据传输在超快速模式下高达5 Mbit / s

片上的滤波器,可以滤去总线数据线上的毛刺波保证数据完整

可以连接到同一总线的IC数量仅受最大总线电容的限制。 在某些条件下可能允许更大的电容。详见官方参考手册。


3. 规范

I2C 总线是一个多主机的总线这就是说可以连接多于一个能控制总线的器件到总线。如果两个或多个主机尝试发送信息到总线在其他主机都产生0 的情况下首先产生一个1 的主机将丢失仲裁。仲裁时的时钟信号是用线与连接到SCL 线的主机产生的时钟的同步组合。

在I2C总线上生成时钟信号始终是主设备的责任; 在总线上传输数据时,每个主机都会生成自己的时钟信号。 来自主设备的总线时钟信号只有在被慢速从设备按下时钟线或由仲裁发生时由另一个主设备拉伸时才能被改变。 

3.1 SDA 和 SCL 信号

SDA和SCL都是双向线路,通过电流源或上拉电阻连接到正电源电压(见图3)。 当总线空闲时,两条线都是HIGH。 连接到总线的器件的输出级必须具有漏极开路或开路集电极,以执行线与功能。 I2C总线上的数据可以在标准模式下以高达100 kbit / s的速率传输,在快速模式下最高可达400 kbit / s,在快速+模式下最高可达1 Mbit / s或以上 在高速模式下为3.4 Mbit / s。 总线电容限制了连接到总线的接口数量。


对于单个主应用,如果总线上没有可以延长时钟的器件,则主机的SCL输出可以是推挽式驱动器设计。


 3.2 SDA 和 SCL 逻辑电平

由于可以连接到I2C总线的各种不同技术设备(CMOS,NMOS,双极),逻辑“0”(低)和“1”(高)的电平不固定,取决于 相关的VDD电平。 输入参考电平设置为VDD的30%和70%; VIL为0.3VDD,VIH为0.7VDD。 请参见图38,时序图。 一些传统器件输入电平固定为VIL = 1.5 V和VIH = 3.0 V,但所有新器件都需要30%/ 70%的规格。


 3.3 数据的有效性

SDA 线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变。为传输的每个数据位生成一个时钟脉冲。

3.4 START and STOP 条件

所有的传输都是所有事务都以START(S)开始,并由STOP(P)终止(见图5)。


SCL 线是高电平时,SDA 线从高电平向低电平切换,表示起始条件。


当SCL 是高电平时,SDA 线由低电平向高电平切换,表示停止条件。

 起始和停止条件一般由主机产生总线在起始条件后被认为处于忙的状态在停止条件的某段时间后总线被认为再次处于空闲状态。


如果产生重复起始Sr 条件而不产生停止条件总线会一直处于忙的状态此时的起始条件S和重复起始Sr 条件在功能上是一样的,因此在本文档的剩余部分符号S 将作为一个通用的术语既表示起始条件又表示重复起始条件除非有特别声明的Sr。


如果连接到总线的设备包含必要的接口硬件,则可以轻松检测START和STOP条件。 但是,没有这种接口的微控制器必须在每个时钟周期至少两次采样SDA线来检测是否发生电平转换。


3.5 字节格式

发送到SDA 线上的每个字节必须为8 位。每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位MSB (见图6 )。如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL 保持低电平迫使主机进入等待状态。当从机准备好接收下一个数据字节并释放时钟线SCL 后数据传输继续

3.6 Acknowledge (ACK) and Not Acknowledge (NACK) 

响应发生在每个字节之后。 应答位允许接收器向发送器发信号通知该字节已成功接收,并且可以发送另一个字节。 主机产生所有时钟脉冲,包括应答第9个时钟脉冲。


ACK 信号:在响应的时钟脉冲期间,接收器必须将SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平(见图4) 。当然必须考虑建立和保持时间。


NACK信号:当在第9个时钟脉冲期间SDA保持高电平时,这被定义为非应答信号。主设备可以生成STOP条件以中止传输,或者生成重复的START条件以开始新的传输。 导致生成NACK的条件有五个:


1.总线上没有带有发送地址的接收器,因此没有设备响应确认。

2.接收器无法接收或发送,因为它正在执行某些实时功能,并且尚未准备好开始与主站通信。

3.在传输过程中,接收器获取它不理解的数据或命令。

4.在传输过程中,接收器无法再接收数据字节。

5.主接收器必须发信号通知从发送器的传输结束。

3.7 时钟同步

两个主设备可以同时开始在空闲总线上进行传输,并且必须有一种方法来决定哪个控制总线并完成其传输。 这是通过时钟同步和仲裁完成的。 在单主系统中,不需要时钟同步和仲裁。


时钟同步通过线与连接I2C 接口到SCL 线来执行。这就是说SCL 线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使SCL线保持这种状态直到到达时钟的高电平。但是,如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变SCL线的状态。因此,SCL线被有最长低电平周期的器件保持低电平,此时,低电平周期短的器件会进入高电平的等待状态。


 当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平。之后器件时钟和SCL线的状态没有差别。而且所有器件会开始数它们的高电平周期。首先完成高电平周期的器件会再次将SCL线拉低。


这样,产生的同步SCL时钟的低电平周期由低电平时钟周期最长的器件决定,而高电平周期由高电平时钟周期最短的器件决定。


3.8 仲裁

仲裁与同步一样,只有在系统中使用多个主设备时才需要协议的一部分。主机只能在总线空闲的时侯启动传输。两个或多个主机可能在起始条件的最小持续时间(tHD;STA)内产生一个起始条件,结果在总线上产生一个规定的起始条件。


当SCL 线是高电平时,仲裁在SDA 线发生;这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。


仲裁是逐位进行的,在每个位期间,当SCL为高电平时,每个主器件都会检查SDA电平是否与它发送的电平相匹配。 此过程可能需要很多位。 只要传输完全相同,两个主设备实际上可以无错误地完成整个事务。 主设备第一次尝试发送HIGH,但检测到SDA电平为低电平,主机知道它已经丢失仲裁并关闭其SDA输出驱动器。


因为,I2C 总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息。丢失仲裁的主机,可以产生时钟脉冲直到丢失仲裁的该字节末尾。


如果主机也结合了从机功能,而且在寻址阶段丢失仲裁,它很可能就是赢得仲裁

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
用于车载供电的四通道电源管理IC PCB布局指南