IIC通信基础
程序员文章站
2022-03-22 08:21:23
想掌握IIC通信,就要掌握它的特性。首先要知道IIC协议就是是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。I2C 总线在传送数据过程*有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。//产生 IIC 起始信号void IIC_Start(void){SDA_OUT();...
想掌握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
上一篇: 详解js中Array的方法及技巧
下一篇: 如何生成webp动图