I2C 协议标准(中文版),twi,iic
TWI,IIC总线
采用串行总线技术可以使系统的硬件设计大大简
化、系统的体积减小、可靠性提高。同时,系统 的更改和扩充极为容易。 常用的串行扩展总线有: I2C (Inter IC BUS) 总线、单总线(1-WIRE BUS)、SPI(Serial Peripheral Interface)总线及Microwire/PLUS 等。
c、在传送过程中,当需要改变传送方向时, 起始信号和从机地址都被重复产生一次,但两 次读/写方向位正好反相。
4、总线的寻址
I2C总线协议有明确的规定:采用7位的寻址字节 (寻址字节是起始信号后的第一个字节)。 (1)寻址字节的位定义
D7~D1位组成从机的地址。D0位是数据传送方向位, 为“0”时表示主机向从机写数据,为“1”时表示主机由从 机读数据。
每一个字节必须保证是8位长度。数据传送时,先传 送最高位(MSB),每一个被传送的字节后面都必须跟 随一位应答位(即一帧共有9位)。
由于某种原因从机不对主机寻址信号应答时(如从机 正在进行实时性的处理工作而无法接收总线上的数据), 它必须将数据线置于高电平,而由主机产生一个终止信号 以结束总线的数据传送。 如果从机对主机进行了应答,但在数据传送一段时间后 无法继续接收更多的数据时,从机可以通过对无法接收的 第一个数据字节的“非应答”通知主机,主机则应发出终 止信号以结束数据的继续传送。 当主机接收数据时,它收到最后一个数据字节后,必须 向从机发出一个结束传送的信号。这个信号是由对从机的 “非应答”来实现的。然后,从机释放SDA线,以允许主 机产生终止信号。
两线串行总线概述
两线串行总线采用TWI协议。对外只有两根线。一根数据线SDA,一根时 钟线SCL。可与128个从设备连接。连接方式如图所示:
I2C协议
uchar d;
Start();
Write_A_Byte(0xa1);
d=Read_A_Byte();
NO_ACK();
Stop();
return d;
}
// IIC从从设备的任意地址读取数据
uchar Random_Read(uchar addr)
{
Start();
Write_A_Byte(0xa0);
IIC即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS),IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线。
I2C总线上允许连接多个微处理器以及各种外围设备,如存储器、LED及LCD驱动器、A/D及D/A转换器等。为了保证数据可靠地传送,任一时刻总线只能由某一台主机控制,各微处理器应该在总线空闲时发送启动数据,为了妥善解决多台微处理器同时发送启动数据的传送(总线控制权)冲突,以及决定由哪一台微处理器控制总线的问题,I2C总线允许连接不同传送速率的设备。多台设备之间时钟信号的同步过程称为同步化。
在单主控器的系统中,时钟线仅由主控器驱动,因此可以用51系列的一根I/O线作为SCL的信号线,将其设置为输出方式(即SDA=0);,并由软件控制来产生串行时钟信号。在实际系统中使用了P1.3。另一根I/O线P1.2作为I2C总线的串行数据线SDA,可在软件控制下只能在时钟SCL的低电平期间读取或输出数据。系统传输数据的过程如下:先由单片机发出一个启始数据信号,接着送出要访问器件的7位地址数据,并等待被控器件的应答信号。当收到应答信号后,根据访问要求进行相应的操作。如果是读入数据,则数据线可一直设为输入方式,中间不需要改变SDA线的工作方式,每读入一个字节均应依次检测应答信号;如果是输出数据,则首先将SDA设置为输出方式,当发送完一个字节后,需要改变SDA线为输入方式,此时读入被控器件的应答信号就完成了一个字节的传送。当所有数据传输完毕后,应向SDA发出一个停止信号,以结束该次数据传输。
i2c 标准
i2c 标准I2C总线是一个串行通信总线,它允许多个设备之间在短距离内双向通信。
I2C总线使用两根信号线:时钟线(SCL)和数据线(SDA),它们都是开漏输出。
I2C标准由日本的NXP Semiconductors(前Philips Semiconductors)开发,最初是一种内部通信协议,用于连接母板和各种附属芯片,例如EEPROM、传感器和控制器等。
现在已成为众多微控制器、传感器和其他设备之间通信的常用标准。
I2C总线由两个设备类型组成:主机和从机。
主机控制总线并发出信号,从机在接收到信号时响应。
I2C总线可以通过地址识别来支持多个从机设备。
I2C总线传输数据时使用的是字节流,每个字节由8位组成,包括7位数据和1位校验。
I2C总线支持不同的数据传输速率,最高可达400Khz。
I2C总线是一个轻量级协议,它非常灵活和可扩展。
由于总线上的每个设备都有独特的地址,它可以连接多达112个设备。
此外,I2C总线不需要额外的线路,仅使用两根线就可以完成通信。
I2C总线标准具有以下几个重要特性:1. 灵活性I2C总线对于新硬件设备非常灵活,可以在现有配置中添加或删除设备,而不会影响其他设备的工作。
这使得I2C总线成为工业和自动化系统中控制器和传感器等各种设备之间通信的理想选择。
2. 数据安全I2C总线在数据传输过程中使用了CRC校验和,从而保证了数据传输的安全性。
此外,它还支持差错校正码(ECC)技术,确保数据在传输过程中不会丢失或被损坏。
3. 轻量级和低功耗I2C总线是一种轻量级协议,它不需要额外的线缆或接口。
此外,由于它是一个串行通信总线,而不是一个并行总线,因此它消耗的电能也比其他总线低。
4. 硬件和软件兼容性I2C总线在各种硬件平台和操作系统中都有很好的兼容性。
它支持各种软件协议、API 和操作系统,因此很容易与各种开发环境和框架集成。
总之,I2C总线是一种优秀的通信标准,具有灵活性、数据安全、轻量级和低功耗、硬件和软件兼容性等优点。
iic协议讲解
iic协议讲解
IIC(I2C)是一种用于在电子设备之间进行通信的串行通信协议。
IIC全称是Inter-Integrated Circuit,通常也称作I2C(Inter-IC,简称2-wire)。
由飞利浦(Philips)公司在20世纪80年代初开发并发布。
IIC协议使用双线制(SDA和SCL线)进行通信,其中SDA (Serial Data Line)是数据线,负责发送和接收数据;SCL(Serial Clock Line)是时钟线,用于同步数据传输。
这两条线都是双向的,可以通过连接多个设备实现多主控制。
在IIC协议中,有两种主要的设备,分别是主设备和从设备。
主设备负责发起和控制总线上的通信,而从设备则接受和执行主设备的请求。
从设备可以是各种外设,如传感器、存储器等。
IIC协议的通信过程包括起始信号、地址传输、数据传输和停止信号。
起始信号和停止信号是用于标志一次通信的开始和结束。
在起始信号和停止信号之后是8位的地址传输,其中最高位是设备地址,用于标识目标设备。
地址传输之后是数据传输阶段,可以发送或接收多个字节的数据。
IIC协议还支持两种传输模式,分别是7位地址模式和10位地址模式。
在7位地址模式下,可以有128个不同的设备地址,而在10位地址模式下,可以有1024个不同的设备地址。
总的来说,IIC协议是一种灵活简洁的串行通信协议,广泛应用于各种电子设备之间的通信。
它简化了硬件连接,提供了可靠的数据传输和多主控制的能力,同时也具有较低的通信成本。
I2C协议
I2C总线(Inter IC BUS)是Philips公司推出的双向两线串行通信标准。
由于它具有接口少、通信效率高等优点,现已得到广泛的应用\[1~3\]。
它除了可以进行简单的单主节点通信外,还可以应用在多主节点的通信系统中。
在多主节点通信系统中,如果两个或者更多的主节点同时启动数据传输,总线具有冲突检测和仲裁功能,保证通信正常进行并防止数据破坏。
现在许多微控制器(MCU)都具有I2C总线接口,能方便地进行I2C总线设计。
对于没有I2C总线接口的MCU,可以采用两条I/O接口线进行模拟\[2,3\]。
目前,一些介绍模拟I2C的资料主要讲的是在单主节点系统中进行的通信,这使得模拟I2C总线的应用具有一定的局限性。
本文根据总线仲裁的思想,提出一种多主节点通信的思想及实现流程。
1 I2C总线系统简介[1~3]I2C总线系统是由SCL(串行时钟)和SDA(串行数据)两根总线构成的。
该总线有严格的时序要求,总线工作时,由串行时钟线SCL传送时钟脉冲,由串行数据线SDA传送数据。
总线协议规定,各主节点进行通信时都要有起始、结束、发送数据和应答信号。
这些信号都是通信过程中的基本单元。
总线传送的每1帧数据均是1个字节,每当发送完1个字节后,接收节点就相应给一应答信号。
协议规定,在启动总线后的第1个字节的高7位是对从节点的寻址地址,第8位为方向位(“0”表示主节点对从节点的写操作;“1”表示主节点对从节点的读操作),其余的字节为操作数据。
2 I2C总线的仲裁在多主的通信系统中。
总线上有多个节点,它们都有自己的寻址地址,可以作为从节点被别的节点访问,同时它们都可以作为主节点向其他的节点发送控制字节和传送数据。
但是如果有两个或两个以上的节点都向总线上发送启动信号并开始传送数据,这样就形成了冲突。
要解决这种冲突,就要进行仲裁的判决,这就是I2C总线上的仲裁。
I2C总线上的仲裁分两部分:SCL线的同步和SDA线的仲裁。
SCL同步是由于总线具有线“与”的逻辑功能,即只要有一个节点发送低电平时,总线上就表现为低电平。
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)2 I2C 总线使设计人员和厂商都得益 (3)2.1 设计人员的得益 (4)2.2 厂商的得益 (5)3 介绍I2C 总线规范 (6)4 I2C 总线的概念 (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)9 7 位的地址格式 (12)10 7 位寻址 (13)10.1 第一个字节的位定义 (13)10.1.1 广播呼叫地址 (14)10.1.2 起始字节 (15)10.1.3 CBUS 的兼容性 (16)11 标准模式I2C 总线规范的扩展 (16)12 快速模式 (17)13 Hs 模式 (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)14 10 位寻址 (24)14.1 头两个字节位的定义 (24)14.2 10 位寻址的格式 (24)14.3 广播呼叫地址和10 位寻址的起始字节 (26)15 I/O 级和总线线路的电气规范和时序 (26)15.1 标准和快速模式器件 (26)15.2 Hs 模式器件 (28)16 I2C 总线器件到总线线路的电气连接 (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)18 F/S 模式I2C 总线系统的双向电平转换器 (35)18.1 连接逻辑电平不同的器件 (36)18.1.1 电平转换器的操作 (36)19 Philips 提供的开发工具 (37)20 支持的文献 (37)1 序言1.1 版本 1.0-19921992 I 2C 总线规范的这个版本有以下的修正 • 删除了用软件编程从机地址的内容 因为实现这个功能相当复杂 而且不被使用 • 删除了 低速模式 实际上这个模式是整个 I 2C 总线规范的子集 不需要明确地详细说明 • 增加了快速模式 它将位速率增加 4 倍到达 400kbit/s 快速模式器件都向下兼容 即它们可以在 0~100kbit/s 的 I 2C 总线系统中使用 • 增加了 10 位寻址 允许 1024 个额外的从机地址•快速模式器件的斜率控制和输入滤波改善了 EMC 性能 注意 100kbit/s 的 I 2C 总线系统或 100kbit/s 器件都没有改变1.2 版本2.0-1998I 2C 总线实际上已经成为一个国际标准 在超过 100 种不同的 IC 上实现而且得到超过 50 家公司的许 可 但是 现在的很多应用要求总线速度更高 电源电压更低 这个更新版的 I 2C 总线规范满足这些要求 而且有以下的修正 • 增加了高速模式 Hs 模式 它将位速率增加到 3.4Mbit/s Hs 模式的器件可以和 I 2C 总线系统 中快速和标准模式器件混合使用 位速率从 0~3.4Mbit/s • 电源电压是 2V 或更低的器件的低输出电平和滞后被调整到符合噪声容限的要求 而且保持和电 源电压更高的器件兼容 • 快速模式输出级的 0.6V 6mA 要求被删除 •新器件的固定输入电平被总线电压相关的电平代替 •增加了双向电平转换器的应用信息1.3 版本2.1-2000I 2C 总线规范的 V2.1 版有以下微小的修改 • 在 Hs 模式的重复起始条件后 可以延长时钟信号 SCLH 见 13.2 节的图 22 25 和 32 •Hs 模式中的一些时序参数变得更随意见表 6 和表 71.4 购买 Philips 的 I 2C 总线元件购买 Philips 的 I 2C 元件同时传递了一个在 Philips 的 I 2C 专利下在 I 2C 系统使用元件使系统符合由Philips 定义的 I 2C 规范的许可证2 I 2C 总线使设计人员和厂商都得益在消费者电子 电讯和工业电子中 看上去不相关的设计里经常有很多相似的地方 例如几乎每个系 统都包括 •一些智能控制 通常是一个单片的微控制器 • 通用电路 例如 LCD 驱动器 远程 I/O 口 RAM EEPROM 或数据转换器•面向应用的电路 譬如收音机和视频系统的数字调谐和信号处理电路 或者是音频拨号电话的 DTMF 发生器 为了使这些相似之处对系统设计者和器件厂商都得益 而且使硬件效益最大电路最简单 Philips 开发 了一个简单的双向两线总线 实现有效的 IC 之间控制 这个总线就称为 Inter IC 或 I 2C 总线 现在 Philips 包括超过 150 种 CMOS 和双极性兼容 I 2C 总线的 IC 可以执行前面提到的三种类型的功能 所有符合 I 2C总线的器件组合了一个片上接口 使器件之间直接通过 I 2C 总线通讯 这个设计概念解决了很多在设计数 字控制电路时遇到的接口问题下面是 I 2C 总线的一些特征 • 只要求两条总线线路 一条串行数据线SDA 一条串行时钟线SCL•每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址 主机可以作为主机发送器或主机接收器 • 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁 防止数据被破坏 • 串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速 模式下可达 3.4Mbit/s •片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整 • 连接到相同总线的 IC 数量只受到总线的最大电容400pF 限制 图 1 是两个 I 2C 总线应用的例子2.1 设计人员的得益符合 I 2C 总线的 IC 允许系统设计快速向前推进 直接从功能结构图到原型 此外 由于它们直接剪 贴 到 I 2C 总线 没有任何额外的外部接口 所以允许简单地通过从或者向总线剪贴 或 不剪贴 IC 来修改或升级原型系统 符合 I 2C 总线的 IC 还有一些功能特别吸引设计人员 • 结构图的功能模块与实际的 IC 对应 设计快速从结构图向最后的原理图推进 • 不需要设计总线接口 因为 I 2C 总线接口已经集成在片上 • 集成的寻址和数据传输协议允许系统完全由软件定义 • 相同类型的 IC 经常用于很多不同的应用• 由于设计人员快速熟悉了用兼容 I 2C 总线的 IC 表示经常使用的功能模块 使设计时间减少 • 在系统中增加或删除 IC 不会影响总线的其他电路• 故障诊断和调试都很简单 故障可被立即寻迹 •通过聚集一个可再使用的软件模块的库减少软件开发时间 除了这些优点外 符合 I 2C 总线的 CMOS IC 还向设计者在特别吸引的可移植装置和电池供电系统方 面提供了特殊的功能 它们都有 •极低的电流消耗 • 抗高噪声干扰 • 电源电压范围宽 •工作的温度范围广SDA SC LSDA SCL(a) (b)图1 I2C 应用的两个例子 a 高性能的高度集成电视 b DECT 无绳电话基站2.2 厂商的得益符合I 2C 总线的IC 不只帮助了设计者它们也使设备厂商得到很多益处因为•简单的两线串行I2C 总线将互联减到最小因此IC 的管脚更少而且PCB 的线路也减少结果使PCB 更小和更便宜•完全完整的I2C 总线协议不需要地址译码器和其他胶合逻辑•I2C 总线的多主机功能允许通过外部连接到生产线快速测试和调整最终用户的设备•符合I2C 总线的IC 提供SO 小型VSO 超小型以及DIL 封装甚至减少了IC 的空间要求这些只是一些益处另外兼容I2C 总线的IC 通过允许简单地构造设备变量和保持设计是最新的简易升级功能增加了系统设计的灵活性这样整个装置系列可以围绕一个基本的模型开发新设备的升级或者功能增强的模型即扩展的存储器远程控制等等可以简单地通过剪贴相应的IC 到总线上产生如果需要更大的ROM 只需要从我们广泛的IC 中选择一个有更大ROM 的微控制器就可以了由于新的IC 要取代旧的 增加新功能到装置或者提升它的性能只要简单地从总线上移去过时的 IC 然后换上它的后续 IC 就可以了3 介绍 I 2C 总线规范对于面向 8 位的数字控制应用 譬如那些要求用微控制器的 要建立一些设计标准 • 一个完整的系统通常由至少一个微控制器和其他外围器件例如存储器和 I/O 扩展器组成 • 系统中不同器件的连接成本必须最小•执行控制功能的系统不要求高速的数据传输 • 总的效益由选择的器件和互连总线结构的种类决定 产生一个满足这些标准的系统需要一个串行的总线结构 尽管串行总线没有并行总线的数据吞吐能力 但它们只要很少的配线和 IC 连接管脚 然而 总线不仅仅是互连的线 还包含系统通讯的所有格式和过程 串行总线的器件间通讯必须有某种形式的协议避免所有混乱 数据丢失和妨碍信息的可能性 快速器件必须可以和慢速器件通讯 系统必须不能基于所连接的器件 否则不可能进行修改或改进 应当设计一 个过程决定哪些器件何时可以控制总线 而且 如果有不同时钟速度的器件连接到总线 必须定义总线的 时钟源 所有这些标准都在 I 2C 总线的规范中4 I 2C 总线的概念I 2C 总线支持任何 IC 生产过程 NMOS CMOS 双极性 两线――串行数据 SDA 和串行时钟 SCL 线在连接到总线的器件间传递信息 每个器件都有一个唯一的地址识别无论是微控制器 LCD 驱动器 存储器或键盘接口而且都可以作为一个发送器或接收器由器件的功能决定很明显 LCD驱动器只是一个接收器 而存储器则既可以接收又可以发送数据 除了发送器和接收器外 器件在执行数 据传输时也可以被看作是主机或从机见表 1主机是初始化总线的数据传输并产生允许传输的时钟信号的器件 此时 任何被寻址的器件都被认为是从机 表1 I 2C 总线术语的定义但只允许其中一个控制总线并使报文不被破坏I 2C 总线是一个多主机的总线 这就是说可以连接多于一个能控制总线的器件到总线 由于主机通常是 微控制器 让我们考虑以下数据在两个连接到 I 2C 总线的微控制器之间传输的情况 见图2 这突出了 I 2C 总线的主机 从机和接收器 发送器的关系 应当注意的是 这些关系不是持久的 只由当时数据传输的方向决定 传输数据的过程如下 1假设微控制器 A 要发送信息到微控制器 B • 微控制器 A 主机寻址微控制器 B 从机 • 微控制器 A 主机 发送器发送数据到微控制器 B 从机 接收器•微控制器 A 终止传输2如果微控制器 A 想从微控制器 B 接收信息 • 微控制器 A 主机寻址微控制器 B 从机• 微控制器 A 主机 接收器从微控制器 B 从机 发送器接收数据• 微控制器 A 终止传输甚至在这种情况下 主机微控制器 A 也产生定时而且终止传输连接多于一个微控制器到 I 2C 总线的可能性意味着超过一个主机可以同时尝试初始化传输数据 为了避免由此产生混乱 发展出一个仲裁过程 它依靠线与连接所有 I 2C 总线接口到 I 2C 总线 如果两个或多个主机尝试发送信息到总线 在其他主机都产生 0 的情况下 首先产生一个 1 的 主机将丢失仲裁 仲裁时的时钟信号是用线与连接到 SCL 线的主机产生的时钟的同步结合关于仲裁的更 详细信息请参考第8 章MICRO -CONTROL LER ALCD DRIVERSTATIC RAM OR EEPROMSD ASC LGATE ARRAYADCMICRO -CONTROL LER B图 2 使用两个微控制器的 I 2C 总线配置举例在 I 2C 总线上产生时钟信号通常是主机器件的责任 当在总线上传输数据时 每个主机产生自己的时钟信号 主机发出的总线时钟信号只有在以下的情况才能被改变 慢速的从机器件控制时钟线并延长时钟信号 或者在发生仲裁时被另一个主机改变5 总体特征 SDA 和 SCL 都是双向线路 都通过一个电流源或上拉电阻连接到正的电源电压见图 3当总线空闲时 这两条线路都是高电平 连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功 能 I 2C 总线上数据的传输速率在标准模式下可达 100kbit/s 在快速模式下可达 400kbit/s 在高速模式下 可达 3.4Mbit/s 连接到总线的接口数量只由总线电容是 400pF 的限制决定 关于高速模式主机器件的信息请参考第 13 章6 位传输 由于连接到 I 2C 总线的器件有不同种类的工艺 CMOS NMOS 双极性 逻辑 0 低 和 1高的电平不是固定的 它由 V DD 的相关电平决定见第 15 章的电气规范每传输一个数据位就产生 一个时钟脉冲6.1 数据的有效性SDA 线上的数据必须在时钟的高电平周期保持稳定 数据线的高或低电平状态只有在 SCL 线的时钟 信号是低电平时才能改变见图 4DEVICE 1D E V I C E 2图 3 标准模式器件和快速模式器件连接到 I 2C 总线SDASCLd a t a li ne stable; data val i dch a n g e of d at a allowed图 4 I 2C 总线的位传输6.2 起始和停止条件在 I 2C 总线中 唯一出现的是被定义为起始 S 和停止 P 条件 见图 5 的情况 其中一种情况是在 SCL 线是高电平时 SDA 线从高电平向低电平切换 这个情况表示起始条件 当 SCL 是高电平时 SDA 线由低电平向高电平切换表示停止条件 起始和停止条件一般由主机产生 总线在起始条件后被认为处于忙的状态 在停止条件的某段时间后 总线被认为再次处于空闲状态 总线的空闲状态将在第 15 章详细说明如果产生重复起始Sr 条件而不产生停止条件 总线会一直处于忙的状态此时的起始条件S和重复起始Sr 条件在功能上是一样的见图 10因此在本文档的剩余部分符号 S 将作为一个通用的术语既表示起始条件又表示重复起始条件 除非有特别声明的 Sr 如果连接到总线的器件合并了必要的接口硬件 那么用它们检测起始和停止条件十分简便 但是 没有这种接口的微控制器在每个时钟周期至少要采样SDA 线两次来判别有没有发生电平切换S D ASDAS C LSS TA R T co n d iti o nPS T OP co n d iti o nSCL图 5 起始和停止条件7 传输数据 7.1 字节格式发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟一个响应位 首先传输的是数据的最高位MSB 见图 6如果从机要完成一些其他功能后例如一个 内部中断服务程序才能接收或发送下一个完整的数据字节 可以使时钟线 SCL 保持低电平迫使主机进入 等待状态 当从机准备好接收下一个数据字节并释放时钟线 SCL 后 数据传输继续在一些情况下 可以用与 I 2C 总线格式不一样的格式 例如兼容 CBUS 的器件 甚至在传输一个字 节时 用这样的地址起始的报文可以通过产生停止条件来终止 此时不会产生响应见 10.1.3 节7.2 响应数据传输必须带响应 相关的响应时钟脉冲由主机产生 在响应的时钟脉冲期间 发送器释放 SDA 线 高 在响应的时钟脉冲期间 接收器必须将 SDA 线拉低 使它在这个时钟脉冲的高电平期间保持稳定的低 电平见图 7当然 必须考虑建立和保持时间在第15 章详细说明 通常 被寻址的接收器在接收到的每个字节后 除了用 CBUS 地址开头的报文 必须产生一个响应 见 10.1.3 节 当从机不能响应从机地址时例如它正在执行一些实时函数不能接收或发送从机必须使数据线保持高电平 主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输如果从机 接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节 主机必须再一次 终止传输 这个情况用从机在第一个字节后没有产生响应来表示 从机使数据线保持高电平 主机产生一 个停止或重复起始条件 如果传输中有主机接收器 它必须通过在从机不产生时钟的最后一个字节不产生一个响应 向从机发送器通知数据结束 从机 发送器必须释放数据线 允许主机产生一个停止或重复起始条件图 6 I 2C 总线的数据传输图 7 I 2C 总线的响应8 仲裁和时钟发生 8.1 同步所有主机在 SCL 线上产生它们自己的时钟来传输 I 2C 总线上的报文 数据只在时钟的高电平周期有效 因此 需要一个确定的时钟进行逐位仲裁 时钟同步通过线与连接 I 2C 接口到 SCL 线来执行 这就是说 SCL 线的高到低切换会使器件开始数它 们的低电平周期 而且一旦器件的时钟变低电平 它会使 SCL 线保持这种状态直到到达时钟的高电平见 图8但是 如果另一个时钟仍处于低电平周期 这个时钟的低到高切换不会改变 SCL 线的状态 因此SCL 线被有最长低电平周期的器件保持低电平 此时 低电平周期短的器件会进入高电平的等待状态start countingCLK 1C L K 2S C L图 8仲裁过程中的时钟同步当所有有关的器件数完了它们的低电平周期后 时钟线被释放并变成高电平 之后 器件时钟和 SCL 线的状态没有差别 而且所有器件会开始数它们的高电平周期 首先完成高电平周期的器件会再次将 SCL 线拉低 这样 产生的同步SCL 时钟的低电平周期由低电平时钟周期最长的器件决定 而高电平周期由高电平 时钟周期最短的器件决定8.2 仲裁主机只能在总线空闲的时侯启动传输 两个或多个主机可能在起始条件的最小持续时间t HD;STA 内产生一个起始条件 结果在总线上产生一个规定的起始条件 当 SCL 线是高电平时 仲裁在 SDA 线发生 这样 在其他主机发送低电平时 发送高电平的主机将 断开它的数据输出级 因为总线上的电平与它自己的电平不相同仲裁可以持续多位它的第一个阶段是比较地址位有关的寻址信息请参考第10 章和第14 章如果每个主机都尝试寻址相同的器件仲裁会继续比较数据位如果是主机发送器或者比较响应位如果是主机接收器因为I2C 总线的地址和数据信息由赢得仲裁的主机决定在仲裁过程中不会丢失信息丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾由于Hs 模式的主机有一个唯一的8 位主机码因此一般在第一个字节就可以结束仲裁见第13 章如果主机也结合了从机功能而且在寻址阶段丢失仲裁它很可能就是赢得仲裁的主机在寻址的器件因此丢失仲裁的主机必须立即切换到它的从机模式图9 显示了两个主机的仲裁过程当然可能包含更多的内容由连接到总线的主机数量决定此时产生DA TA1 的主机的内部数据电平与SDA 线的实际电平有一些差别如果关断数据输出这就意味着总线连接了一个高输出电平这不会影响由赢得仲裁的主机初始化的数据传输D A TA1D A TA2 S D A S C Lmaster 1 lose s a rbit ra ti o nDATA 1S D AS图9 两个主机的仲裁过程由于I2C 总线的控制只由地址或主机码以及竞争主机发送的数据决定没有中央主机总线也没有任何定制的优先权必须特别注意的是在串行传输时当重复起始条件或停止条件发送到I2C 总线的时侯仲裁过程仍在进行如果可能产生这样的情况有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件也就是说仲裁在不能下面情况之间进行•重复起始条件和数据位•停止条件和数据位•重复起始条件和停止条件从机不被卷入仲裁过程8.3 用时钟同步机制作为握手时钟同步机制除了在仲裁过程中使用外还可以用于使能接收器处理字节级或位级的快速数据传输在字节级的快速传输中器件可以快速接收数据字节但需要更多时间保存接收到的字节或准备另一个要发送的字节然后从机以一种握手过程见图6在接收和响应一个字节后使SCL 线保持低电平迫使主机进入等待状态直到从机准备好下一个要传输的字节在位级的快速传输中器件例如对I2C 总线有或没有限制的微控制器可以通过延长每个时钟的低电平周期减慢总线时钟从而任何主机的速度都可以适配这个器件的内部操作速率在Hs 模式中握手的功能只能在字节级使用见第13 章号9 7 位的地址格式数据的传输遵循图 10 所示的格式 在起始条件S 后 发送了一个从机地址 这个地址共有 7 位 紧接着的第 8 位是数据方向位R/ W 0 表示发送写 1 表示请求数据读数据传输一般由主机产生的停止位P 终止 但是 如果主机仍希望在总线上通讯 它可以产生重复起始条件Sr和寻址另一个从机 而不是首先产生一个停止条件 在这种传输中 可能有不同的读写格式结合图 10 完整的数据传输可能的数据传输格式有 • 主机 发送器发送到从机 接收器 传输的方向不会改变见图 11 •在第一个字节后 主机立即读从机见图 12在第一次响应时 主机 发送器变成主机 接收 器 从机 接收器变成从机 发送器 第一次响应仍由从机产生 之前发送了一个不响应信 A 的主机产生停止条件• 复合格式见图 13传输改变方向的时侯 起始条件和从机地址都会被重复 但 R/ W 位取反如果主机接收器发送一个重复起始条件 它之前应该发送了一个不响应信号 A注意 1复合格式可以用于例如控制一个串行存储器 在第一个数据字节期间 要写内部存储器的位置 在重复起始条件和从机地址后 数据可被传输 2自动增加或减少之前访问的存储器位置等所有决定都由器件的设计者决定3每个字节都跟着一个响应位 在序列中用 A 或 A 模块表示 4 兼容 I 2C 总线的器件在接收到起始或重复起始条件时必须复位它们的总线逻辑 甚至在这些起始 条件没有根据正确的格式放置 它们也都期望发送从机地址 5起始条件后面立即跟着一个停止条件报文为空是一个不合法的格式图 11 主机 发送器用 7 位地址寻址从机接收器 传输方向不变图12 在第一个字节后主机立即读从机图13 复合格式10 7 位寻址I2C 总线的寻址过程是通常在起始条件后的第一个字节决定了主机选择哪一个从机例外的情况是可以寻址所有器件的广播呼叫地址使用这个地址时理论上所有器件都会发出一个响应但是也可以使器件忽略这个地址广播呼叫地址的第二个字节定义了要采取的行动这个过程将在10.1.1 节详细介绍有关10 位寻址的信息请参考第14 章10.1 第一个字节的位定义位组成了从机地址见图14最低位LSB是第8 位它决定了报文的方向第一个字节的头7第一个字节的最低位是0器件会任务它被主机寻址至于是从机接收器还是从机发送器都由R/ W 位决定M S B LSBR/Wsl a ve a d d re s s图14 起始条件后的第一个字节从机地址由一个固定和一个可编程的部分构成由于很可能在一个系统中有几个同样的器件从机地址的可编程部分使最大数量的这些器件可以连接到I2C 总线上器件可编程地址位的数量由它可使用的管脚决定例如如果器件有4 个固定的和3 个可编程的地址位那么相同的总线上共可以连接8 个相同的器件I2C 总线委员会协调I2C 地址的分配进一步的信息可以从最后列出的Philips 代理商处获得保留的两组8 位地址0000XXX 和1111XXX的用途见表2 从机地址的11110XX 位组合保留给10 位寻址见第14 章。
I2C简介中文翻译
1.电气特性I2C运用一个漏极开路/集电极开路和一个输入缓冲在同一个线路上,它能够使用单一的数据线来传输双向数据流1.1漏极开路增益对于双向通信漏极开路参考一典型的输出,它能够上拉总线到电压(地,在大多数情况下)或者“释放”总线和让他通过一个电阻上拉,万一总线被主设备或者从设备使用,上拉的电阻(R PU)在线路上是为了负责上拉总线电压到电源线路上,即使没有一个器件强迫线路电源为高,这就意味着这个总线不会发生通信错误,当一个设备尝试传输高电平,和另一个设备传输低电平,造成一个短路(电源线路到地),I2C需要如果一个主设备在一个多个主设备的环境中传输高电平,但是看到这个线路上的数据是低电平(另一个设备被拉低),为了去停止通信,因为另一个设备正在运用这个总线,被上拉的接口不会允许接口的类型自由,这个就是I2C的好处。
图2显示了一个简单在SDA/SCL总线上的主或者从设备的内部结构框图,由一个输入缓冲器去读输入数据,一个下拉的FET去传输数据,一个设备是能够把总线拉低的(提供短路到地)或者释放总线(高阻抗到地)和允许上拉电阻到电源电路中,这是一个重要的概念去实现,当总线处理多个I2C器件时,没有一个设备能够保持这个总线为高电平,这个属性是允许双向通信的1.1漏极开路下拉到地正如之前描述的在之前的章节中,漏极开路的也许会设置上拉总线为低,或者释放总线和上拉一个电阻到电源,图3显示了数据流将数据将总线拉低,逻辑想要去传输一个低电平激活下拉的场效应管,将会提供一个短暂的时间到地,将线路拉低。
1.1.2 漏极开路释放总线当主设备或者从设备想要传输一个逻辑高电平时,它有可能释放总线通过关闭下拉的场效应管,这个电平总线悬浮,上拉的电阻上拉电压到电压线路中,它将被认为是一个高电平,数据4显示了数据流通过一个上拉的电阻将数据总线保持高电平。
2I2C接口2.1通用I2C操作这个I2C总线是一个标准的双向接口,运用一个控制器,就是众所周知的主设备,去控和从设备沟通,一个从设备不会去传输数据,除非它的地址已经被主设备所获得了,每个设备在I2C总线上都有一个唯一的器件地址去区别于其他下挂在I2C总线上的设备,许多从设备在启动时将会做一些启动设置,这是每个从设备通常会做的当这个主设备接入这个从设备的内部寄存器,就会获得一个专用的寄存器地址,一个设备将会有一个或者多个寄存器去存储,读,写的数据。
IIC总线协议
IIC总线协议协议名称:IIC总线协议一、引言IIC总线协议是一种串行通信协议,用于在集成电路之间进行数据传输。
本协议旨在规定IIC总线的物理层和数据链路层的规范,以确保不同设备之间的互操作性和数据传输的可靠性。
二、术语和定义1. IIC总线:Inter-Integrated Circuit总线的简称,也被称为I2C总线,是一种用于短距离通信的串行总线。
2. 主设备:在IIC总线上发起通信的设备。
3. 从设备:响应主设备通信的设备。
4. 数据帧:在IIC总线上传输的数据单元,包括起始位、地址位、数据位和校验位。
三、物理层规范1. 电气特性1.1 电压:IIC总线使用双向开漏或双向三态的器件进行通信,通信线上的电平为0V或高阻态。
1.2 电流:通信线上的电流应在设备规格范围内,以保证通信的可靠性。
1.3 电阻:总线上的上拉电阻和下拉电阻应根据总线长度和设备数量进行合理选择,以确保信号的稳定性。
2. 时序要求2.1 起始条件:主设备发送起始信号,即将总线上的数据线(SDA)从高电平拉低,时钟线(SCL)保持高电平。
2.2 结束条件:主设备发送结束信号,即将总线上的数据线从低电平拉高,时钟线保持高电平。
2.3 数据传输时序:数据传输的时钟由主设备提供,每个数据位在时钟的下降沿进行传输,数据线上的数据保持稳定直到下一个时钟周期的下降沿。
四、数据链路层规范1. 寻址方式1.1 主设备发送起始信号后,发送从设备地址和读写位。
地址由7位或10位组成,用于唯一标识从设备。
1.2 读写位为0表示主设备向从设备发送数据,为1表示主设备从从设备读取数据。
2. 数据传输2.1 数据帧格式:数据帧由起始位、地址位、数据位和校验位组成。
2.2 起始位:数据线上的高电平信号,表示数据传输的开始。
2.3 地址位:由主设备发送,用于指定通信的从设备。
2.4 数据位:数据线上的数据传输,每个数据位在时钟的下降沿进行传输。
2.5 校验位:用于验证数据的完整性和正确性,由主设备发送。
i2c协议
i2c协议I2C(Inter-Integrated Circuit)是一种串行通信协议,广泛应用于各种电子设备中。
I2C通信协议由飞利浦公司(现在的恩智浦公司)开发,其最初是为了简化在一个PCB上连接各种集成电路之间的通信而设计的。
I2C协议是一个简单而高效的串行通信协议,具有以下几个特点。
首先,I2C协议只需要两根信号线即可进行通信,分别是时钟线(SCL)和数据线(SDA)。
其次,I2C协议使用主从机制来管理设备之间的通信,其中一个设备为主设备(Master),总控制总线上的通信;其他设备为从设备(Slave),只有在主设备的通信命令下才会传输数据。
此外,I2C协议还可以支持多主设备并存,通过特定的控制方法进行主设备的转换。
最后,I2C协议的数据传输速度较快,通信速率可以达到400Kbps,甚至可以扩展到1Mbps,使用廉价而少量的硬件成本即可实现。
I2C协议的数据传输原理也比较简单。
首先,主设备会向总线发送一个开始信号(Start Signal),通知其他设备是否要开始通信。
然后,主设备发送一个命令字(Address),以表示要与哪个从设备进行通信。
接着,主设备检查从设备是否存在,如果存在,则从设备会发送一个确认信号(Acknowledge Signal)给主设备。
一旦从设备确认接收到主设备的命令,主设备就可以向从设备发送数据。
最后,一旦通信完成,主设备会发送一个停止信号(Stop Signal),从而断开设备之间的总线连接。
总之,I2C协议是一种广泛应用于各种电子设备之间的串行通信协议,其简单而高效的数据传输原理和低成本的硬件要求使其成为了非常受欢迎的协议。
I2C通讯协议
I2C通讯协议协议名称:I2C通讯协议1. 引言I2C(Inter-Integrated Circuit)通讯协议是一种串行通信协议,用于在集成电路之间进行数据传输。
本协议旨在规范I2C通讯的硬件连接、信号传输、地址分配、数据格式和通讯协议等方面的要求,以确保不同设备之间的互操作性和数据传输的可靠性。
2. 范围本协议适用于使用I2C通讯协议进行数据交换的所有设备和系统。
3. 术语和定义3.1 主设备(Master Device): 发起I2C通讯的设备。
3.2 从设备(Slave Device): 响应I2C通讯的设备。
3.3 传输速率(Transfer Rate): 数据在I2C总线上的传输速度,通常以kHz为单位。
3.4 总线(Bus): 用于连接主设备和从设备的物理通道。
3.5 起始条件(Start Condition): 主设备发起通讯的信号。
3.6 停止条件(Stop Condition): 主设备结束通讯的信号。
3.7 位(Bit): I2C通讯中的最小数据单位。
3.8 字节(Byte): 由8个位组成的数据单元。
4. 硬件连接4.1 I2C总线由两根信号线组成:时钟线(SCL)和数据线(SDA)。
4.2 主设备通过SCL线提供时钟信号,从设备根据该信号进行数据传输。
4.3 主设备和从设备共享同一根SDA线进行数据传输。
4.4 每个设备在总线上都有一个唯一的7位地址,用于标识设备。
5. 信号传输5.1 传输速率由主设备控制,通常可选的速率为100 kHz、400 kHz和1 MHz。
5.2 通信过程中,主设备发起起始条件,从设备在检测到起始条件后进入接收状态。
5.3 数据传输以字节为单位进行,每个字节由8个位组成。
5.4 数据传输时,每个位在SCL的上升沿或下降沿进行传输。
5.5 主设备发送数据时,从设备在SCL的下降沿采样数据。
5.6 从设备发送数据时,主设备在SCL的上升沿采样数据。
I2C通讯协议
I2C通讯协议协议名称:I2C通讯协议一、引言I2C(Inter-Integrated Circuit)通讯协议是一种串行通信协议,用于在集成电路(IC)之间进行数据传输。
本协议旨在规范I2C通讯的物理层连接、电气特性、数据传输格式和通信过程,以确保不同设备之间的互操作性和数据的可靠传输。
二、范围本协议适用于使用I2C通讯协议的设备之间的数据传输。
三、术语定义1. 主设备(Master):发起I2C通讯的设备。
2. 从设备(Slave):响应I2C通讯的设备。
3. 总线(Bus):主设备和从设备之间传输数据的物理通道。
4. 时钟线(SCL):主设备控制的时钟信号线,用于同步数据传输。
5. 数据线(SDA):主设备和从设备之间传输数据的双向信号线。
四、物理连接1. 主设备和从设备通过共享SCL和SDA两根信号线进行通讯。
2. SCL和SDA信号线上都需要连接上拉电阻,以确保信号的正确传输。
五、电气特性1. 信号电平:- 高电平(High):3.3V - 5V- 低电平(Low):0V - 0.4V2. 时钟频率:- 标准模式(Standard Mode):时钟频率最高100 kHz。
- 快速模式(Fast Mode):时钟频率最高400 kHz。
- 高速模式(High-Speed Mode):时钟频率最高3.4 MHz。
3. 数据传输:- 数据传输以字节为单位进行,每个字节包含8位。
- 主设备发送数据时,从设备需要确认接收到的数据。
- 从设备发送数据时,主设备需要确认接收到的数据。
六、数据传输格式1. 起始条件:- 主设备将SCL线保持高电平,然后将SDA线由高电平变为低电平。
2. 结束条件:- 主设备将SCL线保持高电平,然后将SDA线由低电平变为高电平。
3. 数据传输过程:- 每个字节的传输由8个时钟周期组成,每个周期都由主设备控制。
- 主设备首先发送一个字节的起始位,然后发送8位数据,最后是一个确认位。
I2C总线协议详解
I2C总线协议详解简介:I2C(Inter-Integrated Circuit)是一种由PHILIPS公司开发的两线式串行总线,用于衔接微控制器及其外围设备。
I2C总线产生于在80年月,最初为音频和视频设备开发,如今主要在服务器管理中用法,其中包括单个组件状态的通信可随时监控内存、硬盘、网络、系统温度等多个参数,增强了系统的平安性,便利了管理。
I2C总线特点I2C总线最主要的优点是其容易性和有效性。
因为接口挺直在组件之上,因此I2C总线占用的空间十分小,削减了板的空间和芯片管脚的数量,降低了互联成本。
总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。
I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够举行发送和接收的设备都可以成为主总线。
一个主控能够控制信号的传输和时钟频率。
固然,在任何时光点上只能有一个主控。
I2C总线工作原理总线的构成及信号类型I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。
在CPU与被控IC之间、IC与IC之间举行双向传送,最高传送速率100kbps。
各种被控制电路均并联在这条总线上,但就像电话机一样惟独拨通各自的号码才干工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。
CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量打算该调节的类别(如对照度、亮度等)及需要调节的量。
这样,各控制电路虽然挂在同一条总线上,却彼此自立,互不相关。
I2C总线在传送数据过程*有三种类型信号,它们分离是:开头信号、第1页共4页。
i2c总线协议标准与规范
i2c 总线协议标准与规范I2C 总线协议I2C 协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。
起始和结束信号总是由主设备产生。
总线在空闲状态时,SCL 和SDA 都保持着高电平,当SCL 为高电平而SDA 由高到低的跳变,表示产生一个起始条件;当SCL 为高而SDA 由低到高的跳变,表示产生一个停止条件。
在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C 器件无法访问总线;而在停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态。
如图所示:在了解起始条件和停止条件后,我们再来看看在这个过程中数据的传输是如何进行的。
前面我们已经提到过,数据传输以字节为单位。
主设备在SCL 线上产生每个时钟脉冲的过程中将在SDA 线上传输一个数据位,当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA 线,回传给主设备一个应答位,此时才认为一个字节真正的被传输完成。
当然,并不是所有的字节传输都必须有一个应答位,比如:当从设备不能再接收主设备发送的数据时,从设备将回传一个否定应答位。
数据传输的过程如图所示:在前面我们还提到过,I2C 总线上的每一个设备都对应一个唯一的地址,主从设备之间的数据传输是建立在地址的基础上,也就是说,主设备在传输有效数据之前要先指定从设备的地址,地址指定的过程和上面数据传输的过程一样,只不过大多数从设备的地址是7 位的,然后协议规定再给地址添加一个最低位用来表示接下来数据传输的方向,0 表示主设备向从设备写数据,1 表示主设备向从设备读数据。
如图所示:I2C 协议2 条双向串行线,一条数据线SDA,一条时钟线SCL。
SDA 传输数据是大端传输,每次传输8bit,即一字节。
支持多主控(mulTImastering),任何时间点只能有一个主控。
总线上每个设备都有自己的一个addr,共7 个bit,广播地址全0.系统中可能有多个同种芯片,为此addr 分为固定部分和可编程部份,细节视芯片而定,看datasheet。
I2C总线协议介绍(易懂)
I2C总线协议介绍(易懂)目录CONTENTS•I2C总线协议产生背景•I2C总线协议内容介绍•I2C总线协议总结一、I2C总线协议产生背景1电视机内IC 之间相互连接,IC 芯片体积增大功耗增大 成本增加 IC 芯片应用不便飞利浦公司为了硬件电路最简化,效益最大化,给芯片设计制造者和芯片应用者带来极大益处。
2 I2C 总线Logo3飞利浦公司将这种集成电路互连通信电路命名为Inter-Integrated Circuit,简称为Inter-IC,或I2C(数字“2”为上标)。
因为I2C中的两根导线(SDA和SCL)构成了两根Bus,实现了Bus的功能;由于I2C电路能实现Bus的功能,故把I2C 电路称为 I2C-Bus,中文叫I2C总线(I2C总线是一个两线总线)。
4在正式的书面场合,全称写作Inter-Integrated Circuit,简写Inter-IC(IIC)或者I2C(数字“2”书写为上标,,英文读作“I squared C”,中文读作“I平方C”)5I2C总线术语及定义,如表(1)所示:表(1) I2C总线术语及定义6最初,I2C总线的运行速度被限制在100 Kbit /s。
随着技术的发展,对该规范进行了多次补充与更新,现在有五种运行速度模式,如表(2)所示:表(2)I2C总线传输速度模式二、I2C总线协议内容1I2C Bus 只要求两条双向线路:串行数据线(serial data SDA)与串行时钟线SCL(serialclock SCL),两条线都是双向传输的。
每个连接到总线的器件都有唯一的地址,主控制器发出的控制信息分为地址码和控制量两部分,地址码用来选择需要控制的I2C设备,控制量包含类别(写与读)2I2C总线是一种多控制器总线,总线上可以连接多个控制器和多个从机,这些控制器都可以发起对总线的控制,通过仲裁机制,同一个时刻,只能有一个控制器获得控制权,其他控制器轮流获取总线的控制权。
I2C总线协议中文版PDF
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-19921992 I2C总线规范的这个版本有以下的修正• 删除了用软件编程从机地址的内容因为实现这个功能相当复杂而且不被使用• 删除了低速模式实际上这个模式是整个I2C总线规范的子集不需要明确地详细说明• 增加了快速模式它将位速率增加4倍到达400kbit/s快速模式器件都向下兼容即它们可以在0~100kbit/s的I2C总线系统中使用• 增加了10位寻址允许1024个额外的从机地址• 快速模式器件的斜率控制和输入滤波改善了EMC性能注意100kbit/s的I2C总线系统或100kbit/s器件都没有改变1.2 版本2.0-1998I2C总线实际上已经成为一个国际标准在超过100种不同的IC上实现而且得到超过50家公司的许可但是现在的很多应用要求总线速度更高电源电压更低这个更新版的I2C总线规范满足这些要求而且有以下的修正• 增加了高速模式Hs模式它将位速率增加到3.4Mbit/s Hs模式的器件可以和I2C总线系统中快速和标准模式器件混合使用位速率从0~3.4Mbit/s• 电源电压是2V或更低的器件的低输出电平和滞后被调整到符合噪声容限的要求而且保持和电源电压更高的器件兼容• 快速模式输出级的0.6V 6mA要求被删除• 新器件的固定输入电平被总线电压相关的电平代替• 增加了双向电平转换器的应用信息1.3 版本2.1-2000I2C总线规范的V2.1版有以下微小的修改• 在Hs模式的重复起始条件后可以延长时钟信号SCLH见13.2节的图2225和32• Hs模式中的一些时序参数变得更随意见表6和表71.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 2C 应用的两个例子a 高性能的高度集成电视bDECT 无绳电话基站2.2 厂商的得益符合I 2C 总线的IC 不只帮助了设计者它们也使设备厂商得到很多益处因为• 简单的两线串行I 2C 总线将互联减到最小因此IC 的管脚更少而且PCB 的线路也减少结果使PCB 更小和更便宜• 完全完整的I 2C 总线协议不需要地址译码器和其他胶合逻辑• I 2C 总线的多主机功能允许通过外部连接到生产线快速测试和调整最终用户的设备•符合I 2C 总线的IC 提供SO 小型VSO 超小型以及DIL 封装甚至减少了IC 的空间要求这些只是一些益处另外兼容I 2C 总线的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 2C 总线的可能性意味着超过一个主机可以同时尝试初始化传输数据为了避免由此产生混乱发展出一个仲裁过程它依靠线与连接所有I 2C 总线接口到I 2C 总线如果两个或多个主机尝试发送信息到总线在其他主机都产生的情况下首先产生一个1的主机将丢失仲裁仲裁时的时钟信号是用线与连接到SCL 线的主机产生的时钟的同步结合关于仲裁的更详细信息请参考第8章图2 使用两个微控制器的I 2C 总线配置举例在I 2C 总线上产生时钟信号通常是主机器件的责任当在总线上传输数据时每个主机产生自己的时钟信号主机发出的总线时钟信号只有在以下的情况才能被改变慢速的从机器件控制时钟线并延长时钟信号或者在发生仲裁时被另一个主机改变5总体特征SDA 和SCL 都是双向线路都通过一个电流源或上拉电阻连接到正的电源电压见图3当总线空闲时这两条线路都是高电平连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能I 2C 总线上数据的传输速率在标准模式下可达100kbit/s 在快速模式下可达400kbit/s 在高速模式下可达3.4Mbit/s 连接到总线的接口数量只由总线电容是400pF 的限制决定关于高速模式主机器件的信息请参考第13章6位传输由于连接到I 2C 总线的器件有不同种类的工艺CMOS NMOS 双极性逻辑0低和1高的电平不是固定的它由V DD 的相关电平决定见第15章的电气规范每传输一个数据位就产生一个时钟脉冲6.1 数据的有效性SDA 线上的数据必须在时钟的高电平周期保持稳定数据线的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变见图4DEVICE 1DEVICE 2图3 标准模式器件和快速模式器件连接到I 2C 总线data line stable;data validchange of data allowedSDASCL图4 I 2C 总线的位传输6.2 起始和停止条件 在I 2C 总线中唯一出现的是被定义为起始S 和停止P 条件见图5的情况其中一种情况是在SCL 线是高电平时SDA 线从高电平向低电平切换这个情况表示起始条件当SCL 是高电平时SDA 线由低电平向高电平切换表示停止条件起始和停止条件一般由主机产生总线在起始条件后被认为处于忙的状态在停止条件的某段时间后总线被认为再次处于空闲状态总线的空闲状态将在第15章详细说明如果产生重复起始Sr条件而不产生停止条件总线会一直处于忙的状态此时的起始条件S和重复起始Sr条件在功能上是一样的见图10因此在本文档的剩余部分符号S 将作为一个通用的术语既表示起始条件又表示重复起始条件除非有特别声明的Sr如果连接到总线的器件合并了必要的接口硬件那么用它们检测起始和停止条件十分简便但是没有这种接口的微控制器在每个时钟周期至少要采样SDA 线两次来判别有没有发生电平切换SDASCLPSTOP conditionSDASCLSSTART 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 2C 总线的响应8仲裁和时钟发生8.1 同步所有主机在SCL 线上产生它们自己的时钟来传输I 2C 总线上的报文数据只在时钟的高电平周期有效因此需要一个确定的时钟进行逐位仲裁时钟同步通过线与连接I 2C 接口到SCL 线来执行这就是说SCL 线的高到低切换会使器件开始数它们的低电平周期而且一旦器件的时钟变低电平它会使SCL 线保持这种状态直到到达时钟的高电平见图8但是如果另一个时钟仍处于低电平周期这个时钟的低到高切换不会改变SCL 线的状态因此SCL 线被有最长低电平周期的器件保持低电平此时低电平周期短的器件会进入高电平的等待状态C LK 1CLK 2SCLstart counting图8 仲裁过程中的时钟同步当所有有关的器件数完了它们的低电平周期后时钟线被释放并变成高电平之后器件时钟和SCL 线的状态没有差别而且所有器件会开始数它们的高电平周期首先完成高电平周期的器件会再次将SCL 线拉低这样产生的同步SCL 时钟的低电平周期由低电平时钟周期最长的器件决定而高电平周期由高电平时钟周期最短的器件决定8.2 仲裁主机只能在总线空闲的时侯启动传输两个或多个主机可能在起始条件的最小持续时间t HD;STA内产生一个起始条件结果在总线上产生一个规定的起始条件当SCL 线是高电平时仲裁在SDA 线发生这样在其他主机发送低电平时发送高电平的主机将断开它的数据输出级因为总线上的电平与它自己的电平不相同仲裁可以持续多位它的第一个阶段是比较地址位有关的寻址信息请参考第10章和第14章如果每个主机都尝试寻址相同的器件仲裁会继续比较数据位如果是主机发送器或者比较响应位如果是主机接收器因为I 2C 总线的地址和数据信息由赢得仲裁的主机决定在仲裁过程中不会丢失信息丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾由于Hs 模式的主机有一个唯一的8位主机码因此一般在第一个字节就可以结束仲裁见第13章 如果主机也结合了从机功能而且在寻址阶段丢失仲裁它很可能就是赢得仲裁的主机在寻址的器件因此丢失仲裁的主机必须立即切换到它的从机模式图9显示了两个主机的仲裁过程当然可能包含更多的内容由连接到总线的主机数量决定此时产生DATA1的主机的内部数据电平与SDA 线的实际电平有一些差别如果关断数据输出这就意味着总线连接了一个高输出电平这不会影响由赢得仲裁的主机初始化的数据传输DATA 1DATA 2SDASCL图9 两个主机的仲裁过程由于I 2C 总线的控制只由地址或主机码以及竞争主机发送的数据决定没有中央主机总线也没有任何定制的优先权必须特别注意的是在串行传输时当重复起始条件或停止条件发送到I 2C 总线的时侯仲裁过程仍在进行如果可能产生这样的情况有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件也就是说仲裁在不能下面情况之间进行• 重复起始条件和数据位 • 停止条件和数据位 • 重复起始条件和停止条件从机不被卷入仲裁过程8.3 用时钟同步机制作为握手 时钟同步机制除了在仲裁过程中使用外还可以用于使能接收器处理字节级或位级的快速数据传输在字节级的快速传输中器件可以快速接收数据字节但需要更多时间保存接收到的字节或准备另一个要发送的字节然后从机以一种握手过程见图6在接收和响应一个字节后使SCL 线保持低电平迫使主机进入等待状态直到从机准备好下一个要传输的字节在位级的快速传输中器件例如对I 2C 总线有或没有限制的微控制器可以通过延长每个时钟的低电平周期减慢总线时钟从而任何主机的速度都可以适配这个器件的内部操作速率在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章。
IIC协议(I2C)
IIC协议(I2C)总结下IIC协议简介IIC,Inter-Integrated Circuit,集成电路总线,需要2根线连接拓扑,是半双工,适用于"字节型"设备。
特点拓扑如下:SDA —串行数据线SCL —串行时钟线通讯速率标准模式下100kb/s,快速模式下400kb/s连接到总线的IC最大负载电容400pf需要上拉电阻原因:- 总线空闲时要求是高电平IIC的数据线SDA是开漏的,无法输出高电平,只能输出低电平起到保护作用,如果某个器件拉低,并且不接上拉电阻就电源-地短路了对于不明确负载,IC不能很大的保证输出功率,接上拉电阻则负载所需功率由电源提供,保护IC上拉电阻选取见下面这篇文章关于IIC的上拉电阻时序开始信号、结束信号在SCL为高电平时,SDA由高跳变到低时开始信号在SCL为高电平时,SDA由低跳变到高时开始信号有效数据传输有效数据时SDA只能在SCL为低时发生变化,SCL为高时要保持不变,否则就成的开始结束信号应答、非应答主机每发生一个字节数据,主机总是需要等待从机给主机反馈一个应答或者非应答信号,确保数据是否接收。
在SCL第9个脉冲时之前把SDA设置为输入,检测SDA,为低是应答信号,为高则是非应答信号。
下面是用IO模拟的iic#include "myiic.h"uint16_t SlaveAddr; //设备地址uint8_t SlaveAddrLen=1;//设备地址字节数uint16_t SubAddr; //片内地址uint8_t SubAddrLen=2; //片内地址字节数uint8_t IICReadBuf[IIC_SIZE]={0}; //从IIC读到IICLen个数据缓存uint8_t IICWriteBuf[IIC_SIZE]={0};//待写入IICLen个数据缓存uint16_t IICLen; //IIC操作长度//IO方向设置void SDA_IN(void){GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = IIC_SDA_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(IIC_GPIO, &GPIO_InitStructure);}void SDA_OUT(void){GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = IIC_SDA_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(IIC_GPIO, &GPIO_InitStructure);}//初始化IIC//PA9-->IIC_SCL PA10-->IIC_SDAvoid IIC_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);/* Configure PA9 and PA10 in output pushpull mode */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(IIC_GPIO, &GPIO_InitStructure);IIC_SCL_H;IIC_SDA_H;}void IIC_close(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);/* Configure PA9 and PA10 in output pushpull mode */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(IIC_GPIO, &GPIO_InitStructure);IIC_SCL_H;IIC_SDA_H;}//产生IIC起始信号uint8_t IIC_Start(void){SDA_OUT(); //sda线输出IIC_SDA_H;IIC_SCL_H;delay_us(5);if(!READ_SDA) return 1; //SDA线为低电平则总线忙,退出IIC_SDA_L;//START:when CLK is high,DATA change form high to low delay_us(5);if(READ_SDA) return 1; //SDA线为高电平则总线出错,退出IIC_SCL_L;//钳住I2C总线,准备发送或接收数据return 0;}//产生IIC停止信号void IIC_Stop(void){SDA_OUT();//sda线输出IIC_SCL_L;IIC_SDA_L;//STOP:when CLK is high DATA change form low to high delay_us(5);IIC_SCL_H;delay_us(5);IIC_SDA_H;//发送I2C总线结束信号delay_us(5);}//等待应答信号到来//返回值:1,接收应答失败// 0,接收应答成功uint8_t IIC_Wait_Ack(void) {uint8_t ucErrTime=0; SDA_IN(); //SDA设置为输入IIC_SDA_H;delay_us(1); IIC_SCL_H;delay_us(1); while(READ_SDA){ucErrTime++;delay_us(1);if(ucErrTime>250){IIC_Stop();return 1;}}IIC_SCL_L;//时钟输出0 return 0;}//产生ACK应答void IIC_Ack(void){IIC_SCL_L;SDA_OUT();delay_us(3);IIC_SDA_L;delay_us(3);IIC_SCL_H;delay_us(3);IIC_SCL_L;delay_us(3);}//产生NACK应答void IIC_NAck(void){IIC_SCL_L;SDA_OUT();delay_us(3);IIC_SDA_H;delay_us(3);IIC_SCL_H;delay_us(3);IIC_SCL_L;delay_us(3);}//IIC发送一个字节//返回从机有无应答//1,有应答//0,无应答void IIC_Send_Byte(uint8_t txd) {uint8_t t;SDA_OUT();IIC_SCL_L;//拉低时钟开始数据传输for(t=0;t<8;t++){//IIC_SDA=(txd&0x80)>>7;if(((txd&0x80)>>7)){IIC_SDA_H;}else {IIC_SDA_L;}txd<<=1;delay_us(2); //对TEA5767这三个延时都是必须的IIC_SCL_H;delay_us(4);IIC_SCL_L;delay_us(2);}}//读1个字节,ack=0时,发送ACK,ack=1,发送nACK uint8_t IIC_Read_Byte(unsigned char ack){unsigned char i,receive=0;SDA_IN();//SDA设置为输入IIC_SCL_L;for(i=0;i<8;i++ ){IIC_SCL_L;delay_us(4);IIC_SCL_H;receive<<=1;if(READ_SDA)receive++;delay_us(4); //delay_us(1);}if (!ack)IIC_Ack();//发送ACKelseIIC_NAck(); //发送NACKreturn receive;}uint8_t IIC_WriteDate(uint8_t SlaveAddr,uint16_t SubAddr,uint8_t *pWriteData,uint16_t Len) {uint16_t i=0;IIC_Start();if(SlaveAddrLen==2){IIC_Send_Byte(((SlaveAddr&0xFF00)>>8));if(IIC_Wait_Ack()==1) return 1;delay_us(30);}IIC_Send_Byte(SlaveAddr&0x00FE);if(IIC_Wait_Ack()==1) return 1;delay_us(30);if(SubAddrLen==2){IIC_Send_Byte(((SubAddr&0xFF00)>>8));if(IIC_Wait_Ack()==1) return 1;delay_us(30);}IIC_Send_Byte((SubAddr&0x00FF));if(IIC_Wait_Ack()==1) return 1;delay_us(30);for(i=0;i<len;i++)< bdsfid="268" p=""></len;i++)<>{IIC_Send_Byte((pWriteData[i]));if(IIC_Wait_Ack()==1) return 1;delay_us(30);}IIC_Stop();return 0;}uint8_t IIC_ReadDate(uint8_t SlaveAddr,uint16_t SubAddr,uint8_t *pReadData,uint16_t Len) {uint8_t i=0;if(IIC_Start()==1) return 1; //Startif(SlaveAddrLen==2){IIC_Send_Byte(((SlaveAddr&0xFF00)>>8));if(IIC_Wait_Ack()==1) return 1;delay_us(30); //30us}IIC_Send_Byte(SlaveAddr&0x00FE);if(IIC_Wait_Ack()==1) return 1;delay_us(30);if(SubAddrLen==2){IIC_Send_Byte(((SubAddr&0xFF00)>>8));if(IIC_Wait_Ack()==1) return 1;delay_us(30);}IIC_Send_Byte((SubAddr&0x00FF));if(IIC_Wait_Ack()==1) return 1;delay_us(30);IIC_Start();if(SlaveAddrLen==2){IIC_Send_Byte(((SlaveAddr&0xFF00)>>8));if(IIC_Wait_Ack()==1) return 1;delay_us(30);}IIC_Send_Byte(((SlaveAddr&0x00FE)|0x01)); if(IIC_Wait_Ack()==1) return 1;delay_us(30);for(i=0;i<(Len-1);i++){pReadData[i]=IIC_Read_Byte(0);delay_us(30);}pReadData[Len-1]=IIC_Read_Byte(1); delay_us(30);IIC_Stop();return 0;}uint8_t IIC_StateCheck(uint8_t SlaveAddr) {if(IIC_Start()==1){IIC_Stop();return 1;}if(SlaveAddrLen==2){IIC_Send_Byte(((SlaveAddr&0xFF00)>>8)); if(IIC_Wait_Ack()==1) {IIC_Stop(); return 1;} delay_us(30);}IIC_Send_Byte(SlaveAddr&0x00FE);if(IIC_Wait_Ack()==1) {IIC_Stop(); return 1;} delay_us(30);IIC_Stop();return 0;}#ifndef __MYIIC_H#define __MYIIC_H#include "stm32f0xx.h"#include "delay.h"//PA9-->IIC_SCL PA10-->IIC_SDA#define IIC_GPIO GPIOA#define IIC_SCL_PIN GPIO_Pin_9#define IIC_SDA_PIN GPIO_Pin_10#define IIC_SIZE 128extern uint16_t SlaveAddr; //设备地址extern uint8_t SlaveAddrLen;//设备地址字节数extern uint16_t SubAddr; //片内地址extern uint8_t SubAddrLen; //片内地址字节数extern uint8_t IICReadBuf[IIC_SIZE]; //从IIC读到IICLen个数据缓存extern uint8_t IICWriteBuf[IIC_SIZE];//待写入IICLen个数据缓存extern uint16_t IICLen; //IIC操作长度//IO操作函数IIC_SCL_H#define IIC_SCL_L GPIO_WriteBit(IIC_GPIO,IIC_SCL_PIN,(BitAction)0) //SCL #define IIC_SCL_H GPIO_WriteBit(IIC_GPIO,IIC_SCL_PIN,(BitAction)1)#define IIC_SDA_L GPIO_WriteBit(IIC_GPIO,IIC_SDA_PIN,(BitAction)0) //SDA #define IIC_SDA_H GPIO_WriteBit(IIC_GPIO,IIC_SDA_PIN,(BitAction)1)#define READ_SDA GPIO_ReadInputDataBit(IIC_GPIO, IIC_SDA_PIN) //输入SDA#define READ_SCL GPIO_ReadInputDataBit(IIC_GPIO, IIC_SCL_PIN)) //输入SCL//IIC所有操作函数void IIC_Init(void); //初始化IIC的IO口uint8_t IIC_Start(void); //发送IIC开始信号void IIC_Stop(void); //发送IIC停止信号void IIC_Send_Byte(uint8_t txd); //IIC发送一个字节uint8_t IIC_Read_Byte(unsigned char ack); //IIC读取一个字节uint8_t IIC_Wait_Ack(void); //IIC等待ACK信号void IIC_Ack(void); //IIC发送ACK信号void IIC_NAck(void); //IIC不发送ACK信号uint8_t IIC_StateCheck(uint8_t SlaveAddr);uint8_t IIC_WriteDate(uint8_t SlaveAddr,uint16_t SubAddr,uint8_t *pWriteData,uint16_t Len); uint8_t IIC_ReadDate(uint8_t SlaveAddr,uint16_t SubAddr,uint8_t *pReadData,uint16_t Len);#endif---------------------作者:jiang_2018来源:CSDN原文:https:///weixin_41572450/article/details/85052038 版权声明:本文为博主原创文章,转载请附上博文链接!。
快速简单理解i2c标准协议
快速简单理解i2c标准协议对于嵌入式开发的朋友来说,I2C协议实在是再熟悉不过了,有太多的器件,采用的都是通过I2C来进行相应的设置。
今天,我们就随便聊聊这个I2C协议。
I2C协议中最重要的一点是I2C地址。
这个地址有7位和10位两种形式。
7位能够表示127个地址,而在实际使用中基本上不会挂载如此多的设置,所以很多设备的地址都采用7位,所以本文接下来的说明都是基于此。
I2C还有一个很重要的概念,就是“主—从”。
对于从设备来说,它是啥都不干的,更不会自动发送数据;而主设备,则是起到控制作用,一切都是从它开始。
除了GND 以外,I2C有两根线,分别是SDA和SCL,所有的设备都是接到这两根线上。
那么,这些设备如何知道数据是发送给它们呢?这就得依靠前面所说到的地址了。
设备I2C的地址是固定的,比如0x50,0x60等等。
因为只能有127个地址,地址冲突是很常见的,所以一般设备都会有一个地址选择PIN,比如拉高时候为0x50,接地为0x60。
如果无论拉高还是接地,都和别的芯片有冲突,那该怎么办呢?答案是:凉拌,没办法。
遇到这种情况,只能换芯片了。
我们来看I2C协议中的数据传输时序图:SCL是时钟,SDA承载的是数据。
当SDA从1变动到0,而SCL 还是1时,表示开始数据传输。
接下来的7位,就是设备的地址。
紧接着的是读写标志,其为1时是读取,为0则是写。
如果I2C总线上存在着和请求的地址相对应的设备,则从设备会发送一个ACK信号通知主设备,可以发送数据了。
接到ACK信号后,主设备则发送一个8位的数据。
当传输完毕之后,SCL保持为1,SDA从0变换到1时,标明传输结束。
从这个时序图中可以看到,SCL很重要,并且哪个时钟沿是干嘛的,都是确定好的。
比如,前面7个必定是地址,第8个是读写标志,数据传输必须是8位,必须接个ACK信号等等。
前面的时序图并没有标明数据传输的方向,我们现在看看写操作的数据流向:网格的是主设备发送的,白色格子是从设备发送的。
I2C通讯协议说明
第一章 I²C通讯协议基本内容1.1I2C通讯协议简介由PHILIPS开发的一个简单的双向两线总线,实现有效的IC控制,这个总线就称为Inter IC或I2C总线。
现在I2C总线实际上已经成为一个国际标准,I2C 总线规范的版本也从1992年的VERSION 1.0经过1998年的VERSION 2.0发展到2000年的VERSION 2.1。
在加强功能的同时也在满足现在对总线速度更高,电源电压更低的要求。
I2C总线具有以下特性:1)只要求两条总线线路:一条串行数据线(SDA );一条串行时钟线(SCL)。
2)每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机从机关系软件设定地址;主机可以作为主机发送器或主机接收器。
3)它是一个真正的多主机总线。
如果两个或更多主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据被破坏。
4)串行的8 位双向数据传输位速率在标准模式下可达100kbit/s 。
快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s。
I2C 总线支持任何IC 生产过程(NMOS CMOS 双极性),两线――串行数据(SDA)和串行时钟(SCL)线在连接到总线的器件间传递信息。
每个器件都有一个唯一的地址编码,而且都可以作为一个发送器或接收器(由器件的功能决定)。
很明显地,存储器则既可以作接收器又可以作发送器。
除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机(见表1-1)。
主机在发送数据前负责对总线的初始化并产生允许传输的时钟信号。
此时,任何被寻址的器件都被认为是从机表1-1这里我们举个例子说明I2C总线的主机从机和接收器发送器的关系,但是这种关系并不是持久的,只是由当时的数据的传输方向决定,如下所示:1 假设微控制器A 要发送信息到微控制器B. 微控制器A(主机)寻址微控制器B(从机). 微控制器A(主机-发送器)发送数据到微控制器B(从机-接收器). 微控制器A 终止传输2 如果微控制器A 想从微控制器B 接收信息. 微控制器A(主机)寻址微控制器B(从机). 微控制器A(主机-接收器)从微控制器B(从机-发送器)接收数据. 微控制器A 终止传输1.2I2C工作原理1.2.1 I2C的起始和停止条件在I2C 总线中唯一出现的是被定义为起始S 和停止P 条件见图1-1 的情况其中一种情况是在SCL 线是高电平时,SDA 线从高电平向低电平切换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.1 设计人员的得益 ................................................................................................................. 4 2.2 厂商的得益......................................................................................................................... 5
7 传输数据 ................................................................................................................. 9
7.1 字节格式 ............................................................................................................................ 9 7.2 响应 ................................................................................................................................... 9
13.1 高速传输 ........................................................................................................................ 17 13.2 Hs 模式的串行数据传输格式.......................................................................................... 19 13.3 从 F/S 模式切换到 Hs 模式以及返回 .............................................................................. 20 13.4 低速模式中的快速模式器件............................................................................................ 21 13.5 串行总线系统的混合速度模式 ........................................................................................ 21
14.1 头两个字节位的定义 ...................................................................................................... 24 14.2 10 位寻址的格式 ............................................................................................................ 24 14.3 广播呼叫地址和 10 位寻址的起始字节 ........................................................................... 26
10.1 第一个字节的位定义 ...................................................................................................... 13 10.1.1 广播呼叫地址....................................................................................................... 14 10.1.2 起始字节 .............................................................................................................. 15 10.1.3 CBUS 的兼容性 ................................................................................................... 16
6.1 数据的有效性 ..................................................................................................................... 7 6.2 起始和停止条件 ................................................................................................................. 8
8 仲裁和时钟发生 .................................................................................................... 10
8.1 同步 ................................................................................................................................. 10 8.2 仲裁 ................................................................................................................................. 10 8.3 用时钟同步机制作为握手 ..................................................................................................11
9 7 位的地址格式..................................................................................................... 12 10 7 位寻址.............................................................................................................. 13
13.5.1 在混合速度总线系统中的 F/S 模式传输 ............................................................... 22 13.5.2 在混合速度总线系统中的 Hs 模式传输................................................................. 22 13.5.3 混合速度总线系统中电桥的时序要求 ................................................................... 24
11 标准模式 I2C 总线规范的扩展 ............................................................................. 16 12 快速模式 ............................................................................................................. 17 13 Hs 模式 ............................................................................................................... 17
1.1 版本 1.0-1992 .................................................................................................................... 3 1.2 版本 2.0-1998 .................................................................................................................... 3 1.3 版本 2.1-2000 .................................................................................................................... 3 1.4 购买 Philips 的 I2C 总线元件 .............................................................................................. 3