I2C的传输速率由什么决定?

核心提示总线最大电容。连接到相同总线上的IC数量只受总线最大电容的限制,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。I2C总线可以通过外部连线进行在线检测,便于

总线最大电容。

连接到相同总线上的IC数量只受总线最大电容的限制,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。

I2C总线可以通过外部连线进行在线检测,便于系统故障诊断和调试,故障可以立即被寻址,软件也利于标准化和模块化,缩短开发时间。

扩展资料:

时钟同步通过线与连接I2C 接口到SCL 线来执行。这就是说SCL 线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使SCL 线保持这种状态直到到达时钟的高电平。

但是如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变SCL 线的状态。因此SCL 线被有最长低电平周期的器件保持低电平。此时低电平周期短的器件会进入高电平的等待状态。

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

-I2C总线

#ifndef _iic_h_

#define _iic_h_

#define uchar unsigned char

#define uint unsigned int

#define Byte unsigned char

#define Word unsigned int

#define bool bit

#define true 1

#define false 0

extern void I2CStart(void);

extern void I2CStop(void);

extern bool WaitAck(void);

extern void SendAck(void);

extern void I2CSendByte(Byte ch);

extern Byte I2CReceiveByte(void);

extern void SomeNOP(void);

sbit SDA=P0^0;

sbit SCL=P0^1;

void SomeNOP(void)

{ _nop_();_nop_();_nop_();_nop_();

}

void I2CStart(void)

{

EA=0;

SDA=1; SCL=1; SomeNOP();//INI

SDA=0; SomeNOP(); //START

SCL=0;

}

void I2CStop(void)

{

SCL=0; SDA=0; SomeNOP(); //INI

SCL=1; SomeNOP(); SDA=1; //STOP

EA=1;

}

bool WaitAck(void)

{

uchar errtime=255;//因故障接收方无ACK,超时值为255。

SDA=1;SomeNOP();

SCL=1;SomeNOP();

while(SDA) {errtime--; if (!errtime) {I2CStop();SystemError=0x11;return false;}}

SCL=0;

return true;

}

void SendAck(void)

{

SDA=0; SomeNOP();

SCL=1; SomeNOP();

SCL=0;

}

void I2CSendByte(Byte ch)

{

uchar i=8;

while (i--)

{

SCL=0;_nop_();

SDA=(bit)(ch&0x80); ch<<=1; SomeNOP();

SCL=1; SomeNOP();

}

SCL=0;

}

Byte I2CReceiveByte(void)

{

uchar i=8;

Byte ddata=0;

SDA=1;

while (i--)

{

ddata<<=1;

SCL=0;SomeNOP();

SCL=1;SomeNOP();

ddata|=SDA;

}

SCL=0;

return ddata;

}

#endif

 
友情链接
鄂ICP备19019357号-22