当前位置: 移动技术网 > 网络运营>网络>协议 > IIC通信基础

IIC通信基础

2020年07月13日  | 移动技术网网络运营  | 我要评论

想掌握IIC通信,就要掌握它的特性。
首先要知道IIC协议就是是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。
I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。

//产生 IIC 起始信号
void IIC_Start(void)
{
SDA_OUT(); //sda线输出
IIC_SDA=1; 
IIC_SCL=1;
delay_us(4);
IIC_SDA=0; //在SCL为高时SDA拉低
delay_us(4);
IIC_SCL=0; //SCL拉低,准备发送或接收数据
}

结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。

//产生 IIC 停止信号
void IIC_Stop(void)
{
SDA_OUT(); //sda 线输出
IIC_SCL=0;
IIC_SDA=0; 
delay_us(4);
IIC_SCL=1; 
IIC_SDA=1; //发送 I2C 总线结束信号
delay_us(4); 
}

在使用过程中要特别注意其有效性,只有在SCL为高电平时,SDA上的数据必须要保持不变才算有效数据。SDA只可以在SCL为低电平时改变。
每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据,从机应答主机所需要的时钟仍是主机提供的,应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答。

//等待应答信号到来
//返回值:1,接收应答失败
// 0,接收应答成功
u8 IIC_Wait_Ack(void)
{
	u8 time=0;
	SDA_IN(); //SDA 设置为输入 
	IIC_SDA=1;delay_us(1); 
	IIC_SCL=1;delay_us(1);
	while(READ_SDA)
	{ 
		time++;
		if(time>250)
		{ 	
			IIC_Stop();
			return 1;
		} 
	}
	IIC_SCL=0; //时钟输出 0 
	return 0; 
}

本文地址:https://blog.csdn.net/qq_38802197/article/details/107301837

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网