您好,欢迎来到微智科技网。
搜索
您的当前位置:首页I2C总线时序详解

I2C总线时序详解

来源:微智科技网


I2C总线时序详解

I2C总线位传输 由于连接到I2C 总线的器件有不同种类的工艺(CMOS、NMOS、双极性),逻辑0(低)与逻辑1(高)的电平不就是固定的,它由电源VCC的相关电平决定,每传输一个数据位就产生一个时钟脉冲。

数据的有效性

SDA 线上的数据必须在时钟的高电平周期保持稳定。数据线的高或低电平状态只 有在SCL 线的时钟信号就是低电平时才能改变 。

I2C位传输数据有效性

起始与停止条件

SCL 线就是高电平时,SDA 线从高电平向低电平切换,这个情况表示起始条件;

SCL 线就是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件。

起始与停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态

起始与停止条件

,在停止条件的某段时间后总线被认为再次处于空闲状态。

如果产生重复起始条件而不产生停止条件,总线会一直处于忙的状态,此时的起始条件(S)与重复起始条件(Sr) 在功能上就是一样的。

I2C总线数据传输 字节格式

发送到SDA 线上的每个字节必须为8 位,每次传输可以发送的字节数量不受。每个字节后必须跟一个响应位。首先传输的就是数据的最高位(MSB),如果从机要完成一些其

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

应答响应

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

在响应的时钟脉冲期间,接收器必须将SDA 线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。

通常被寻址的接收器在接收到的每个字节后,除了用CBUS 地址开头的数 。

I2C总线数据传输与应答

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

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

如果传输中有主机接收器,它必须通过在从机不产生时钟的最后一个字节不产生一个响应,向从机发送器通知数据结束。从机发送器必须释放数据线,允许主机产生一个停止或重复起始条件。

寻址方式 7位寻址

第一个字节的头7 位组成了从机地址,最低位(LSB)就是第8 位,它决定了传输的

普通的与带重复开始条件的7位地址格式

方向。第一个字节的最低位就是“0”,表示主机会写信息到被选中的从机;“1”表示主机会向从机读信息,当发送了一个地址后,系统中的每个器件都在起始条件后将头7 位与它自己的地址比较,如果一样,器件会判定它被主机寻址,至于就是从机接收器还就是从机发送器,都由R/W 位决定。

10位寻址

10位寻址与7 位寻址兼容,而且可以结合使用。

10位寻址采用了保留的1111XXX 作为起始条件(S),或重复起始条件(Sr )的后第一个字节的头7 位。

10 位寻址不会影响已有的7 位寻址,有7 位与10 位地址的器件可以连接

I2C总线10位地址格式

到相同的I2C 总线。它们都能用于标准模式(F/S)与高速模式(Hs)系统。

保留地址位1111XXX 有8 个组合,但就是只有4 个组合11110XX 用于10 位寻址,剩下的4个组合11111XX 保留给后续增强的I2C 总线。

10 位从机地址就是由在起始条件(S) 或重复起始条件(Sr )后的头两个字节组成。

第一个字节的头7 位就是11110XX 的组合,其中最后两位(XX) 就是10 位地址的两个最高位(MSB)。

第一个字节的第8 位就是R/W 位,决定了传输的方向,第一个字节的最低位就是“0”表示主机将写信息到选中的从机,“1 ”表示主机将向从机读信息。

如果R/W 位就是“0 ”,则第二个字节就是10 位从机地址剩下的8 位;如果R/W 位就是“1” 则下一个字节就是从机发送给主机的数据。

编辑本段快速与高速模式 快速模式

快速模式器件可以在400kbit/s 下接收与发送。最小要求就是:它们可以与400kbit/s

传输同步,可以延长SCL 信号的低电平周期来减慢传输。快速模式器件都向下兼容,可以与标准模式器件在0~100kbit/s 的I2C 总线系统通讯。但就是,由于标准模式器件不向上兼容,所以不能在快速模式I2C 总线系统中工作。快速模式I2C 总线规范与标准模式相比有以下额外的特征:

1、最大位速率增加到400kbit/s;

2、调整了串行数据(SDA) 与串行时钟(SCL )信号的时序;

3、快速模式器件的输入有抑制毛刺的功能,SDA 与SCL输入有施密特触发器;

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

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

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

高速模式

高速模式(Hs 模式)器件对I2C 总线的传输速度有具大的突破。Hs 模式器件可以在高达3、4Mbit/s 的位速率下传输信息,而且保持完全向下兼容快速模式或标准模式(F/S 模式)器件,它们可以在一个速度混合的总线系统中双向通讯。

Hs 模式传输除了不执行仲裁与时钟同步外,与F/S 模式系统有相同的串行总线协议与数据格式。

高速模式下I2C 总线规范如下:

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

2、在多主机系统的Hs 模式中,不执行仲裁与时钟同步,以加速位处理能力。仲裁过程一般在前面用F/S 模式传输主机码后结束;

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

4、可以选择Hs 模式器件有内建的电桥。在Hs 模式传输中,Hs 模式器件的高速数据(SDAH)与高速串行时钟(SCLH )线通过这个电桥与F/S 模式器件的SDA 与SCL 线分隔开来。减轻了SDAH 与SCLH 线的电容负载,使上升与下降时间更快;

5、Hs 模式从机器件与F/S 从机器件的唯一差别就是它们工作的速度。Hs 模式从机在SCLH 与SDAH输出有开漏输出的缓冲器。SCLH 管脚可选的下拉晶体管可以用于拉长SCLH 信号的低电平,但只允许在Hs 模式传输的响应位后进行;

6、Hs 模式器件的输出可以抑制毛刺,而且SDAH 与SCLH 输出有一个施密特触发器;

7、Hs 模式器件的输出缓冲器对SDAH 与SCLH 信号的下降沿有斜率控制功能。[1]

1/**********************************************************

** 函数名 :读一个字节数据

** 入口参数: 无

** 注意 :

** 说明 :

***********************************************************/

uchar I2cReadByte( void )

{

uchar rbyte = 0;

uchar i = 0;

for(i = 0; i < 8; i++ )

{

rbyte = rbyte << 1; //非常注意、、、此语句不放在循环体内最后、

SDA = 1; //SDA为输入

SCL = 1;

NOP_5;

if( SDA == 1 )

rbyte = rbyte | 0x01;

SCL = 0;

}

return rbyte;

}

2从地址读数据

第249行为什么还要加一个I2Cstart()?

3为什么循环变量定义为uchar类型?

4写字节子程序

void I2c_Write_n( uchar DeviceAddress, uchar ByteAddress, uchar *Wdata, uchar n)

第273行,为什么不与读子程序(第250行)一样,将最后一位变成零呢?

5程序454行——456行,十位之后就加小数点,好像不对!!

6 uchar I2cReadDataFromAddr( uchar DeviceAddress, uint ByteAddress )

程序第

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务