当前位置:
文档之家› I2C串行总线的组成及工作原理
I2C串行总线的组成及工作原理
8.1.2
I2C总线的数据传送
一、数据位的有效性规定
I2C总线进行数据传送时,时钟信号为高电平期间,数据 线上的数据必须保持稳定,只有在时钟线上的信号为低电 平期间,数据线上的高电平或低电平状态才允许变化。
二、起始和终止信号
SCL线为高电平期间,SDA线由高电平向低电 平的变化表示起始信号;SCL线为高电平期间, SDA线由低电平向高1
2、应用 闭环控制系统 用于远程数据采集的低功耗转换器 电池供电设备 在汽车、音响和TV应用方面的模拟数据采集
I2C起始
SCL 线是高电平时,SDA 线从高电平向低电平切换,这个 情况表示起始条件;
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();}
接收字节
unsigned char iic_recbyte(void) { unsigned char da; unsigned char i; for(i=0;i<8;i++) { SCL = 1; somenop; da <<= 1; if(SDA) da |= 0x01; SCL = 0; somenop; } return da; }
控制字节
D5,D4 模拟量输入选择: 00为四路单数入; 01为三路差分输入; 10 为单端与差分配合输入;11为模拟输出允许有效
读字节(AD)操作流程 在进行数据操作时: 首先是主控器发出起始信号; 然后发出寻址字节(写); 被控器做出应答后; 然后发出控制字节(写); 被控器做出应答后;
然后发出寻址字节(读); 被控器做出应答后; 主控器从被控器读出第一个数据字节,主控器发出应答; 主控器从被控器读出第二个数据字节,主控器发出应答; …… 主控器从被控器读出第n个数据字节,主控器发出非应答信号; 主控器发出停止信号。
四、总线的寻址 I2C总线协议有明确的规定:采用7位的寻址字 节(寻址字节是起始信号后的第一个字节)。 (1)寻址字节的位定义
D7~D1位组成从机的地址。D0位是数据 传送方向位,为“0”时表示主机向从机写数 据,为“1”时表示主机由从机读数据。
主机发送地址时,总线上的每个从机都将这7 位地址码与自己的地址进行比较,如果相同, 则认为自己正被主机寻址,根据R/T位将自己 确定为发送器或接收器。 从机的地址由固定部分和可编程部分组成。 在一个系统中可能希望接入多个相同的从机, 从机地址中可编程部分决定了可接入总线该类 器件的最大数目。如一个从机的7位寻址位有 4位是固定位,3位是可编程位,这时仅能寻 址8个同样的器件,即可以有8个同样的器件 接入到该I2C总线系统中。
8.2 80C51单片机I2C串行总线器件的接口 8.2.1 总线数据传送的模拟
主机可以采用不带I2C总线接口的单片机,如 80C51、AT89C2051等单片机,利用软件实现I2C 总线的数据传送,即软件与硬件结合的信号模拟。 一、典型信号模拟 为了保证数据传送的可靠性,标准的I2C总线的数 据传送有严格的时序要求。I2C总线的起始信号、终 止信号、发送“0”及发送“1”的模拟时序 :
下面讲基于IIC的集AD与DA一体的
—— PCF8591
1、概述
PCF8591
单电源供电 工作电压:2.5 V ~ 6 V 待机电流低 I2C总线串行输入/输出 通过3个硬件地址引脚编址 采样速率取决于I2C总线速度 4个模拟输入可编程为单端或差分输入 自动增量通道选择 模拟电压范围:VSS~VDD 片上跟踪与保持电路 8位逐次逼近式A/D转换 带一个模拟输出的乘法DAC
void iic_start(void) { SDA = 1; _nop_(); SCL = 1; somenop; SDA = 0; somenop; SCL = 0; }
I2C停止
SCL 线是高电平时,SDA 线由低电平向高电平切换,这个 情况表示停止条件。
void iic_stop(void) { SDA = 0; _nop_(); SCL = 1; somenop; SDA = 1; }
a、主机向从机发送数据,数据传送方向在整 个传送过程中不变:
注:有阴影部分表示数据由主机向从机传送,无阴影部分则 表示数据由从机向主机传送。 A表示应答, A非表示非应答(高电平)。S表示起始信号, P表示终止信号。。
b、主机在第一个字节后,立即从从机读数据
c、在传送过程中,当需要改变传送方向时, 起始信号和从机地址都被重复产生一次,但 两次读/写方向位正好反相。
起始和终止信号都是由主机发出的,在起始信号产生后, 总线就处于被占用的状态;在终止信号产生后,总线就处 于空闲状态。
连接到I2C总线上的器件,若具有I2C总线的硬件接口,则 很容易检测到起始和终止信号。
接收器件收到一个完整的数据字节后,有可能需要完成 一些其它工作,如处理内部中断服务等,可能无法立刻接收 下一个字节,这时接收器件可以将SCL线拉成低电平,从而 使主机处于等待状态。直到接收器件准备好接收下一个字节 时,再释放SCL线使之为高电平,从而使数据传送可以继续 进行。
PCF8591是单片、单电源低功 耗8位CMOS数据采集器件,具有4 个模拟输入、一个输出和一个串行 I2C总线接口。3个地址引脚A0、 A1和A2用于编程硬件地址,允许 将最多8个器件连接至I2C总线而不 需要额外硬件。器件的地址、控制 和数据通过两线双向I2C总线传输。
器件功能包括多路复用模拟输 入、片上跟踪和保持功能、8位模 数转换和8位数模拟转换。最大转 换速率取决于I2C总线的最高速率。
每个接到I2C总线上的器件都有唯一的地址。 主机与其它器件间的数据传送可以是由主机发送 数据到其它器件,这时主机即为发送器。由总线 上接收数据的器件则为接收器。 在多主机系统中,可能同时有几个主机企图启 动总线传送数据。为了避免混乱, I2C总线要通 过总线仲裁,以决定由哪一台主机控制总线。
在80C51单片机应用系统的串行总线扩展中, 我们经常遇到的是以80C51单片机为主机,其它 接口器件为从机的单主机情况。
主机在接收到一个字节后, 向从机作出应答
主机等待从机应答
void iic_ack(bit ackbit) { if(ackbit) SDA = 0; //应答 else SDA = 1; //非应答 somenop; SCL = 1; somenop; SCL = 0; }
当主机接收数据时,它收到最后一 个数据字节后,必须向从机发出一 个结束传送的信号。这个信号是由 对从机的“非应答”来实现的。然 后,从机释放SDA线,以允许主机 产生终止信号。
(2)数据帧格式 I2C总线上传送的数据信号是广义的,既包括地址 信号,又包括真正的数据信号。
在起始信号后必须传送一个从机的地址(7位), 第8位是数据的传送方向位(R/T),用“0”表示主 机发送数据(T),“1”表示主机接收数据(R)。 每次数据传送总是由主机产生的终止信号结束。但 是,若主机希望继续占用总线进行新的数据传送, 则可以不产生终止信号,马上再次发出起始信号对 另一从机进行寻址。 在总线的一次数据传送过程中,可以有以下几种 组合方式:
iic_sendbyte(0x90);
控制字节
控制字节用于实现器件的各种功能 如模拟信号由哪几个通道输入等 控 制字节存放在控制寄存器中 总线操作时为主控器发送的第二字节其格 式如下所示。
iic_sendbyte(0x03);
其中: D1D0两位是A/D通道编号: 00:通道0;01:通道1;10: 通道2;11:通道 3 D2:自动增量选择(有效位为1),每次A/D转换后通道号将 自动增加 D5,D4 模拟量输入选择: 00为四路单数入; 01为三路差分输入; 10 为单端与差分配合输入;11为模拟输出允许有效 D6:模拟输出使能,即DA使能
写字节(DA)操作流程 在进行数据操作时: 首先是主控器发出起始信号; 然后发出寻址字节(写); 被控器做出应答后; 然后发出控制字节(写); 被控器做出应答后;
主控器向被控器写入第一个数据字节,被控器回一个应答; 主控器向被控器写入第二个数据字节,被控器回一个应答;
……
主控器发出停止信号。
应答响应
PCF8591
3、引脚图 • AIN0~AIN3:模拟信号输入端。 • A0~A3:引脚地址端。 • VDD、VSS:电源端。(2.5~6V) • SDA、SCL:I2C 总线的数据线、时钟线。 • OSC:外部时钟输入端,内部时钟输出端。 • EXT:内部、外部时钟选择线,使用内部时 钟时 EXT 接地。 • AGND:模拟信号地。
bit iic_waitack(void) { SDA = 1; //P2.1作为输入口 somenop; SCL = 1;//拉高,准备检测SDA电平 somenop; //要大于4us if(SDA) //检测应答信号 { SDA=1 //无应答 SCL = 0; iic_stop();//主机终止IIC return 0; //返回0,退出 } else //有应答 { SCL = 0; return 1; //返回1,退出 } }
I2C串行总线概述
I2C总线是PHLIPS公司推出的一种串行总线,是具备多 主机系统所需的包括总线裁决和高低速器件同步功能的高 性能串行总线。
I2C总线只有两根双向信号线。一根是数据线SDA,另 一根是时钟线SCL。
I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均 为高电平。连到总线上的任一器件输出的低电平,都将使总 线的信号变低,即各器件的SDA及SCL都是线“与”关系。
I2C串行总线的组成及工作原理
结合AD/DA芯片PCF8591
I2C串行总线的组成及工作原理
采用串行总线技术可以使系统的硬件设计大大简化、系统 的体积减小、可靠性提高。同时,系统的更改和扩充极为容 易。 常用的串行扩展总线有: I2C (Inter IC BUS)总线, 如PCF8591,AT24C02 单总线(1-WIRE BUS), 如温度传感器18B20 SPI(Serial Peripheral Interface)总线, 如串行口 Microwire/PLUS等。 本课仅讨论I2C串行总线。