51单片机入门:I2C通讯协议

I2C通讯协议

I2C简介

串口通信只能在两个设备之间进行,如果是三个设备相互通讯,那么每个设备需要两组串口,实际上是3组相互独立的串口通信。如果是4个设备相互通信就更加麻烦了,最突出的问题就是线路连接比较复杂。

 为了解决这个难点,人们设计了一种总线通讯,总线通讯有很多种协议,例如:USB、SPI、CAN、IIC。重点介绍IIC通讯。IIC(Inter-Integrated Circuit)也可写作I2C,意思是芯片与芯片之间的通讯。是一种串行通信总线,使用多主从架构(模式)。例如我们的单片机是主机,而其他设备都是从机。

好处:节约了单片机IO口的资源,降低了PCB布线成本等。


通讯模式:多主从模式

通信设备之间的地位是平等的,分为主设备从设备,其中主设备一个、从设备多个。主设备要主导整个通信过程,从设备根据I2C协议被动的响应主设备;

在I2C通信中,没有规定谁做主设备、谁做从设备,是通信双方自己协商的。一个设备在同一时间只能做主设备或者从设备。有的设备可以通过软件配置来决定在此次通信时做主设备还是从设备。


通信特征

串行:只有一根数据线(SDA),每次传输一个bit位;

同步:主从设备工作频率相同,主设备通过SCL时钟线给从设备提供时钟频率;

半双工、低速率


I2C总线通信协议

1、主设备发送一个起始信号;

2、主设备接着发送8bit数据,其中高7位是从设备的地址,最后一位表示此次主设备是要读数据还是写数据;

3、和主设备发送的地址匹配的从设备发出一个ack响应信号

4、主/从设备将数据发送到SDA总线上,每次传输都是8bit数据;

5、主/从设备从SDA线上接收数据,并发送一个ACK响应信号;

6、重复发送和接收的过程,直到主设备发送停止信号,停止本次通信;


四个状态

空闲态:当SCL和SDA同时为高电平时,为空闲态。

起始状态:当主设备在I2C总线上发出起始信号,标志着开始通信。此时必须在时钟信号为高电平期间,数据信号完成由高到低的跳变。这样起始信号就发送完了。

忙态:主从设备正在通信。

停止状态:当主设备在I2C总线上发出停止信号,停止本次通信。当时钟信号为高时,数据信号需要由低到高的跳变。

 


数据线高低电平控制

如果某一时刻有两个设备要发送数据,例如从设备1发送了一个1(高电平)、设备2发送了一个0(低电平),最终数据线上是高电平还是低电平呢?

如下图,在芯片IO口的内部一般会有两颗MOS管,上面的MOS管导通就输出高电平、下面的MOS管导通就输出低电平。当我们把两个IO口都挂在一根总线上,如果一个芯片输出高电平,一个芯片输出低电平,那么电流就直接从电源流入到地。红色的线实际上就短路了,必定会有元器件的烧毁。

为了解决这个问题,I2C总线对于设备的IO口做了一些处理:去掉了上面的MOS管,同时在总线上加一个上拉电阻(取值通常为4.7K)与电源连接。因此总线默认为高电平状态(空闲态)。

芯片想输出低电平就导通MOS管,输出高电平只需要关闭MOS管即可(即:OD开漏输出)。


I2C时序结构

发送字节

SCL低电平时期,主机将数据位依次放到SDA线上(高位在前),然后拉高SCL,从机在高电平期间读取数据位。所以SCL高电平期间,SDA不允许有数据变化。依次循环上述过程8次,即可发送一个字节。

接收字节

SCL低电平期间,从机将数据位依次放到SDA线上(高位在前),然后拉高SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化。(主机在接收之前,需释放SDA)

发送应答

在接收完一个字节后,主机在下一个时钟发送一位数据,0代表应答、1代表非应答;

接收应答

在发送完一个字节后,主机在下一个时钟接受一位数据,判断从机是否应答。0代表应答,1代表非应答。(主机在接收之前需释放SDA)


 (未完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/706312.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迈向数字化生产:MES系统的重要性与功能解析

在传统的加工生产企业中,流程卡一直是进行生产跟踪控制的主要工具。流程卡上印刷了工序列表,每个工序都需要作业人员打勾、签名并标注日期,以确保产品在生产线上经过所有必要的工序。 然而,随着信息技术的发展,制造业也…

【漏洞复现】泛微OA E-Cology GetLabelByModule SQL注入漏洞

漏洞描述: 泛微OA E-Cology是一款面向中大型组织的数字化办公产品,它基于全新的设计理念和管理思想,旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology getLabelByModule存在SQL注入漏洞,允许攻击者非法访问和操…

linux系统查看CPU信息

1、查看cpu型号 [rootMaster ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 40。Intel(R) Xeon(R) CPU E5-2650 v3 2.30GHz 2、查看系统中实际物理CPU的颗数(物理) [rootMaster ~]# grep physical id /proc/cpuinfo | sort | uniq | w…

第 8 章 机器人底盘Arduino端PID控制(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 8.4.5 底盘实现_04Arduino端PID控制 上一节最后测试时,电机可能会出现抖动、顿挫的现象&#xff…

Java:【反射】、【枚举】、【lambda表达式】

一、【反射】的定义 Java的反射机制: 是在【运行状态】中,对于任意一个类,能够知道这个类的【所有属性和方法】;对于任何一个对象,能够调用它的【任意方法和属性】;这种【动态获取信息】以及【动态调用对…

玩转Matlab-Simscape(初级)- 07 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真(理论部分3)

** 玩转Matlab-Simscape(初级)- 07 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真(理论部分3) ** 目录 玩转Matlab-Simscape(初级)- 07 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真&am…

酷开科技丨女性群像大戏《惜花芷》在酷开系统热播中

在这个国产剧市场蓬勃发展的时代,酷开科技通过其生态智能电视系统,为剧迷们打造了一个精彩的观剧平台。通过酷开科技的智能推荐算法,消费者能够轻松地发掘并观看各种题材的高质量剧集,无论是扣人心弦的金融较量、深刻的家庭代际关…

编程实战:自己编写HTTP服务器(系列5:执行后台shell命令)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 系列入口:编程实战…

【文档理解】TextMonkey:一种OCR-Free的用于文档理解的多模态大模型

背景 传统的信息提取,通常是从文本中提取信息,相关技术也比较成熟。然而对于复杂领域,例如图片,文档等形式的数据,想要提取出高质量的、可信的数据难度就比较大了,这种任务也常称为:视觉文档理…

职业生涯第一课---“Redis分布式锁优化:确保唯一性与效率“

前言 最近因为刚入职公司开启自己的实习生涯,工作和毕设论文同步进行,导致有段时间没更新博客了,今天来分享一下最近学到的一些知识。 场景介绍 BOSS让我写一些接口,他提出这样一个需求,该接口的参数有多个&#xf…

Windows下配置TortoiseGit 访问Ubuntu虚拟机下Samba共享目录

前言: 本文记录学习使用 Git 版本管理工具的学习笔记,通过阅读参考链接中的博文和实际操作,快速的上手使用 Git 工具。 本文参考了引用链接博文里的内容。 引用: 【TortoiseGit】TortoiseGit安装和配置详细说明-CSDN博客 Git版本管理可视…

ubuntu下安装pwndbg

安装pwndbg 如果可以科学上网 首先安装git apt install git 然后拉取git库 git clone GitHub - pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB Made Easy 进入到pwngdb的文件夹中 cd pwngdb 执行 ./setup.sh 而后输入gdb 出现红色pwndgb就是安装成功…