微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > I2C总线注意要点

I2C总线注意要点

时间:12-15 来源:互联网 点击:
1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL。


2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器。

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


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

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


6、数据传输必须带响应,相关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间发送器释放SDA线(高)。响应的时钟脉冲期间,接收器必须将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。


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

voidI2C_delay(void)

{

u8i=200;

while(i)

{

i--;

}

}

voidI2C_Start(void)

{

SDA_H;

I2C_delay();

SCL_H;//SCL线是高电平时,SDA线从高电平向低电平切换,总线开始

I2C_delay();

SDA_L;

I2C_delay();

SCL_L;

I2C_delay();

}

voidI2C_Stop(void)

{

SDA_L;

I2C_delay();

SCL_H;//SCL线是高电平时,SDA线由低电平向高电平切换,总线结束。

I2C_delay();

SDA_H;

I2C_delay();

}

//等待ACK应答

voidWaitACK1(void)

{

u8errtime=225;

SDA_IN();//设置SDA端口为输入模式

I2C_delay();

SCL_H;

I2C_delay();

while(SDA_read)//SCL拉高后,等待SDA被拉低(ACK)

{

errtime--;

if(errtime==0)

{

I2C_Stop();

SDA_OUT();

break;

}

}

SCL_L;

SDA_OUT();

I2C_delay();

}

//写入单字节数据

voidWritebyte(unsignedcharData)

{

unsignedchari;

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

{

if((Data

{

SDA_H;

}

else

{

SDA_L;

}

I2C_delay();

SCL_H;

I2C_delay();

SCL_L;

}

SDA_L;

I2C_delay();

WaitACK1();

I2C_delay();

}

上一篇:I2S总线规范
下一篇:USB标准设备请求

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top