I2C总线的结构与工作原理

更新时间:2024-05-30 12:29:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

I2C总线的结构与工作原理

2.1概述

2.1.1 I2C总线在单片机应用系统设计中的意义

现代消费类产品、通讯类产品、仪器仪表、工业测控系统中,逐渐形成了以一个或 多个单片机组成的智能系统,这些系统硬件结构都有相似之处:

1.单片机电路已日趋简单化和标准化。通常是由单片机(MICROCONTROLLER)、程序存储器(EPROM)、数据存储器(SRAM)构成的三片体系,或采用有在片程序存储器的单片机与数据存储器构成的二片体系,以及单片机与通用外围接口器件(PSD)构成的最简单体系。

2. 都有一些外围通用电路,如EEPROM、I/O口、A/D、D/A、日历时钟等外围器件和键盘、LED/LCD显示器、打印机接口等外围设备模块等。

3.面对系统特殊应用的一些电路,如无线电、电视、音像系统中的数字协调、编码、解码、图象处理、频率合成、音调控制、立体声处理等。

在上述的一些电路中,除与单片机直接相关的程序存储器、并行扩展的数据存储器外,单片机对许多外围电路之间主要是实现控制功能,而且许多外设并不要求很高的数据传送速度。为了简化系统,提高系统的可靠性,缩短产品开发周期,增加硬件结构的灵活性,Philips公司推出了一种高效、可靠、方便的串行扩展总线I2C总线。

在单片机应用系统中推广I2C总线后将会大大改变单片机应用系统结构性能、对单片机的应用开发带来以下好处: 可最大限度地简化结构。二线制的I2C串行总线使得各电路单元之间只需最简单的连接,而且总线接口都集成在器件中,不需另加总线接口电路。电路的简化省去了电路板上大量走线,减少电路板面积,提高了可靠性,降低了成本。

可实现电路系统的模块化、标准化设计。在I2C总线上各单元电路除了个别中断引线外,相互之间没有其他连线,用户常用的单元电路基本上与系统电路无关,故极易形成用户自己的标准化、模块化设计。 标准I2C总线模块的组合开发方式大大地缩短了新品的开发周期。

I2C总线各节点具有独立的电器特性,各节点单元电路能在相互不受影响的情况下,甚至在系统供电情况下,接入或撤除。 I2C总线系统构成具有最大的灵活性。系统该型设计、或对已加工好的电路板需扩展功能时,对原有设计及电路板系统影响最小。

I2C总线系统可方便地对某一接点电路进行故障诊断与跟踪,有极好的可维护性

目前Philips及I2C总线器件,除带有I2C总线单片机、常用的通用外围器件外,在家电产品、电讯、电视、音像产品中已发展成套I2C总线器件,在这些部门中I2C总线系统已得到了广泛的应用。 2.1.2 I2C总线的一般应用特性

I2C总线系统中,带有I2C总线的单片机,其I2C总线输入输出口的电器结构、相关的特殊功能寄存器(SFR)设置以及所提供的标准程序模块,为用户掌握I2C总线的系统设计和应用软件的编制带来极大的方便。

I2C总线的串行数据传送与一般UART的串行数据传送无论从借口电器特性、传送状态管理以及程序编制特点都有很大的不同,了解这些特点十分重要。

1. 二线传输。I2C总线上所有的节点,如主器件(单片机,微处理器)、外围器件、借口模块等都连到同名端的 SCL上。

2. 系统中有多个主器件时,这些器件都可作总线的主控制器(无中心主机),I2C总线工作时任何一个主件都可成为主控制器,多机竞争时的时钟同步与总线仲裁都由硬件与标准软件模块自动完成,无须用户介入。

3.I2C总线传输时,采用状态码的管理方法。对应于总线数据传输时的任何一种状态,在状态寄存器中会出现相应的状态码,并且会自动进入响应的状态处理程序中进行自动处理,无须用户介入,用户只须将Philips公司提供的标准状态处理器一定的空间即可。

4.系统中所有外围器件及模块采用器件地址及引脚地址的编码方法。系统中主控制器对任何节点的寻址采用纯软件寻址方法,避免了片选线的先连方法。系统中若有地址编码冲突可通过改变地址引脚的电平设置来解决。

5.所有带I2C接口的外围器件都具有应答功能。片内有多少单元地址时,读数据、写时都有地址自动加1功能。这样,在I2C总线对某一器件读写多个字节时很容易实现自动操作,即准备好读、写入口条件后,只须启动I2C总线就可自动完成n个字节的读、写操作。

6.I2C总线电器接口为开漏晶体管组成,开路输出没有找到电源的钳位二级管,而连到I2C总线的每个器件上,其自身

SDA、

的电源可以独立(但须工地),总线上各个节点可在系统带电情况下接入或撤出。 2.1.3 I2C总线系统中的几个名词、术语

I2C总线系统的结构十分灵活。系统中除了可以挂接带有I2C总线接口的单片机、外围器件外,通过I2C总线扩展器PCD8584可以挂接不带I2C总线接口的单片机、微处理器。通过外围器件可以扩展许多通用外设借口模块。 I2C总线系统构成、总线系统中数据传送时的有关名词、术语规范如下: 一、I2C总线系统中硬件构成的节点

I2C总线系统中每个带有I2C总线接口或I2C总线扩展接口的器件或模块,接入I2C总线中均构成一个I2C总线节点,所有节点之间除公共电源及地外只通过SDA/SCK相连。

由于接入器件的不同,总线中的节点可分为主器件节点和外围器件节点。

主器件节点:系统中由单片机或微处理机构成的节点,这些节点能对I2C总线实现主动控制。

外围器件节点:系统中由不含 CPU的外围器件构成的节点。由于不含CPU,这些节点无法实现对I2C总线的主动控制。 二、I2C总线工作时的主动控制器

主控器:I2C总线工作时,任何一个主器节点都能对总线实现控制,当某个主器件节点控制了总线时,称为主控器。主控器完成一次传输过程的初始化、发送时钟信号及传输终止信号。 被控器:被控器寻址的器件称为被控器。

I2C总线系统中,主器件可作为主控器也可作为被控器,而外围器件只能作为被控器。 三、据传输中的接受/发送器

I2C总线系统中用发送器与接收器来表明数据传输的发送方与接收方。 发送器:总线上发送数据的器件。 接收器:总线上接收数据的器件。

I2C总线上的所有节点都可以成为发送器或接收器。 四、主竞争中的仲裁与同步

在I2C总线系统中可以有多个主器件节点。如果某些主器件节点在运行时都企图控制总线,则形成多主竞争状态,I2C总线系统可保证多个主器件节点企图控制总线时不会丢失信息。在总线竞争过程中进行总线控制权的仲裁和时钟同步,仲裁结果只允许其中一个主器件继续战局总线。

多主竞争:多个主器件节点同时企图控制总线。在多主主状态下总线信息不会丢失。

仲裁:在多主竞争状态时的裁决过程。裁决的结果只允许其中一个主器节点成为主控器继续占据总线。仲裁过程中总线上数据不丢失。

同步;多主竞争状态下将参与竞争的主器件的时钟信号进行同步处理。 2.2 I2C总线的基本原理

I2C总线的时钟线SCL和数据线SDA都是双向传输线。总线备用时SDA和SCL都必须保持高电平状态,只有关闭I2C总线时才使SCL钳位在低电平。在标准I2C模式下数据传送速率可达100kbit/s,高速模式下可达400kbit/s.总线的驱动能力受总线电容限制,不加驱动扩展时驱动能力为400pF。 2.2.1 I2C总线的接口电路

为了能使总线上所有电路的输出能实现线“与”的逻辑功能,各个I2C总线的接口电路的输出端必须是漏极开路或集电极开路结构,如图 2.1所示。输出端必须接上拉电阻。

图2.1I2C总线接口电路结构

2.2.2I2C总线的信号及时序定义

在I2C总线上每传输一位数据都有一个时钟脉冲相对应,其逻辑“0”和“1”的信号电平取决于该节点的正端电源VDD的电压。 数据的有效性

I2C总线数据传输时,在时钟线高电平期间数据线上必须保持有稳定的逻辑电平状态,高电平为数据1,低电平为数据0。只有在时钟线为低电平时,才允许数据线上的电平状态变化。如图2.2 所示。

图2.2I2C总线上的数据位传送 二、 总线数据传送的起始与停止

I2C总线数据传送有两种时序状态分别定义为起始信号和终止信号如图2.3所示.

图2.3I2C总线的起始信号和终止信号

起始信号:在时钟线保持高点平期间,数据线出现由高点平向低点平变化时将启动I2C总线,为I2C总线的起始信号. 终止信号:在时钟线保持高点平期间,数据线出现由低点平向高点平变化时将启动I2C总线,为I2C总线的终止信号. 起始信号与终止信号都是由主控制器产生.总线上带有I2C总线接口的器件很容易检测到这些信号.但是对于不具备这些硬件接口的一些单片机来说,为了能准确地检测到这些信号,必须保证在总线的一个时钟周期内对数据线至少进行两次采样. 三、 总线信号时序要求

为了保证I2C总线数据的可靠传送,对总线上的信号时序作了严格的规定,其时序定义如图2.4所示.图中对 主要信号时序作了定义,并在表2.1中给出了具体数据.表中给出的SCL时钟信号最小高电平和低电平周期决定了 器件的最大数据传输率,标准模式为100Kbit/s,高速模式为400Kbit/s.标准模式和高速模式的I2C总线器件都必须 能满足各自的最高数据传送速率要求.当然,实际数据传送时可以选择不同的数据传送速率,同时也可以采取延长 SCL低电平周期来控制数据传送速率.

图2.4I2C总线的时序定义 表2.1I2C总线信号定时要求

参数 符号 标准模式 最大值 SCL时钟频率 在一个终止信号和起始信号之间必须空闲的时间 起始信号保持时间(在这段时间过后可产生第一个时钟脉冲) SCL时钟信号低电平周期 SCL始终信号高电平周期 一个重复信号的建立时间 数据保持时间:与CBUS兼容的主控器I2C总线器件 数据建立时间 Tsu;dat SDA和SCL信号的上升时间 SDA和SCL信号的下降时间 终止信号的建立时间 Tsu;sto 总线上每条线的负载电容 注:所有数值均以V1Hmin和ViLmax电平为参考.

Cb — 400 — 400 pF 4.0 — Tf — 300 Tr — 1000 20+0.1Cb4) 20+0.1Cb4) 0.6 — Us 300 Ns 300 Ns 250 — 1003) — ns Tsu;sta Thd;dat 5.0 01) — — — 01) — 0.92) Us Us 4.7 — 0.6 — Us Thigh 4.0 — 0.6 — Us Tlow 4.7 — 1.3 — Us Thd;sta 4.0 — 0.6 — Us Fscl Tbuf 0 4.7 最小值 100 — 高速模式 最大值 0 1.3 最小值 400 — 单位 kHz us 1)为了跨过SCL信号下降沿中的未定义区域,所有的器件都必须在内部对SDA信号提供一个至少为300ns的保持时间. 2)只有在器件没有延长SCL信号低电平周期(tlow)的情况下才必须满足thd,dat最大的限制.

3)一个高速模式的I2C总线器件可以用在一个标准模式的I2C总线系统中,但是关于TSU,DAT>=250NS的要求也同时 必须得到满足.反之,它必须在释放SCL以前(根据标准模式下I2C总线规范)提前一定时间TR+TSU;DAT=1000+250NS,先在 SDA线上输出下一比特.

4)CB表示以pF为单位的每条总线的总电容值. 2.2.3 I2C总线上的数据传送格式 一、I2C总线上的数据传送

I2C总线上传送的每一个字节均为8位,但每启动一次I2C总线,其后的数据传输字节数是没有限制的.每传送一个字节后都必须更岁一个应答位,并且首先发送的数据位为最高位在全部数据传送结束后主控制器发送终止信号,如图2.5所示.

图2.5 I2C总线上的数据传送

二、数据传送时的总线控制

冲图中可以看到,没有时钟信号时数据传送将停止进行,接口的线与特征将使SCL在低电平时钳住总线. 这种情况可以用于当接收到一个字节数据后要进行一些其它工作而无法立即接收下个数据时,迫使总线进入 等待状态,直到接收器准备好接收新数据时,接收器再释放时钟线使数据传送得以继续正常进行.例如,当接收器 接收完主控制器的一个字节数据后,产生中断信号并进行中断处理,中断处理完毕才能接收下一个字节数据,这时 接收器在中断处理时将钳住SCL为低电平直到中断处理完毕才释放SCL. 三、应答信号

I2C总线数据传送时,每传送一个字节数据后都必须有应答信号,与应答信号想对应的时钟由主控器产生,这时 发送器必须在这一时钟位上释放数据线,使其处于高电平状态,以便接收器在这一位上送出应答信号,如图2.6所示. 应答信号在第9个时钟位上出现,接收器输出低电平为应答信号(A),输出高电平则为非应答信号(/A). 由于某中原因,被控器不产生应答时,如被控器正在进行其它处理而无法接收总线上 的数据时,必须释放总线,将数据线只高电平,然后主控制器可通过产生一个停止信号 来终止总线数据传输.

当主控器接收数据时,接收到最后一个数据字节后,必须给被空发送器发送一个非应答位(A),使被空发送器释放 数据总线,以便主控制发送停止信号,从而终止数据传送. 四、数据传送格式

IC 总线数据传输时必须遵循规定的数据格式,如图为一次完整的数据传输格式。

2

图2.6I2C总线上的应答信号

图2.7I2C总线的一次完整的数据传送

按照总线规定,起始信号表明一次数据传输的开始,其后为寻址字节,寻址字节由高7位地址和最低1位方向位组成,方向位表明主控器和被控器数据传送方向,方向位为”0”时表明主控器对被控器的写操作,为”1” 时表明主控器对被控器的读操作.在寻址字节后是按照指定读、写操作的数据字节与应答位。在数据传送完成后主控器都必须发送停止信号。 总线上的数据传输有许多读、写组合方式。下面已简化的图解方式介绍三类数据传送格式。

1.主控器的写操作。主控器向被寻址的被控器发送n 个数据字节,整个传输过程中数据传送方向不变。其数据传送格式如下: S SLAW A Data1 A Data2 A Datan-1 A

其中 :主控器发送,被控器接收 :主控器接收,被控器发送 A:应答信号 A:非应答信号 S:起始信号 P:停止信号

SLAW:寻址字节(写)

Data1~datan:写入被控器的n个数据字节

2.主控器的读操作。主控器从被控器中读出n个字节的操作,整个传输过程中除寻址字节外,都是被控器发送,主控器接收的过程。数据传送的格式如下: S SLAW A Data1 A Data2 A Datan-1 A

其中SLAR:寻址字节(读)

Data1~datan:被主控器读出的n个字节

主控器发送停止信号前应发送非应答位,向被控器表明读操作结束。

3.主控器的读写操作。在一次数据传输过程中需要改变传送方向的操作,这时,起始信号和寻址字节都会重复一次,但两次读写方向正好相反.数据传送格式如下: S SLAW/R A Data1 A Data2 A Datan

DATA1 A DATA2 A …DATAN

其中 Sr:重复起始信号;

图中未表注数据字节的传输方向,其方向决定于寻址字节的方向位。

A/A P A/A Sr SLAR/W A Datan A P Datan A/A P 从上述数据传送格式可以看出:

无论何种方式起始、停止,寻址字节都由主控器发送,数据字节的传送方向则遵循寻址字节中方向位的规定,

寻址字节只表明器件地址及传送方向,器件内部的n个数据地址由器件设计者在该器件的IC 总线数据操作格式中指定第一个数据字节作为器件内的单元地址数据。并且设置地址自动加减功能。 每个字节传送都必须有应答信号相随。

IC 总线被控器在接收到起始信号后都必须复位它们的总线逻辑,以便对将要开始的被控器地址的传送进行预处理。 2.2.4 I2C总线的寻址约定

为了消除I2C总线系统中主控器与被控器的地址选择线,最大限度地简化总线连接线,I2C总线采用了独特的寻址约定,规定了起始信号后的第一个字节为寻址字节,用来寻址被控器件,并规定数据传送方向。 一、寻址字节的位定义

在I2C总线系统中,寻址字节由被控器的七位地址位(它占据了D7~D1位)和一位方向位(为D0位)组成.方向位为0时 表示主控器将数据写入被控器,为1时表示主控器从被控器读取数据.

主控器发送起始信号后,立即发送寻址字节,这时,总线上的所有器件都将寻址字节中的7位地址与自己器件地址想比较. 如果两者相同,则该器件认为被主控器寻址,并根据读,写为确定是被控发送器或被控接收器.

I2C总线系统中,主器件(单片机)作为被控器时,其7为从地址在I2C总线地址寄存器中给定,为纯软件地址.而非单片机类型的外围

器件地址完全由器件类型与引脚电平给定,即器件的7位地址由器件编号地址(高4位D7~D4)和引脚地址(低3位D3~D1)组成,如8位I/O

扩展器件PCF8574其器件编号地址为0111,引脚地址为A2,A1,A0.如果在I2C总线系统中PCF8574地址引脚A2,A1,A0皆接地,则该器件的

寻址字节为SLAW=70H,SLAR=71H.I2C总线上同一地址器件最大允许接入数量取决于可利用的地址引脚数. 二、寻址字节中的特殊地址

I2C总线地址统一由I2C总线委员会实行分配.其中两组编号地址0000和1111已被保留作特殊用途,如表2.2所示.I2C总线规约所给出

的这些能与其它规约混合使用,只有那些能够一这种格式和规约工作的I2C总线兼容器才允许对这些保留地址进行应答. 表2.2I2C 总线中的特殊字节

被控器地址 0000 000 0000 000 0000 001 0000 010 读/写 0 1 X X 用途 通用调用地址 起始字节 CBUS地址 为不同总线格式而保留的地址 0000 011 0000 1XX 1111 1XX 1111 0XX 1.广播地址

广播地址用于访问I2C总线上所有器件.但是,如果某个器件不需要主控器发送的广播数据时,则可以不对广播地址应答,并且忽略该地址.

反之,如果某器件需要广播地址中的数据,则必须对核地址进行应答,并成为一个被控接收广播寻址的第二个字节以及随后的数据字节.被控器

有能力处理这些数据时应进行时进行应答,否则忽略该字节并且不作应答. 广播寻址的内容是由第二个字节来设定的,其格式如下:

0 0 0 0 0 0 0 0 A X X X X X X X B A X X X X 10位被控器寻址 待定 2

2

1)B为0时的情况

B为0时第二字节有如下定义:

00000110(06H):被控制器地址的可编程部分由硬件进行复位和写入.在收到这两个字节的序列后,所有能响应通用地址的器件都将复位,并

装入其地址中的可编程部分.

00000100(04H):被控制器地址的可编程部分由硬件进行写入,在收到这两个字节的序列后,所有能响应广播寻址并通过硬件来定义

它们各自可编程部分的器件将锁定它们地址中的可编程部分,但不进行复位.

00000000(00H):该编码不允许用在第二字节.有关各种器件在广播寻址中的编程过程可参阅相应的资料. 第二字节的其余情况格式还未确定,各器件应忽略这些数据。 2)B为1时的情况

当B为1时,广播地址中的二个字节为硬件广播呼叫,它表示数据是一个硬件主空乏送、主控发出的,例如一个键盘控制器等,这些器件无法通过对它编程来发送一个所希望的被控器地址。由于硬件主控器无法事先知道送出的信息将传向哪个被控器,所以它只能通过发送这种硬件广播呼叫和自身的地址,以使系统识别它.硬件主控发送器的数据传送格式如下:

S 0000 A 主控器地址 1 A data A data A P 通用调用地址 │←第二字节 →│← n字节+应答 →│

第二个字节中的七位数据是硬件主控器的地址,这个地址可被总线上的一个主控器件所识别,并由它来处理硬件主控器发送的数据.如果硬件

主控器也能作为被控器工作,则硬件主控器地址就是它的被控器地址.

在一些系统中,广播寻址还可以有另外一种方式,即复位后,硬件主控发送器可以首先进入被控接收器工作方式,由系统配置一个主控制器来

通知数据传送对象的地址,在完成这个编程过程后,硬件主控器工作方式,其数据操作格式如下: 系统主控器将转移地址发送给硬件主控器

S 硬件主控器被接收器地址 W 硬件主控器将数据发送给所选择的被控接收器.

S 硬件主控器被接收器地址 W A data A data A/A P A 硬件主控器转移地址 X A P ∣←n字节+应答 →∣ 2.起始字节

起始字节是提供给无I2C总线接口的单片机查询I2C总线时使用的特殊字节.

通常单片机可以通过两种方法接入I2C总线.如果本身带有I2C总线的硬件接口,则可以通过编程来响应由I2C总线请求而产生的中断.单如果

单片机不具备这样的硬件接口时,则必须通过软件不断检测总线,以便及时响应总线的请求.显然,单片机监控总线或定时查询总线的单片机来说,

工作速度会减慢而与快速硬件电路之间产生一定差距,再这种情况下,I2C总线上的数据可以由一个较长的起始过程加以引导,如图2.8所示

图2.8起始字节引导过程

引导过程由起始信号S,起始字节,应答位,重复信号SR组成.

请求访问总线的主控器在向总线传送一个起始信号后,接着传送一个起始字节(00000001),另一个单片机可以有一个较低的采样率对SDA线

进行采样,直到起始字节中七个\信号中的一位被检测到为止,然后这个单片机即可转而以较高的采样速率对I2C总线的软

件查寻,以便发现

用于同步的第二个起始信号SR.

在收到第三个起始信号SR后,硬件接收器将复位,由此而忽略整个起始字节.

在起始字节后,会才生一个与应答信号相关的时钟脉冲,这仅仅是为了使总线的数据处理格式保持一致,不允许任何电路对起始字节进行应答. 3.CBUS地址

CBUS地址的设置使现有的CBUS接收器也可以接入I2C总线.CBUS发送器/接收器必须同时连接第三条信号线DLEN,并且省去I2C总线通讯中

的应答信号位.通常I2C总线上数据传输都是以8位为一字节的组合,而CBUS电路却采用了不同的数据格式.

由于在I2C总线和CBUS混合总线中,不允许I2C总线兼容器件响应CBUS信息.因此I2C总线约了一个特殊的CBUS地址(00000001*),没有任何

一个I2C总线器回响应这个地址.在传送了CBUS地址后,可以通过将DLEN变为有效,按CBUS的格式完成CBUS器件间的数据传输,在终止信号后,

所有的器件又重新准备接收数据.CBUS接收器/发送器数据传输格式如图2.9所示.

图2.9CBUS接收器/发送器的数据传送格式

主控发送器发送了CBUS地址后,可以按CBUS格式进行数据传送,整个传送过程由终止信号而停止并被总线上的所有器件所识别.

本文来源:https://www.bwwdw.com/article/xj96.html

Top