当前位置:文档之家› I2C协议

I2C协议

I2C总线规范

目录

1序言 (3)

1.1 版本1.0-1992 (3)

1.2 版本2.0-1998 (3)

1.3 版本2.1-2000 (3)

1.4 购买Philips的I2C总线元件 (3)

2I2C总线使设计人员和厂商都得益 (3)

2.1 设计人员的得益 (4)

2.2 厂商的得益 (5)

3介绍I2C总线规范 (6)

4I2C总线的概念 (6)

5总体特征 (7)

6位传输 (7)

6.1 数据的有效性 (7)

6.2 起始和停止条件 (8)

7传输数据 (9)

7.1 字节格式 (9)

7.2 响应 (9)

8仲裁和时钟发生 (10)

8.1 同步 (10)

8.2 仲裁 (10)

8.3 用时钟同步机制作为握手 (11)

97位的地址格式 (12)

107位寻址 (13)

10.1 第一个字节的位定义 (13)

10.1.1 广播呼叫地址 (14)

10.1.2 起始字节 (15)

10.1.3 CBUS的兼容性 (16)

11标准模式I2C总线规范的扩展 (16)

12快速模式 (17)

13Hs模式 (17)

13.1 高速传输 (17)

13.2 Hs模式的串行数据传输格式 (19)

13.3 从F/S模式切换到Hs模式以及返回 (20)

13.4 低速模式中的快速模式器件 (21)

13.5 串行总线系统的混合速度模式 (21)

13.5.1 在混合速度总线系统中的F/S模式传输 (22)

13.5.2 在混合速度总线系统中的Hs模式传输 (22)

13.5.3 混合速度总线系统中电桥的时序要求 (24)

1410位寻址 (24)

14.1 头两个字节位的定义 (24)

14.2 10位寻址的格式 (24)

14.3 广播呼叫地址和10位寻址的起始字节 (26)

15I/O级和总线线路的电气规范和时序 (26)

15.1 标准和快速模式器件 (26)

15.2 Hs模式器件 (28)

16I2C总线器件到总线线路的电气连接 (30)

16.1 标准模式I2C总线器件电阻R p和R S的最大和最小值 (31)

17应用信息 (33)

17.1 快速模式I2C总线器件的斜率控制输出级 (33)

17.2 快速模式I2C总线器件的开关上拉电路 (34)

17.3 总线线路的配线方式 (34)

17.4 快速模式I2C总线器件电阻R p和R S的最大和最小值 (35)

17.5 Hs模式I2C总线器件的电阻R p和R S的最大和最小值 (35)

18F/S模式I2C总线系统的双向电平转换器 (35)

18.1 连接逻辑电平不同的器件 (36)

18.1.1 电平转换器的操作 (36)

19Philips提供的开发工具 (37)

20支持的文献 (37)

1序言

1.1 版本1.0-1992

1992 I2C总线规范的这个版本有以下的修正

? 删除了用软件编程从机地址的内容因为实现这个功能相当复杂而且不被使用

? 删除了低速模式实际上这个模式是整个I2C总线规范的子集不需要明确地详细说明

? 增加了快速模式它将位速率增加4倍到达400kbit/s快速模式器件都向下兼容即它们可以在0~100kbit/s的I2C总线系统中使用

? 增加了10位寻址允许1024个额外的从机地址

? 快速模式器件的斜率控制和输入滤波改善了EMC性能

注意100kbit/s的I2C总线系统或100kbit/s器件都没有改变

1.2 版本

2.0-1998

I2C总线实际上已经成为一个国际标准在超过100种不同的IC上实现而且得到超过50家公司的许可但是现在的很多应用要求总线速度更高电源电压更低这个更新版的I2C总线规范满足这些要求而且有以下的修正

? 增加了高速模式Hs模式它将位速率增加到3.4Mbit/s Hs模式的器件可以和I2C总线系统中快速和标准模式器件混合使用位速率从0~3.4Mbit/s

? 电源电压是2V或更低的器件的低输出电平和滞后被调整到符合噪声容限的要求而且保持和电源电压更高的器件兼容

? 快速模式输出级的0.6V 6mA要求被删除

? 新器件的固定输入电平被总线电压相关的电平代替

? 增加了双向电平转换器的应用信息

1.3 版本

2.1-2000

I2C总线规范的V2.1版有以下微小的修改

? 在Hs模式的重复起始条件后可以延长时钟信号SCLH见13.2节的图2225和32

? Hs模式中的一些时序参数变得更随意见表6和表7

1.4 购买Philips的I2C总线元件

购买Philips的I2C元件同时传递了一个在Philips的I2C专利下在I2C系统使用元件使系统符合由Philips定义的I2C规范的许可证

2I2C总线使设计人员和厂商都得益

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

统都包括

? 一些智能控制通常是一个单片的微控制器

? 通用电路例如LCD驱动器远程I/O口RAM EEPROM或数据转换器

? 面向应用的电路譬如收音机和视频系统的数字调谐和信号处理电路或者是音频拨号电话的

DTMF发生器

为了使这些相似之处对系统设计者和器件厂商都得益而且使硬件效益最大电路最简单Philips开发了一个简单的双向两线总线实现有效的IC之间控制这个总线就称为Inter IC或I2C总线现在Philips 包括超过150种CMOS和双极性兼容I2C总线的IC可以执行前面提到的三种类型的功能所有符合I2C 总线的器件组合了一个片上接口使器件之间直接通过I2C总线通讯这个设计概念解决了很多在设计数字控制电路时遇到的接口问题

下面是I2C总线的一些特征

? 只要求两条总线线路一条串行数据线SDA一条串行时钟线SCL

? 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地

址主机可以作为主机发送器或主机接收器

? 它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏

? 串行的8位双向数据传输位速率在标准模式下可达100kbit/s快速模式下可达400kbit/s高速模式下可达3.4Mbit/s

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

? 连接到相同总线的IC数量只受到总线的最大电容400pF限制

图1是两个I2C总线应用的例子

2.1 设计人员的得益

符合I2C总线的IC允许系统设计快速向前推进直接从功能结构图到原型此外由于它们直接剪贴到I2C总线没有任何额外的外部接口所以允许简单地通过从或者向总线剪贴或不剪贴IC 来修改或升级原型系统

符合I2C总线的IC还有一些功能特别吸引设计人员

? 结构图的功能模块与实际的IC对应设计快速从结构图向最后的原理图推进

? 不需要设计总线接口因为I2C总线接口已经集成在片上

? 集成的寻址和数据传输协议允许系统完全由软件定义

? 相同类型的IC经常用于很多不同的应用

? 由于设计人员快速熟悉了用兼容I2C总线的IC表示经常使用的功能模块使设计时间减少

? 在系统中增加或删除IC不会影响总线的其他电路

? 故障诊断和调试都很简单故障可被立即寻迹

? 通过聚集一个可再使用的软件模块的库减少软件开发时间

除了这些优点外符合I2C总线的CMOS IC还向设计者在特别吸引的可移植装置和电池供电系统方面提供了特殊的功能

它们都有

? 极低的电流消耗

? 抗高噪声干扰

? 电源电压范围宽

? 工作的温度范围广

图1 I 2

C 应用的两个例子

a 高性能的高度集成电视b

DECT 无绳电话基站

2.2 厂商的得益

符合I 2

C 总线的IC 不只帮助了设计者它们也使设备厂商得到很多益处因为

? 简单的两线串行I 2

C 总线将互联减到最小因此IC 的管脚更少而且PCB 的线路也减少结果使PCB 更小和更便宜

? 完全完整的I 2

C 总线协议不需要地址译码器和其他

胶合逻辑

? I 2

C 总线的多主机功能允许通过外部连接到生产线快速测试和调整最终用户的设备

?

符合I 2

C 总线的IC 提供SO 小型

VSO 超小型以及DIL 封装甚至减少了IC 的空间要求

这些只是一些益处另外兼容I 2

C 总线的IC 通过允许简单地构造设备变量和保持设计是最新的简易升级功能增加了系统设计的灵活性

这样整个装置系列可以围绕一个基本的模型开发

新设备的升级或者

功能增强的模型即扩展的存储器远程控制等等可以简单地通过剪贴相应的IC 到总线上产生如果需要更大的ROM 只需要从我们广泛的IC 中选择一个有更大ROM 的微控制器就可以了由于新的IC 要

取代旧的增加新功能到装置或者提升它的性能只要简单地从总线上移去过时的IC然后换上它的后续IC 就可以了

3介绍I2C总线规范

对于面向8位的数字控制应用譬如那些要求用微控制器的要建立一些设计标准

? 一个完整的系统通常由至少一个微控制器和其他外围器件例如存储器和I/O扩展器组成

? 系统中不同器件的连接成本必须最小

? 执行控制功能的系统不要求高速的数据传输

? 总的效益由选择的器件和互连总线结构的种类决定

产生一个满足这些标准的系统需要一个串行的总线结构尽管串行总线没有并行总线的数据吞吐能力但它们只要很少的配线和IC连接管脚然而总线不仅仅是互连的线还包含系统通讯的所有格式和过程串行总线的器件间通讯必须有某种形式的协议避免所有混乱数据丢失和妨碍信息的可能性快速器

件必须可以和慢速器件通讯系统必须不能基于所连接的器件否则不可能进行修改或改进应当设计一

个过程决定哪些器件何时可以控制总线而且如果有不同时钟速度的器件连接到总线必须定义总线的

时钟源所有这些标准都在I2C总线的规范中

4I2C总线的概念

I2C总线支持任何IC生产过程NMOS CMOS双极性两线――串行数据SDA和串行时钟

SCL线在连接到总线的器件间传递信息每个器件都有一个唯一的地址识别无论是微控制器LCD

驱动器存储器或键盘接口而且都可以作为一个发送器或接收器由器件的功能决定很明显LCD

驱动器只是一个接收器而存储器则既可以接收又可以发送数据除了发送器和接收器外器件在执行数

据传输时也可以被看作是主机或从机见表1主机是初始化总线的数据传输并产生允许传输的时钟信号

的器件此时任何被寻址的器件都被认为是从机

表1 I2C总线术语的定义

术语描述

发送器发送数据到总线的器件

接收器从总线接收数据的器件

主机初始化发送产生时钟信号和终止发送的器件

从机被主机寻址的器件

多主机同时有多于一个主机尝试控制总线但不破坏报文

仲裁是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使报文不被破坏的过程

同步两个或多个器件同步时钟信号的过程

I2C总线是一个多主机的总线这就是说可以连接多于一个能控制总线的器件到总线由于主机通常是微控制器让我们考虑以下数据在两个连接到I2C总线的微控制器之间传输的情况见图2

这突出了I2C总线的主机从机和接收器发送器的关系应当注意的是这些关系不是持久的只由当时数据传输的方向决定传输数据的过程如下

1假设微控制器A要发送信息到微控制器B

? 微控制器A主机寻址微控制器B从机

? 微控制器A主机发送器发送数据到微控制器B从机接收器

? 微控制器A终止传输

2如果微控制器A想从微控制器B接收信息

? 微控制器A主机寻址微控制器B从机

? 微控制器A 主机

接收器

从微控制器B 从机

发送器

接收数据 ?

微控制器A 终止传输

甚至在这种情况下主机

微控制器A 也产生定时而且终止传输

连接多于一个微控制器到I 2

C 总线的可能性意味着超过一个主机可以同时尝试初始化传输数据为了

避免由此产生混乱

发展出一个仲裁过程

它依靠线与连接所有I 2

C 总线接口到I 2

C 总线

如果两个或多个主机尝试发送信息到总线

在其他主机都产生

的情况下

首先产生一个

1

主机将丢失仲裁仲裁时的时钟信号是用线与连接到SCL 线的主机产生的时钟的同步结合关于仲裁的更

详细信息请参考第8

图2 使用两个微控制器的I 2

C 总线配置举例

在I 2

C 总线上产生时钟信号通常是主机器件的责任当在总线上传输数据时每个主机产生自己的时

钟信号

主机发出的总线时钟信号只有在以下的情况才能被改变

慢速的从机器件控制时钟线并延长时钟

信号或者在发生仲裁时被另一个主机改变

5

总体特征

SDA 和SCL 都是双向线路

都通过一个电流源或上拉电阻连接到正的电源电压

见图3

当总线空

闲时

这两条线路都是高电平

连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功

能I 2

C 总线上数据的传输速率在标准模式下可达100kbit/s 在快速模式下可达400kbit/s 在高速模式下可达3.4Mbit/s 连接到总线的接口数量只由总线电容是400pF 的限制决定关于高速模式主机器件的信息请参考第13章

6

位传输

由于连接到I 2

C 总线的器件有不同种类的工艺CMOS NMOS 双极性逻辑0低和1

高的电平不是固定的它由V DD 的相关电平决定

见第15章的电气规范每传输一个数据位就产生

一个时钟脉冲

6.1 数据的有效性

SDA 线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在SCL 线的时钟

信号是低电平时才能改变

见图4

DEVICE 1

DEVICE 2

图3 标准模式器件和快速模式器件连接到I 2

C 总线

data line stable;data valid

change of data allowed

SDA

SCL

图4 I 2

C 总线的位传输

6.2 起始和停止条件 在I 2

C 总线中

唯一出现的是被定义为起始S 和停止P 条件见图5的情况

其中一种情况是在SCL 线是高电平时SDA 线从高电平向低电平切换这个情况表示起始条件

当SCL 是高电平时

SDA 线由低电平向高电平切换表示停止条件

起始和停止条件一般由主机产生总线在起始条件后被认为处于忙的状态在停止条件的某段时间后总线被认为再次处于空闲状态总线的空闲状态将在第15章详细说明

如果产生重复起始Sr

条件而不产生停止条件

总线会一直处于忙的状态此时的起始条件

S

和重复起始

Sr

条件在功能上是一样的

见图10

因此在本文档的剩余部分

符号S 将作为一个通用

的术语既表示起始条件又表示重复起始条件除非有特别声明的Sr

如果连接到总线的器件合并了必要的接口硬件那么用它们检测起始和停止条件十分简便

但是没

有这种接口的微控制器在每个时钟周期至少要采样SDA 线两次来判别有没有发生电平切换

SDA

SCL

P

STOP condition

SDA

SCL

S

START condition

图5 起始和停止条件

7传输数据

7.1 字节格式

发送到SDA线上的每个字节必须为8位每次传输可以发送的字节数量不受限制每个字节后必须跟一个响应位首先传输的是数据的最高位MSB见图6如果从机要完成一些其他功能后例如一个

内部中断服务程序才能接收或发送下一个完整的数据字节可以使时钟线SCL保持低电平迫使主机进入等待状态当从机准备好接收下一个数据字节并释放时钟线SCL后数据传输继续

在一些情况下可以用与I2C总线格式不一样的格式例如兼容CBUS的器件甚至在传输一个字

节时用这样的地址起始的报文可以通过产生停止条件来终止此时不会产生响应见10.1.3节

7.2 响应

数据传输必须带响应相关的响应时钟脉冲由主机产生在响应的时钟脉冲期间发送器释放SDA线高

在响应的时钟脉冲期间接收器必须将SDA线拉低使它在这个时钟脉冲的高电平期间保持稳定的低电平见图7当然必须考虑建立和保持时间在第15章详细说明

通常被寻址的接收器在接收到的每个字节后除了用CBUS地址开头的报文必须产生一个响应见10.1.3节

当从机不能响应从机地址时例如它正在执行一些实时函数不能接收或发送从机必须使数据线保持高电平主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输

如果从机接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节主机必须再一次终止传输这个情况用从机在第一个字节后没有产生响应来表示从机使数据线保持高电平主机产生一

个停止或重复起始条件

如果传输中有主机接收器它必须通过在从机不产生时钟的最后一个字节不产生一个响应向从机

发送器通知数据结束从机发送器必须释放数据线允许主机产生一个停止或重复起始条件

图6 I2C总线的数据传输

图7 I 2

C 总线的响应

8仲裁和时钟发生

8.1 同步

所有主机在SCL 线上产生它们自己的时钟来传输I 2

C 总线上的报文

数据只在时钟的高电平周期有效因此

需要一个确定的时钟进行逐位仲裁

时钟同步通过线与连接I 2

C 接口到SCL 线来执行这就是说SCL 线的高到低切换会使器件开始数它们的低电平周期而且一旦器件的时钟变低电平它会使SCL 线保持这种状态直到到达时钟的高电平见图

8

但是如果另一个时钟仍处于低电平周期这个时钟的低到高切换不会改变SCL 线的状态因此

SCL 线被有最长低电平周期的器件保持低电平

此时

低电平周期短的器件会进入高电平的等待状态

C LK 1

CLK 2

SCL

start counting

图8 仲裁过程中的时钟同步

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

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

8.2 仲裁

主机只能在总线空闲的时侯启动传输

两个或多个主机可能在起始条件的最小持续时间

t HD;STA

产生一个起始条件结果在总线上产生一个规定的起始条件

当SCL 线是高电平时仲裁在SDA 线发生这样

在其他主机发送低电平时

发送高电平的主机将

断开它的数据输出级

因为总线上的电平与它自己的电平不相同

仲裁可以持续多位它的第一个阶段是比较地址位有关的寻址信息请参考第10章和第14章

果每个主机都尝试寻址相同的器件仲裁会继续比较数据位如果是主机

发送器

或者比较响应位如

果是主机接收器

因为I 2

C 总线的地址和数据信息由赢得仲裁的主机决定在仲裁过程中不会丢失信息

丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾

由于Hs 模式的主机有一个唯一的8位主机码因此一般在第一个字节就可以结束仲裁见第13

章 如果主机也结合了从机功能而且在寻址阶段丢失仲裁

它很可能就是赢得仲裁的主机在寻址的器件因此

丢失仲裁的主机必须立即切换到它的从机模式

图9显示了两个主机的仲裁过程当然可能包含更多的内容由连接到总线的主机数量决定此时

产生DATA1的主机的内部数据电平与SDA 线的实际电平有一些差别如果关断数据输出这就意味着总

线连接了一个高输出电平

这不会影响由赢得仲裁的主机初始化的数据传输

DATA 1

DATA 2

SDA

SCL

图9 两个主机的仲裁过程

由于I 2

C 总线的控制只由地址或主机码以及竞争主机发送的数据决定没有中央主机总线也没有任

何定制的优先权

必须特别注意的是

在串行传输时

当重复起始条件或停止条件发送到I 2

C 总线的时侯仲裁过程仍在进行如果可能产生这样的情况有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件

也就是说

仲裁在不能下面情况之间进行

? 重复起始条件和数据位 ? 停止条件和数据位 ? 重复起始条件和停止条件

从机不被卷入仲裁过程

8.3 用时钟同步机制作为握手 时钟同步机制除了在仲裁过程中使用外还可以用于使能接收器处理字节级或位级的快速数据传输

在字节级的快速传输中器件可以快速接收数据字节

但需要更多时间保存接收到的字节或准备另一

个要发送的字节

然后

从机以一种握手过程

见图6

在接收和响应一个字节后使SCL 线保持低电平

迫使主机进入等待状态直到从机准备好下一个要传输的字节

在位级的快速传输中器件例如对I 2

C 总线有或没有限制的微控制器可以通过延长每个时钟的低电平周期减慢总线时钟

从而

任何主机的速度都可以适配这个器件的内部操作速率

在Hs 模式中握手的功能只能在字节级使用

见第13章

97位的地址格式

数据的传输遵循图10所示的格式在起始条件S后发送了一个从机地址这个地址共有7位紧接着的第8位是数据方向位R/W0表示发送写1表示请求数据读数据传输一般

由主机产生的停止位P终止但是如果主机仍希望在总线上通讯它可以产生重复起始条件Sr

和寻址另一个从机而不是首先产生一个停止条件在这种传输中可能有不同的读写格式结合

图10 完整的数据传输

可能的数据传输格式有

? 主机发送器发送到从机接收器传输的方向不会改变见图11

? 在第一个字节后主机立即读从机见图12在第一次响应时主机发送器变成主机接收

器从机接收器变成从机发送器第一次响应仍由从机产生之前发送了一个不响应信号A

的主机产生停止条件

? 复合格式见图13传输改变方向的时侯起始条件和从机地址都会被重复但R/W位取反

如果主机接收器发送一个重复起始条件它之前应该发送了一个不响应信号A

注意

1复合格式可以用于例如控制一个串行存储器在第一个数据字节期间要写内部存储器的位置

在重复起始条件和从机地址后数据可被传输

2自动增加或减少之前访问的存储器位置等所有决定都由器件的设计者决定

3每个字节都跟着一个响应位在序列中用A或A模块表示

4兼容I2C总线的器件在接收到起始或重复起始条件时必须复位它们的总线逻辑甚至在这些起始条件没有根据正确的格式放置它们也都期望发送从机地址

5起始条件后面立即跟着一个停止条件报文为空是一个不合法的格式

图11 主机发送器用7位地址寻址从机接收器传输方向不变

图12 在第一个字节后主机立即读从机

图13 复合格式

107位寻址

I2C总线的寻址过程是通常在起始条件后的第一个字节决定了主机选择哪一个从机例外的情况是可以寻址所有器件的广播呼叫地址使用这个地址时理论上所有器件都会发出一个响应但是也可以

使器件忽略这个地址广播呼叫地址的第二个字节定义了要采取的行动这个过程将在10.1.1节详细介绍有关10位寻址的信息请参考第14章

10.1 第一个字节的位定义

第一个字节的头7位组成了从机地址见图14最低位LSB是第8位它决定了报文的方向

第一个字节的最低位是0表示主机会写信息到被选中的从机1表示主机会向从机读信息

当发送了一个地址后系统中的每个器件都在起始条件后将头7位与它自己的地址比较如果一样器件会任务它被主机寻址至于是从机接收器还是从机发送器都由R/W位决定

图14 起始条件后的第一个字节

从机地址由一个固定和一个可编程的部分构成由于很可能在一个系统中有几个同样的器件从机地址的可编程部分使最大数量的这些器件可以连接到I2C总线上器件可编程地址位的数量由它可使用的管脚决定例如如果器件有4个固定的和3个可编程的地址位那么相同的总线上共可以连接8个相同的器件

I2C总线委员会协调I2C地址的分配进一步的信息可以从最后列出的Philips代理商处获得保留的两组8位地址0000XXX和1111XXX的用途见表2从机地址的11110XX位组合保留给10位寻址见第14章

表2 第一个字节中位的定义 1

地址2

保留给不同的总线格式3

1 没有器件允许在接收到起始字节后响应

2 CBUS 地址已被保留使可以在相同的系统内部混合兼容CBUS 和兼容I 2

C 总线的器件接收到这

个地址时

兼容I 2

C 总线的器件不能响应

3 保留给不同总线格式的地址包括使能I 2

C 和其他协议混合只有可以在这种格式和协议下工作兼容I 2

C 总线的器件才能响应这个地址

10.1.1 广播呼叫地址

广播呼叫地址是用来寻址连接到I 2

C 总线上的每个器件但是如果器件在广播呼叫结构中不需要任

何数据

它可以通过不发出响应来忽略这个地址

如果器件要求从广播呼叫地址得到数据

它会响应这个地址并作为从机接收器运转

第二个和接下来的字节会被能处理这些数据的每个从机

接收器响应广

播呼叫地址的含意通常在第二个字节说明

见图15

这里要考虑两种情况

? 当最低位B 是0

? 当最低位B 是

1

LS B

second byte

A

X

X

X X

X

X

X

B A

first byte

(general call address)

图15 广播呼叫地址格式

当位B 是0

第二个字节的定义如下

?

00000110

H 06

通过硬件写入和复位从机地址的可编程部分

接收到这个两字节序列时

所有打算响应这个广播呼叫地址的器件将复位并接受它们地址的可编程部分要采取预防措施确

保器件不会在加上电源电压后将SDA 或SCL 线拉低因为这些低电平会阻塞总线

? 00000100H 04通过硬件写从机地址的可编程部分所有通过硬件定义地址可编程部分和

响应广播呼叫地址的器件会在接收这两个字节序列时锁存可编程的部分

器件不会复位

? 00000000

H 00

这个代码不允许在第二个字节使用

编程过程的顺序请参考相应器件的数据表 剩下的代码没有被确定器件必须忽略它们

当位B 是1时这个两字节序列是一个硬件广播呼叫

即序列由一个硬件主机器件发送例如

键盘扫描器它们不能编程来发送一个期望的从机地址由于硬件主机预先不知道报文要传输给哪个器件

它只能产生这个硬件广播呼叫和它自己的地址让系统识别它见图16

第二个字节中剩下的7位是硬件主机的地址这个地址被一个连接到总线的智能器件识别例如微控制器并指引硬件主机的信息如果硬件主机也可以作为从机它的从机地址和主机地址一样

图16 硬件主机发送器的数据传输

在一些系统中可以选择在系统复位后在从机接收器模式中设置硬件主机发送器这样系统的配

置主机可以告诉硬件主机发送器现在处于从机接收器模式数据必须发送到哪个地址见图17这个

编程过程后硬件主机仍处于主机发送器模式

10.1.2 起始字节

微控制器可以用两种方法连接到I2C总线有片上硬件I2C总线接口的微控制器可被编程为只由总线的请求中断当器件没有这种接口时它必须经常通过软件监控总线很显然微控制器监控或查询总线

的次数越多用于执行自己功能的时间越少

因此快速硬件器件和相关的依靠查询的慢速微控制器有速度差别

此时数据传输前应有一个比正常时间长的起始过程见图18起始过程包括

? 起始条件S

? 起始字节00000001

? 响应时钟脉冲ACK

? 重复起始条件Sr

图17 由可以直接转储数据到从机器件的硬件发送器

a)配置主机发送转储地址到硬件主机

b)硬件主机转储数据到选中的从机

S

9821Sr

7ACK

dummy acknowledge (HIGH)

SDA

SCL

图18 起始字节过程

在要求总线访问的主机发送起始条件S 后

发送起始字节

00000001因此

另一个微控制器可以

采样以低采样速率采样SDA

线直到在启动字节检测到7个0在SDA 线检测到这个低电平后微控制

器切换到一个更高的采样速率寻找用于同步的重复起始条件Sr

接收到重复起始条件

Sr 后硬件接收器会复位从而忽略了起始字节

在起始字节后产生一个相关的响应时钟脉冲这只在遵守总线的字节处理格式时出现

没有器件允许

响应起始字节

10.1.3 CBUS 的兼容性

CBUS 接收器可以连接到标准模式的I 2

C 总线但是必须连接第三条叫DLEN 的线

而且要省略响

应位

通常

I 2

C 的传输是8位的字节序列

兼容CBUS 的器件有不同的格式

在混合的总线结构中I 2

C 总线器件必须不能响应CBUS

的报文因此保留了一个兼容I 2

C 总线器

件不会相应的特殊CBUS 地址0000001X

发送

CBUS 地址后DLEN 线被激活

发送CBUS 格式的

报文见图19

在停止条件后

所有器件再次准备好接收数据

主机

发送器可以在发送CBUS 地址后发送CBUS 格式

传输由能被所有器件识别的停止条件结束

注意如果已知CBUS 配置而且不能预见CBUS 兼容器件的扩展设计者允许根据所用器件的特殊要求调整保持时间

S P STOP condition

CBUS load pulse

n - data bits

CBUS address

START condition

R/W bit

ACK related clock pulse

SDA

SCL

DLEN

图19 CBUS 发送器

接收器的数据传输格式

11

标准模式I 2C 总线规范的扩展

标准模式I 2

C 总线规范在80年代的初期已经存在它规定数据传输速率可高达100kbit/s 而且7位寻址这个概念在普及中迅速成长今天它已经作为一个标准被全世界接受而且Philips Semiconductors

和其他供应商提供了几百种不同的兼容IC 为了符合更高速度的要求以及制造更多可使用的从机地址给数

量不断增长的新器件

标准模式I

2

C 总线规范不断升级到今天它提供了以下的扩展

? 快速模式

位速率高达400kbit/s

? 高速模式Hs

模式

位速率高达3.4Mbit/s

?

10位寻址

允许使用高达1024个额外的从机地址

扩展I2C总线规范主要有两个原因

? 现在很多应用需要传输大量的串行数据要求的位速率远远超过100kbit/s标准模式或者甚至是400kbit/s快速模式半导体技术持续改进的结果使I2C总线器件现在可以使用高达

3.4Mbit/s Hs模式的位速率而且接口电路的生产成本没有任何明显的提高

? 由于使用7位寻址策略的大多数112地址能被立即分配很显然要求更多地址结合来防止为新器件分配从机地址的问题这个问题可以用新的10位寻址策略解决它允许可使用的地址成10倍增长

带有快速或Hs模式I2C总线接口的新从机器件可以有7位或10位的从机地址如果可能的话首选7位地址因为它是最便宜的硬件解决方案而且报文长度最短有7位和10位地址的器件可以在相同的I2C总线系统中混合使用不需要考虑它是F/S模式还是Hs模式的系统现有的和未来的主机都能产生7位或10位的地址

12快速模式

已经在标准模式I2C总线规范提出的协议格式逻辑电平和SDA以及SCL线的最大电容负载在快速模式I2C总线规范都没有修改带I2C总线接口的新器件必须至少符合快速模式或Hs模式规范的最小要求见第13章

快速模式器件可以在400kbit/s下接收和发送最小要求是它们可以和400kbit/s传输同步可以延长SCL信号的低电平周期来减慢传输快速模式器件都向下兼容可以和标准模式器件在0~100kbit/s的I2C总线系统通讯但是由于标准模式器件不向上兼容所以不能在快速模式I2C总线系统中工作因为它们不能跟上这么快的传输速率因而会产生不可预料的状态

快速模式I2C总线规范与标准模式相比有以下额外的特征

? 最大位速率增加到400kbit/s

? 调整了串行数据SDA和串行时钟SCL信号的时序没有必要与其他总线系统例如CBUS 兼容它们不能在增加的位速率下工作

? 快速模式器件的输入有抑制毛刺的功能SDA和SCL输入有Schmitt触发器

? 快速模式器件的输出缓冲器对SDA和SCL信号的下降沿有斜率控制功能

? 如果快速模式器件的电源电压被关断SDA和SCL的I/O管脚必须悬空不能阻塞总线

? 连接到总线的外部上拉器件必须调整以适应快速模式I2C总线更短的最大允许上升时间对于负载最大是200pF的总线每条总线的上拉器件可以是一个电阻对于负载在200pF~400pF之间的总线上拉器件可以是一个电流源最大值3mA或者是一个开关电阻电路见图43

13Hs模式

高速模式Hs模式器件对I2C总线的传输速度有具大的突破Hs模式器件可以在高达3.4Mbit/s的位速率下传输信息而且保持完全向下兼容快速模式或标准模式F/S模式器件也就是说它们可以在

一个速度混合的总线系统中双向通讯Hs模式传输除了不执行仲裁和时钟同步外与F/S模式系统有相同的串行总线协议和数据格式虽然Hs模式器件是首选的器件它们可以在大量的应用中使用但是新器件有没有快速或Hs模式I2C总线接口由应用决定

13.1 高速传输

要获得位速率高达3.4Mbit/s的传输对正常的I2C总线规范要作出以下的改进

? Hs模式主机器件有一个SDAH信号的开漏输出缓冲器和一个在SCLH输出的开漏极下拉和电流源上拉电路1这个电流源电路缩短了SCLH信号的上升时间任何时侯在Hs模式只有一个主机的电流源有效

? 在多主机系统的Hs 模式中不执行仲裁和时钟同步以加速位处理能力仲裁过程一般在前面

用F/S

模式传输主机码后结束

? Hs 模式主机器件以高电平和低电平是1:2的比率产生一个串行时钟信号解除了建立和保持时间的时序要求

?

还可以选择Hs 模式器件有内建的电桥1

在Hs 模式传输中Hs 模式器件的高速数据

SDAH

和高速串行时钟

SCLH 线通过这个电桥与F/S 模式器件的SDA 和SCL 线分隔开来减轻了

SDAH 和SCLH 线的电容负载使上升和下降时间更快

?

Hs 模式从机器件与F/S 从机器件的唯一差别是它们工作的速度Hs 模式从机在SCLH 和SDAH 输出有开漏输出的缓冲器SCLH 管脚可选的下拉晶体管可以用于拉长SCLH 信号的低电平但只允许在Hs

模式传输的响应位后进行

? Hs 模式器件的输出可以抑制毛刺而且SDAH 和SCLH 输出有一个Schmitt

触发器

?

Hs 模式器件的输出缓冲器对SDAH 和SCLH

信号的下降沿有斜率控制功能

图20是只有Hs 模式器件的系统的物理I 2

C 总线配置主机器件的SDA 和SCL 管脚只在速度混合的总线系统中使用在只有Hs 模式的系统中不需要连接

此时

这些管脚有其他功能

可选的串连电阻R S 保护I 2

C 总线器件的I/O 级

防止总线上高电压的毛刺影响I/O 级并将振荡和干扰

减到最小

上拉电阻R p 使SDAH 和SCLH 线在总线空闲的时侯保持高电平并确保信号在要求的上升时间内从

低电平变成高电平对于电容负载很高>100pF 的总线线路为了符合上升时间的要求可以用外部上

拉电流源代替R p

除非跟着一个响应位

Hs 模式传输的SCLH 时钟脉冲上升时间被激活主机的内部电流

源上拉电路MCS

缩短

SLAVE

MASTER/SLAVE

SLAVE

MASTER/SLAVE

(1)这里不使用SDA 和SCL 它们可作其他用途

(2)到输入滤波器

(3)只有激活的主机能使用它的电流源上拉电路 (4)虚线的晶体管是可选的开漏输出

可以延长串行时钟信号SCLH

图20 只有Hs 模式器件的I 2

C 总线配置

13.2 Hs模式的串行数据传输格式

Hs模式的串行数据传输格式符合标准模式I2C总线规范Hs模式只能在下面的情况下所有都在F/S 模式启动

1起始条件S

28位的主机码00001XXX

3不响应位A

图21和22详细地显示了这些情况主机码有两个主要的功能

? 它允许在F/S模式速度下竞争主机之间仲裁和同步结果得到一个获胜的主机

? 它表示Hs模式传输的开始

Hs主机码是保留的8位代码它不用于从机寻址或其他目的而且由于每个主机都有唯一的主机码I2C总线系统最多可以有8个Hs模式主机主机码0000 1000应保留作测试和诊断用Hs模式主机器件的主机码是软件可编程的由系统设计者决定

仲裁和时钟同步只在获胜主机仍然激活传输主机码和不响应位A时发生主机码向其他器件表示开始Hs模式传输而且连接的器件必须符合Hs模式规范由于不允许器件响应主机码主机码后面应跟着不响应位A

在不响应位A后而且SCLH线被上拉到高电平时激活的主机切换到Hs模式并使能在t H

见图22SCLH信号的电流源上拉电路由于另一个器件通过延长SCLH信号的低电平周期可以拉长t

H 前的串行传输当所有器件释放了SCLH线而且SCLH信号到达高电平时激活的主机使能它的电流源上拉电路因此加速了SCLH信号最后部分的上升时间

然后激活的主机发送一个重复起始条件Sr接着是7位从机地址或者10位从机地址见第14

章和R/W位地址并从选中的从机接收到一个响应位A

在重复起始条件和每个响应位A和不响应位A后激活的主机禁能它的电流源上拉电路使

能其他器件通过延长SCLH信号的低电平周期延长串行传输当所有器件释放而且SCLH信号到达高电平激活的主机再次使能它的电流源上拉电路加速SCLH信号上升时间的最后部分

在下一个重复起始条件Sr后数据传输仍处于Hs模式它只会在停止条件P后返回F/S模式为了减少主机码的额外开销主机可能连接由重复起始条件Sr分隔的大量Hs模式传输

图21 Hs模式的数据传输格式

= MCS current source pull-up = Rp resistor pull-up

图22 完整的Hs 模式传输

13.3 从F/S 模式切换到Hs 模式以及返回

复位和初始化后Hs 模式器件必须处于快速模式实际上是F/S 模式因为快速模式向下兼容标准模式

每个Hs 模式器件可以从快速模式切换到Hs 模式以及相反由I 2

C 总线的串行传输控制

在图22的时间t 1前每个连接的器件都在快速模式下工作时间t 1和t H 之间

任何器件都可以延长这个时间间隔

每个连接的器件必须识别S 00001XXX A 序列而且要将内部电路从快速模式设置切

换到Hs 模式设置

时间t 1和t H 之间连接的主机和从机器件由下面的行为执行切换

激活获胜的主机

1根据Hs 模式的毛刺抑制要求调整SDAH 和SCLH 的输入滤波器

2根据Hs 模式的要求调整建立和保持时间

3根据Hs 模式的要求调整SDAH 和SCLH 输出级的斜率控制

4要求在时间t H 后切换到Hs 模式位速率

5在时间t H 使能SCLH 输出级的电流源上拉电路

不激活或丢失仲裁的主机 1根据Hs 模式的毛刺抑制要求调整SDAH 和SCLH 的输入滤波器

2当总线再次空闲时

等待检测停止条件

所有从机

1根据Hs 模式的毛刺抑制要求调整SDAH 和SCLH 的输入滤波器

2根据Hs 模式的要求调整建立和保持时间这个要求可能已被调整输入滤波器满足

3如果有必要调整SDAH 输出级的斜率控制

对于从机器件

斜率控制只能应用到SDAH 输出级

基于电路的容差快速模式和Hs 模式的要求可能不用切换内部电路就能满足

在图22的t FS 时间每个连接的器件必须识别停止条件P 并在t 1时间前将内部电路从Hs 模式设置

实验八 IIC通信协议

实验八I2C通信协议 一、实验目的: 1、培养学生阅读资料的能力; 2、加深学生对I2C总线通信协议的理解; 3、加强学生对模块化编程的理解; 二、实验环境: 1、硬件环境:PC机一台、单片机实验板一块、母头串口交叉线、USB电源线; 2、软件环境:keil uVision2集成开发环境; STC-ISP下载上位机软件; 三、实验原理: 要学会I2C通信协议的编程,关键是要看懂并掌握其时序图,理解对I2C通信协议相关子程序的实验编写。I2C通信协议的总线时序图如下所示: I2C总线时序图 I2C相关子程序的详细介绍 1、起始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 2、结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 起始信号和结束信号的时序图如下所示: 起始信号和结束信号的时序图 起始信号的流程如下:

1、SCL和SDA拉高,保持时间约为0.6us-4us; 2、拉低SDA,保持时间为约为0.6us-4us; 3、拉低时钟线 结束信号的流程如下: 1、SCL置高电平,SDA置低电平,保持时间约为0.6us-4us 2、SDA拉高,保持时间约为1.2-4us; 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。 若未收到应答信号,由判断为受控单元出现故障。应答信号的时序图如下所示: 应答时序图 发送时的应答信号 ;**********应答信号********** ACK: SETB SDA ;数据线置高 SETB SCL ;时钟线置高 ACALL DELAY JB SDA,$ ;等待数据线变低 ACALL DELAY CLR SCL ;时钟线置低 RET 注意:这里如果数据线一直为高将进入死循环,所以一般我们都会在这做一个容错的处理。具体的程序如下: ACK: MOV R4,#00H SETB SDA SETB SCL LOP0: JNB SDA,LOP DJNZ R4,LOP0 ;循环255次 LOP: ACALL DEL CLR SCL RET 接收时的应答信号

简单的I2C协议理解 i2c程序(调试通过)

简单的I2C协议理解 一. 技术性能: 工作速率有100K和400K两种; 支持多机通讯; 支持多主控模块,但同一时刻只允许有一个主控; 由数据线SDA和时钟SCL构成的串行总线; 每个电路和模块都有唯一的地址; 每个器件可以使用独立电源 二. 基本工作原理: 以启动信号START来掌管总线,以停止信号STOP来释放总线; 每次通讯以START开始,以STOP结束; 启动信号START后紧接着发送一个地址字节,其中7位为被控器件的地址码,一位为读/写控制位R/W,R /W位为0表示由主控向被控器件写数据,R/W为1表示由主控向被控器件读数据; 当被控器件检测到收到的地址与自己的地址相同时,在第9个时钟期间反馈应答信号; 每个数据字节在传送时都是高位(MSB)在前; 写通讯过程: 1. 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线; 2. 发送一个地址字节(包括7位地址码和一位R/W); 3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK); 4. 主控收到ACK后开始发送第一个数据字节; 5. 被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束; 6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线; 读通讯过程: 1. 主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线; 2. 发送一个地址字节(包括7位地址码和一位R/W); 3. 当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信

号(ACK); 4. 主控收到ACK后释放数据总线,开始接收第一个数据字节; 5. 主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束; 6. 主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线; 四. 总线信号时序分析 1. 总线空闲状态 SDA和SCL两条信号线都处于高电平,即总线上所有的器件都释放总线,两条信号线各自的上拉电阻把电平拉高; 2. 启动信号START 时钟信号SCL保持高电平,数据信号SDA的电平被拉低(即负跳变)。启动信号必须是跳变信号,而且在建立该信号前必修保证总线处于空闲状态; 3. 停止信号STOP 时钟信号SCL保持高电平,数据线被释放,使得SDA返回高电平(即正跳变),停止信号也必须是跳变信号。 4. 数据传送 SCL线呈现高电平期间,SDA线上的电平必须保持稳定,低电平表示0(此时的线电压为地电压),高电平表示1(此时的电压由元器件的VDD决定)。只有在SCL线为低电平期间,SDA上的电平允许变化。 5. 应答信号ACK I2C总线的数据都是以字节(8位)的方式传送的,发送器件每发送一个字节之后,在时钟的第9个脉冲期间释放数据总线,由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收。 6. 无应答信号NACK 在时钟的第9个脉冲期间发送器释放数据总线,接收器不拉低数据总线表示一个NACK,NACK有两种用途: a. 一般表示接收器未成功接收数据字节; b. 当接收器是主控器时,它收到最后一个字节后,应发送一个NACK信号,以通知被控发送器结束数据发送,并释放总线,以便主控接收器发送一个停止信号STOP。 五. 寻址约定

I2C 协议标准完全版,很详细

THE I 2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000

CONTENTS 1PREFACE. . . . . . . . . . . . . . . . . . . . . . . . . . .3 1.1Version 1.0 - 1992. . . . . . . . . . . . . . . . . . . . 3 1.2Version 2.0 - 198. . . . . . . . . . . . . . . . . . . . . 3 1.3Version 2.1 - 1999. . . . . . . . . . . . . . . . . . . . 3 1.4Purchase of Philips I2C-bus components . . 3 2THE I2C-BUS BENEFITS DESIGNERS AND MANUFACTURERS. . . . . . . . . . . . . . .4 2.1Designer benefits . . . . . . . . . . . . . . . . . . . . 4 2.2Manufacturer benefits. . . . . . . . . . . . . . . . . 6 3INTRODUCTION TO THE I2C-BUS SPECIFICATION . . . . . . . . . . . . . . . . . . . . .6 4THE I2C-BUS CONCEPT . . . . . . . . . . . . . . .6 5GENERAL CHARACTERISTICS . . . . . . . . .8 6BIT TRANSFER . . . . . . . . . . . . . . . . . . . . . .8 6.1Data validity . . . . . . . . . . . . . . . . . . . . . . . . 8 6.2START and STOP conditions. . . . . . . . . . . 9 7TRANSFERRING DATA. . . . . . . . . . . . . . .10 7.1Byte format . . . . . . . . . . . . . . . . . . . . . . . . 10 7.2Acknowledge. . . . . . . . . . . . . . . . . . . . . . . 10 8ARBITRATION AND CLOCK GENERATION . . . . . . . . . . . . . . . . . . . . . .11 8.1Synchronization . . . . . . . . . . . . . . . . . . . . 11 8.2Arbitration . . . . . . . . . . . . . . . . . . . . . . . . . 12 8.3Use of the clock synchronizing mechanism as a handshake. . . . . . . . . . . 13 9FORMATS WITH 7-BIT ADDRESSES. . . .13 107-BIT ADDRESSING . . . . . . . . . . . . . . . . .15 10.1Definition of bits in the first byte . . . . . . . . 15 10.1.1General call address. . . . . . . . . . . . . . . . . 16 10.1.2START byte . . . . . . . . . . . . . . . . . . . . . . . 17 10.1.3CBUS compatibility. . . . . . . . . . . . . . . . . . 18 11EXTENSIONS TO THE STANDARD- MODE I2C-BUS SPECIFICATION . . . . . . .19 12FAST-MODE. . . . . . . . . . . . . . . . . . . . . . . .19 13Hs-MODE . . . . . . . . . . . . . . . . . . . . . . . . . .20 13.1High speed transfer. . . . . . . . . . . . . . . . . . 20 13.2Serial data transfer format in Hs-mode. . . 21 13.3Switching from F/S- to Hs-mode and back . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2313.4Hs-mode devices at lower speed modes. . 24 13.5Mixed speed modes on one serial bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 13.5.1F/S-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.2Hs-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.3Timing requirements for the bridge in a mixed-speed bus system. . . . . . . . . . . . . . 27 1410-BIT ADDRESSING. . . . . . . . . . . . . . . . 27 14.1Definition of bits in the first two bytes. . . . . 27 14.2Formats with 10-bit addresses. . . . . . . . . . 27 14.3General call address and start byte with 10-bit addressing. . . . . . . . . . . . . . . . . . . . 30 15ELECTRICAL SPECIFICATIONS AND TIMING FOR I/O STAGES AND BUS LINES. . . . . . . . . . . . . . . . . . . . 30 15.1Standard- and Fast-mode devices. . . . . . . 30 15.2Hs-mode devices. . . . . . . . . . . . . . . . . . . . 34 16ELECTRICAL CONNECTIONS OF I2C-BUS DEVICES TO THE BUS LINES . 37 16.1Maximum and minimum values of resistors R p and R s for Standard-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 39 17APPLICATION INFORMATION. . . . . . . . . 41 17.1Slope-controlled output stages of Fast-mode I2C-bus devices. . . . . . . . . . . . 41 17.2Switched pull-up circuit for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 41 17.3Wiring pattern of the bus lines. . . . . . . . . . 42 17.4Maximum and minimum values of resistors R p and R s for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 17.5Maximum and minimum values of resistors R p and R s for Hs-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 18BI-DIRECTIONAL LEVEL SHIFTER FOR F/S-MODE I2C-BUS SYSTEMS . . . . 42 18.1Connecting devices with different logic levels. . . . . . . . . . . . . . . . . . . . . . . . . 43 18.1.1Operation of the level shifter . . . . . . . . . . . 44 19DEVELOPMENT TOOLS AVAILABLE FROM PHILIPS. . . . . . . . . . . . . . . . . . . . . 45 20SUPPORT LITERATURE . . . . . . . . . . . . . 46

I2C总线协议规范 v2.1

THE I2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000

CONTENTS 1PREFACE. . . . . . . . . . . . . . . . . . . . . . . . . . .3 1.1Version 1.0 - 1992. . . . . . . . . . . . . . . . . . . . 3 1.2Version 2.0 - 198. . . . . . . . . . . . . . . . . . . . . 3 1.3Version 2.1 - 1999. . . . . . . . . . . . . . . . . . . . 3 1.4Purchase of Philips I2C-bus components . . 3 2THE I2C-BUS BENEFITS DESIGNERS AND MANUFACTURERS. . . . . . . . . . . . . . .4 2.1Designer benefits . . . . . . . . . . . . . . . . . . . . 4 2.2Manufacturer benefits. . . . . . . . . . . . . . . . . 6 3INTRODUCTION TO THE I2C-BUS SPECIFICATION . . . . . . . . . . . . . . . . . . . . .6 4THE I2C-BUS CONCEPT . . . . . . . . . . . . . . .6 5GENERAL CHARACTERISTICS . . . . . . . . .8 6BIT TRANSFER . . . . . . . . . . . . . . . . . . . . . .8 6.1Data validity . . . . . . . . . . . . . . . . . . . . . . . . 8 6.2START and STOP conditions. . . . . . . . . . . 9 7TRANSFERRING DATA. . . . . . . . . . . . . . .10 7.1Byte format . . . . . . . . . . . . . . . . . . . . . . . . 10 7.2Acknowledge. . . . . . . . . . . . . . . . . . . . . . . 10 8ARBITRATION AND CLOCK GENERATION . . . . . . . . . . . . . . . . . . . . . .11 8.1Synchronization . . . . . . . . . . . . . . . . . . . . 11 8.2Arbitration . . . . . . . . . . . . . . . . . . . . . . . . . 12 8.3Use of the clock synchronizing mechanism as a handshake. . . . . . . . . . . 13 9FORMATS WITH 7-BIT ADDRESSES. . . .13 107-BIT ADDRESSING . . . . . . . . . . . . . . . . .15 10.1Definition of bits in the first byte . . . . . . . . 15 10.1.1General call address. . . . . . . . . . . . . . . . . 16 10.1.2START byte . . . . . . . . . . . . . . . . . . . . . . . 17 10.1.3CBUS compatibility. . . . . . . . . . . . . . . . . . 18 11EXTENSIONS TO THE STANDARD- MODE I2C-BUS SPECIFICATION . . . . . . .19 12FAST-MODE. . . . . . . . . . . . . . . . . . . . . . . .19 13Hs-MODE . . . . . . . . . . . . . . . . . . . . . . . . . .20 13.1High speed transfer. . . . . . . . . . . . . . . . . . 20 13.2Serial data transfer format in Hs-mode. . . 21 13.3Switching from F/S- to Hs-mode and back . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2313.4Hs-mode devices at lower speed modes. . 24 13.5Mixed speed modes on one serial bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 13.5.1F/S-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.2Hs-mode transfer in a mixed-speed bus system. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 13.5.3Timing requirements for the bridge in a mixed-speed bus system. . . . . . . . . . . . . . 27 1410-BIT ADDRESSING. . . . . . . . . . . . . . . . 27 14.1Definition of bits in the first two bytes. . . . . 27 14.2Formats with 10-bit addresses. . . . . . . . . . 27 14.3General call address and start byte with 10-bit addressing. . . . . . . . . . . . . . . . . . . . 30 15ELECTRICAL SPECIFICATIONS AND TIMING FOR I/O STAGES AND BUS LINES. . . . . . . . . . . . . . . . . . . . 30 15.1Standard- and Fast-mode devices. . . . . . . 30 15.2Hs-mode devices. . . . . . . . . . . . . . . . . . . . 34 16ELECTRICAL CONNECTIONS OF I2C-BUS DEVICES TO THE BUS LINES . 37 16.1Maximum and minimum values of resistors R p and R s for Standard-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 39 17APPLICATION INFORMATION. . . . . . . . . 41 17.1Slope-controlled output stages of Fast-mode I2C-bus devices. . . . . . . . . . . . 41 17.2Switched pull-up circuit for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 41 17.3Wiring pattern of the bus lines. . . . . . . . . . 42 17.4Maximum and minimum values of resistors R p and R s for Fast-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 17.5Maximum and minimum values of resistors R p and R s for Hs-mode I2C-bus devices . . . . . . . . . . . . . . . . . . . . . 42 18BI-DIRECTIONAL LEVEL SHIFTER FOR F/S-MODE I2C-BUS SYSTEMS . . . . 42 18.1Connecting devices with different logic levels. . . . . . . . . . . . . . . . . . . . . . . . . 43 18.1.1Operation of the level shifter . . . . . . . . . . . 44 19DEVELOPMENT TOOLS AVAILABLE FROM PHILIPS. . . . . . . . . . . . . . . . . . . . . 45 20SUPPORT LITERATURE . . . . . . . . . . . . . 46

关于IIC的通信协议程序

#define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define _BV(bit) (1 << (bit)) #ifndef cbi #define cbi(reg,bit) reg &= ~_BV(bit) #endif #ifndef sbi #define sbi(reg,bit) reg |= _BV(bit) #endif extern uchar dog; /* void delay_1ms(uchar xtal) { uchar i; for(i=0;i<(uint)(143*xtal-2);i++) {;} } //2 延时nms void delay_ms(uchar m, uchar fosc) { uchar i; i=0; while(i

AT24C02数据存储I2C协议-串口通讯

/****************************************** 绿盾电子 X-13 多传感器开发板 功能:实现读写AT24C02型号的EEPROM存储。该类型存储器具有掉电数据保护功能,是单片 机项目开发中常用的芯片。AT24C02使用 I2C总线与的单片机通信,只需两根线即 可完成读写功能。 串口输出数据,串口是单片机程序调试种 最常用最重要的工具。在使用前需要主要 开发板当前晶振频率是否为11.0592MHz,如 不是,请更换晶振,或者自行计算定时器 数值。 时间:2011-8-23 ******************************************/ //头文件 #include "reg51.h" #include //宏定义 #define uchar unsigned char #define uint unsigned int

//引脚定义 sbit Scl= P3^6; //AT24C0x串行时钟sbit Sda= P3^7; //AT24C0x串行数据 //全局变量 uchar EEPROM_WriteBuffer[] = {"http://biz.doczj.com/doc/6716161621.html,"}; uchar EEPROM_ReadBuffer[20]; //函数声明 /******************************************/ //延时子函时, //参数 d_time 控制延时的时间 //作用,灯亮和熄灭必须持续一定时间,人眼才能看到 void delay(unsigned int time); /******************************************/ //延时子函数 //参数范围 0-65536 void delay(unsigned int time) //参数 time 大小 { //决定延时时间长短 while(time--); }

i2c通讯协议及程序

I2C通信协议简介 (2013-01-17 10:48:03) 转载▼ 分类:通讯协议 标签: 杂谈 ACK是acknowledge的意思,确认. 摒弃复杂的情况,这里只对I2C做简单的介绍。 一、I2C 总线的一些特征: ? 只要求两条总线线路一条串行数据线SDA一条串行时钟线SCL ? 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址主机可以作为主机发送器或主机接收器? 它是一个真正的多主机总线如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏 ? 串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s ? 片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整 ? 连接到相同总线的IC 数量只受到总线的最大电容400pF 限制 二、I2C总线在传送数据过程中共有三种类型信号:开始信号、结束信号和应答信号。 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据 起始和结束:

bool I2C_Start(void) { SDA_H; SCL_H; I2C_delay(); if(!SDA_read)return FALSE; // SDA线为低电平则总线忙,退出 SDA_L; // 拉低SDA线(当SCL为高电平时,SDA由高电平向低电平跳变表示开始信号) I2C_delay(); if(SDA_read) return FALSE; // SDA线为高电平则总线出错,退出 SDA_L; //数据为准备好时,拉低SCL线 I2C_delay(); return TRUE; } 发出开始信号之后,设备在数据未准备好时,拉低SCL线,这样主设备可知从设备未发送数据,从设备在数据准备好,可以发送的时候,停止拉低SCL线,这时候才开始真正的数据传输 void I2C_Stop(void) { SCL_L; I2C_delay(); SDA_L; I2C_delay(); SCL_H; // SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据 I2C_delay(); SDA_H; I2C_delay(); }

I2C总线协议程序

C程序代码]I2C总线协议程序 程序代码 2009-10-11 14:05 阅读48 评论0 /**************************************************************** I2C总线协议程序 ****************************************************************/ #define NOP {_nop_();_nop_();_nop_();_nop_();} sbit SDA=P1^2; /*模拟I2C数据传送位*/ sbit SCL=P1^3; /*模拟I2C时钟控制位*/ bit ack; /*应答标志位*/ void Start_I2c() { SDA=1; NOP; SCL=1; NOP; SDA=0; NOP; SCL=0; NOP; } void Stop_I2c() { SDA=0; NOP;

SCL=1; NOP; SDA=1; NOP; } void Senduchar(uchar c) { uchar i; for(i=0;i<8;i++) { c<<=1; SDA=CY; NOP; SCL=1; NOP; SCL=0; NOP; } SDA=1; NOP; SCL=1; NOP; if(SDA==1) ack=0; else ack=1; SCL=0; NOP; } uchar Rcvuchar() {

uchar i,x=0; SDA=1; for(i=0;i<8;i++) { SCL=0; NOP; SCL=1; NOP; x=x<<1; if(SDA) x=x+1; NOP; } SCL=0; NOP; return(x); } void Ack_I2c(bit a) { SDA=a; NOP; SCL=1; NOP; SCL=0; NOP; } bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no) { uchar i;

I2c总线协议

1.I2C协议 2条双向串行线,一条数据线SDA,一条时钟线SCL。 SDA传输数据是大端传输,每次传输8bit,即一字节。 支持多主控(multimastering),任何时间点只能有一个主控。 总线上每个设备都有自己的一个addr,共7个bit,广播地址全0. 系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet。 1.1 I2C位传输 数据传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据bit; 若SDA发生跳变,则用来表示一个会话的开始或结束(后面讲) 数据改变:SCL为低电平时,SDA线才能改变传输的bit 1.2 I2C开始和结束信号 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

1.3 I2C应答信号 Master每发送完8bit数据后等待Slave的ACK。 即在第9个clock,若从IC发ACK,SDA会被拉低。 若没有ACK,SDA会被置高,这会引起Master发生RESTART或STOP流程,如下所示: 1.4 I2C写流程 写寄存器的标准流程为: 1. Master发起START 2. Master发送I2C addr(7bit)和w操作0(1bit),等待ACK 3. Slave发送ACK 4. Master发送regaddr(8bit),等待ACK 5. Slave发送ACK 6. Master发送data(8bit),即要写入寄存器中的数据,等待ACK 7. Slave发送ACK 8. 第6步和第7步可以重复多次,即顺序写多个寄存器

I2C协议代码

此模块包括发送数据及接收数据,应答位发送,并提供了几个直接面对器件的操作函数,能很 方便的与用户程序进行连接并扩展。 需要注意的是,函数是采用延时方法产生SCL 脉冲,对高晶振频率要做一定的修改!! 说明: 1us机器周期,晶振频率要小于12MHz 返回1 则操作成功,返回0 则操作失败。 sla 为器件从地址,suba 为器件子地址。 ************************************************************************* ************/ #include "AT89X52.h" #include #define _Nop() _nop_() //定义空指令 sbit SDA = P1^3; //模拟I2C数据传输位 sbit SCL = P1^2; //模拟I2C时钟控制位 bit bdata I2C_Ack; //应答标志位 /************************************ I2C_Start ************************************ 函数名:void I2C_Start() 入口: 出口: 功能描述:启动I2C总线,即发送I2C初始条件 调用函数: 全局变量: 创建者:陈曦日期:2005-6-15 修改者:日期: ************************************************************************* *********/

void I2C_Start() { SDA = 1; //发送起始条件的数据信号 _Nop(); SCL = 1; _Nop(); //起始条件建立时间大于4.7us,延时 _Nop(); _Nop(); _Nop(); _Nop(); SDA = 0; //发送起始信号 _Nop(); //起始条件建立时间大于4us,延时 _Nop(); _Nop(); _Nop(); _Nop(); SCL = 0; //钳住I2C总线准备发送或接收数据 _Nop(); _Nop(); } /************************************ I2C_Stop ************************************ 函数名:void I2C_Stop() 入口: 出口: 功能描述:结束I2C总线,即发送I2C结束条件 调用函数: 全局变量: 创建者:陈曦日期:2005-6-15 修改者:日期: ************************************************************************* *********/

I2C协议

I2C总线串行接口应用设计 I2C是一种较为常用的串行接口标准,具有协议完善、支持芯片较多和占用I/O线少等优点。I2C总线是PHILIPS公司为有效实现电子器件之间的控制而开发的一种简单的双向两线总线。现在,I2C总线已经成为一个国际标准,在超过100种不同的IC集成电路上实现,得到超过50家公司的许可,应用涉及家电、通信、控制等众多领域,特别是在ARM嵌入式系统开发中得到广泛应用。 1 实例说明 本实例介绍I2C总线接口在ARM中的应用,以及它在ARM平台中的I/O交互拓展能力。 在ARM嵌入式系统开发中,系统和外围设备的信息交换能力非常重要。传统的方式多采用地址和数据总线来完成,但是由于嵌入式系统总线资源的限制,利用有限的I/O接口和足够的通信速度来扩展多功能的外围器件就显得十分必要。I2C总线正好可以满足这一嵌入式系统设计的需要。在嵌入式系统中应用I2C总线,可以在很大程度上简化系统结构,模块化系统电路,而I2C总线上各节点独立的电气特性也可以使整个系统具有最大的灵活性。 2 I2C设计原理 2.1 12G主从模式 I2C采用两根I/O线:一根时钟线(SCL串行时钟线),一根数据线(SDA串行数据线),实现全双工的同步数据通信。I2C总线通过SCL/SDA两根线使挂接到总线上的器件相互进行信息传递。 ARM通过寻址来识别总线上的存储器、LCD驱动器、I/O扩展芯片及其他I2 C总线器件,省去了每个器件的片选线,因而使整个系统的连接极其简洁。总线上的设备分为主设备(ARM处理器)和从设备两种,总线支持多主设备,是一个多主总线,即它可以由多个连接的器件控制。典型的系统构建如图15-1所示。 每一次I2C总线传输都由主设备产生一个起始信号,采用同步串行传送数据,数据接收方每接收一个字节数据后都回应一个应答信号。一次I2C总线传输传送的字节数不受限制,主设备通过产生停止信号来终结总线传输。数据从最高位开始传送,数据在时钟信号高电平时有效。通信双方都可以通过拉低时钟线来暂停该次通信。 2.2 I2C工作原理

I2C总线协议及工作原理

I2C总线协议及工作原理 一、概述 1、I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 SCL:上升沿将数据输入到每个EEPROM器件中;下降沿驱动EEPROM器件输出数据。(边沿触发) SDA:双向数据线,为OD门,与其它任意数量的OD与OC门成"线与"关系。 I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平(SDL=1;SCL=1)。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。 2、主设备与从设备 系统中的所有外围器件都具有一个7位的"从器件专用地址码",其中高4位为器件类型,由生产厂家制定,低3位为器件引脚定义地址,由使用者定义。主控器件通过地址码建立多机通信的机制,因此I2C总线省去了外围器件的片选线,这样无论总线上挂接多少个器件,其系统仍然为简约的二线结构。终端挂载在总线上,有主端和从端之分,主端必须是带有CPU的逻辑模块,在同一总线上同一时刻使能有一个主端,可以有多个从端,从端的数量受地址空间和总线的最大电容400pF的限制。 主端主要用来驱动SCL line; 从设备对主设备产生响应; 二者都可以传输数据,但是从设备不能发起传输,且传输是受到主设备控制的。 二、协议 1.空闲状态 I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。 2.起始位与停止位的定义: 起始信号:当SCL为高期间,SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。 停止信号:当SCL为高期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。 起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。

51单片机i2c协议示例程序

#include #include #define uint unsigned int #define uchar unsigned char sbit sda=P3^5; sbit scl=P3^4; void start_bit(); void stop_bit(); void slave_ack(); void no_ack(); void write_byte(uchar dat); uchar read_byte(); void write_date(uchar addr,uchar date); uchar read_date(uchar addr); void delay(uint x); void main() { uchar num; write_date(0x01,0xaa); delay(2); num=read_date(0x01); P0=num; while(1); } void start_bit() //开始位 { scl=1; _nop_(); sda=1; _nop_(); sda=0; _nop_(); scl=0; } void stop_bit() //停止位

{ sda=0; _nop_(); scl=1; _nop_(); sda=1; } void slave_ack() //应答信号 { _nop_(); _nop_(); scl=0; _nop_();; sda=1; _nop_(); _nop_(); scl=1; _nop_(); _nop_(); while(sda); //P0=0xfe; scl=0; } void no_ack() //无应答 { sda=1; _nop_(); scl=1; _nop_(); scl=0; } void write_byte(uchar dat) //写一个字节{ uchar i; scl=0; for(i=0;i<8;i++) { if(dat&0x80) sda=1; else sda=0;

相关主题