IIC通信协议-----时序图与代码

本文详细介绍了IIC通信协议的过程,包括起始和停止信号、数据读写及ACK信号的产生。通过理解每个步骤的时序图,配合附录中的代码,读者可以深入理解IIC总线的工作原理及其在嵌入式系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息(词条节选自百度百科)。在众多通信通信协议中,IIC总线因其简单的物理结构,在其诞生后的几十年仍然被广泛的应用。

一、IIC通信过程包含的几个操作

(1)起始信号
在SCL高电平期间,SDA由高变低
在这里插入图片描述

(2)停止信号
在SCL高电平期间,SDA由低变高
在这里插入图片描述

(3)CPU向IIC总线发送一个字节数据(8bits)
CPU设置IIC总线的SDA口为输入,然后在SCL口的电平跳变下,一位一位的向IIC总线写入数据。在时钟的上升沿通知从机读取SDA上的数据,所以在写入一位数据之后要将SCL拉高,延时之后再拉低,时序图如下图所示。
在这里插入图片描述

(4)CPU从IIC总线读取一个字节的数据
CPU设置IIC总线的SDA口为输出,然后在SCL口的电平跳变下,一位一位的从IIC总线读出数据。在时钟的上升沿通知从机读取SDA上的数据,在时钟下降沿通知从机更新数据,所以在读出一位数据之前要将SCL拉高,延时之后再拉低,时序图如下图所示。
在这里插入图片描述

(5)CPU向IIC总线发送一个ACK信号
先将SDA拉低,在SDA处于低电平期间,使SCL产生一个脉冲(先拉高,延时后拉低),然后再将SDA拉高。时序图如下图所示。
在这里插入图片描述

(6)CPU从IIC总线接收一个ACK信号
先将SDA拉高,在SDA处于高电平期间使SCL产生一个脉冲(先拉高,延时后拉低),在SCL被拉高之后,CPU方可读取IIC总线上的从机ACK信号,CPU向IIC总线发送一个非应答信号同下图。时序图如下图所示,CPU向IIC总线发送一个非应答信号同下图。
在这里插入图片描述

二、完整的IIC数据读写过程

1.完整的IIC写数据过程

过程如下图(示例):

在这里插入图片描述

2.完整的IIC读数据过程

过程如下图(示例):

在这里插入图片描述

第一部分和第二部分所讲,建议配合附录中的代码去理解,这样思路会更加清晰

附录

1.IIC起始信号

void I2C_Start(void)
{
   
   
    SDA_High();     //SDA=1
    SCL_High();     //SCL=1
    Delay();
    SDA_Low();
    Delay();
    SCL_Low();
    Delay();
}

2.IIC停止信号

void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值