Skip to content

Latest commit

 

History

History
84 lines (76 loc) · 2.2 KB

IIC.md

File metadata and controls

84 lines (76 loc) · 2.2 KB

IIC

初始化:IIC的初始化为SDA和SCL均为高

IIC时序:

数据传输:开始SCL保持高电平,SDA由高变低

​ 结束SCL保持高电平,SDA由低变高

由此对应的两个函数:

iiC_STAR()
{
    SDA = 1;//保证在SCL为高电平期间只产生由高变低的变化
    SCL = 1;//拉高scl,让数据传输 
	SDA = 0;//由高变低,表示数据开始传输
    SCL = 0;//为SDA变化做准备
}
iic_STOP()
{
    SDA = 0;//同理
    SCL = 1;
    SDA = 1;
    
}

数据传输:

时序:SDA只能在SCL为低期间翻转变化,在SCL为高期间保持稳定,此时IIC采集SDA数据(SDA必须稳定) 信号响应:

单片机发完8bit数据后就不再驱动总线了(SDA引脚变输入),而SDA和SDL硬件设计时都有上拉电阻,所以这时候SDA变成高电平。那么在第8个数据位,如果外接IIC设备能收到信号的话接着在第9个周期把SDA拉低,那么处理器检测到SDA拉低就能知道外接IIC设备数据已经收到。IIC数据从最高位开始传输(小端传输)。

数据传输:

iic_WR_Bit()
{
    u8 temp,i;
 	for(i=0;i<8;i++)
    {
       
        SCL = 0;
        if(temp&0x80)
            SDA = 1;
        eles SDA = 0;
        temp =temp << 1;
        SCL = 1;//采集SDA数据
        SCL = 0;//传输完成后拉低(SDA才能变化)
        SDA = 1;//成功发送8bit数据,等待应答
    }    
}    

信号应答:

iic_Check()
{
    u8 i;
    SCL = 1;
    while(SDA==1 && i<255)i++;//检测SDA是否为高电平
    SCL = 0;//拉低,SDA可变化
}

image-20200907055351100

写数据时序:

IIC要写入数据,首先要发送开始信号,然后写操作芯片寻址(寻找到后应答,代表设备正常,接着在进行片内子地址寻址address,同样写了8bit后进入应答,最后写入数据,进入应答)

PS:本片为草稿