i2c协议的特点是什么,老司机带你深入了解

news2025/8/14 18:56:08

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线(一根数据线SDA,一根时钟线SCL)即可在连接于总线上的器件之间传送信息。

在I2C总线中, 各部分器件如下:

主机初始化发送,产生时钟信号和终止发送的器件

从器件被主机寻址的器件

发送器发送数据到总线的器件

接收器从总线接收数据的器件

多主机同时有多于一个主机尝试控制总线但不破坏报文

仲裁是一个在有多个主机同时尝试控制总线,但只允许其中一个控制总线并使报文不被破坏的过程

同步两个或多个器件同步时钟信号的过程

主机用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主机寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

I2C协议有如下几个特点:

1.在硬件上,I2C总线只需要一根数据线和一根时钟线两根线,总线接口已经集成在芯片内部,不需要特殊的接口电路,而且片上接口电路的滤波器可以滤去总线数据上的毛刺.因此I2C总线简化了硬件电路PCB布线,降低了系统成本,提高了系统可靠性。因为I2C芯片除了这两根线和少量中断线,与系统再没有连接的线,用户常用I2C可以很容易形成标准化和模块化,便于重复利用。

2.发送到SDA 线上的每个字节必须为8 位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL 保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL 后数据传输继续。

3. I2C总线是一个真正的多主机总线,如果两个或多个主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据破坏,每个连接到总线上的器件都有唯一的地址,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。数据传输和地址设定由软件设定,非常灵活。总线上的器件增加和删除不影响其他器件正常工作。

4. I2C总线上的每一个设备都可以作为主设备或者从设备,而且每一个设备都会对应一个唯一的地址(可以从I2C器件的数据手册得知),主从设备之间就通过这个地址来确定与哪个器件进行通信,在通常的应用中,我们把CPU带I2C总线接口的模块作为主设备,把挂接在总线上的其他设备都作为从设备。

I2C协议规定,总线上数据的传输必须以一个起始信号作为开始条件,以一个结束信号作为传输的停止条件。起始和结束信号总是由主设备产生。总线在空闲状态时,SCL和SDA都保持着高电平,当SCL为高电平而SDA由高到低的跳变,表示产生一个起始条件;当SCL为高而SDA由低到高的跳变,表示产生一个停止条件。在起始条件产生后,总线处于忙状态,由本次数据传输的主从设备独占,其他I2C器件无法访问总线;而在停止条件产生后,本次数据传输的主从设备将释放总线,总线再次处于空闲状态。

I2C的通讯都由主机发起,clk为高电平时,sda从高到低; 从器件发现这样一组信号,就认为主机要开始操作自己了,做好接收的准备工作。主机发送了开始位后,把clk拉低,只有clk拉低,sda才可以做高低变化; 当clk被拉高时,从器件就会去读取sda的高低电平值;clk再次被拉低时,从器件认为此位已读取完毕,认为是有效位,等待clk再次拉高,读取下一位。

主机发送完8位后,第9位是校验位,读取到低电平为有效;主设备把clk拉低,sdaio换成输入模式(上拉电阻,默认高电平)读取第9位,clk再次拉高,读取从设备发来的校验位。

如图所示时序图

对I2C总线的操作实际就是主从设备之间的读写操作。大致可分为以下三种操作情况:

第一种,主设备往从设备中写数据。数据传输格式如下:

第二种,主设备从从设备中读数据。数据传输格式如下:

第三种,主设备往从设备中写数据,然后重启起始条件,紧接着从从设备中读取数据;或者是主设备从从设备中读数据,然后重启起始条件,紧接着主设备往从设备中写数据。数据传输格式如下:

第三种操作在单个主设备系统中,重复的开启起始条件机制要比用STOP终止传输后又再次开启总线更有效率。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈选择示波器时的“5倍法则”

众所周知,选择示波器时经常会用到5倍法则,其实不仅仅是针对带宽,当涉及到快沿信号上升时间测试时,根据上升时间选择示波器也会用到5倍法则。本文将分别对这两种情况下的5倍法则展开讨论,并介绍当考虑示波器和探头构成的…

从结构上浅谈FPGA实现逻辑的原理

FPGA是啥?你要是在百度上一查,多数会搜到什么 Field Programmable Gate Array,现场可编程门整列嘛,但是这句话对咱们新手理解FPGA起到的作用十分有限,其实不单是新手朋友,就连我这个玩了几个月的FPGAer也不…

(三)Logistic回归的梯度下降

一、单个样本的Logistic回归的梯度下降法 在本节中,我们学习如何计算偏导数来实现Logistic回归的梯度下降法。 我们将使用导数流程图来计算梯度。 首先回顾一下Logistic回归的公式 zwTxbz w^TxbzwTxb y^aσ(z)11e−z\widehat{y}a \sigma(z) \frac 1 {1e^{-z}}y​…

会员中心通过AJAX、JSON、PHP、MySql等技术实现注册和登录功能(1+X Web前端开发中级 例题)——初稿

📄题目要求 阅读下列说明、效果图和代码,进行动态网页开发,补充代码(1)-(30)。会员中心,需要先注册后登录,先要求应用HTML、CSS、AJAX、JSON、PHP、MySql等技术实现注册…

反射机制(复习)

反射机制 反射机制定义反射机制的功能反射机制主要的API反射机制演示对 Class 的理解Class实例获取的四种方式Class 对应内存结构说明加载Properties文件的俩种方式调用运行时类的结构调用运行时类的指定属性调用运行时类指定的方法调用运行时类指定的构造器反射的应用&#xf…

技术公开课|深度剖析 Java 的依赖管理,快速生成项目 SBOM清单

背景 近年来软件供应链安全风险涌现,无论是 Fastjson、Log4j 等基础组件的 0day,来源于开源的风险事件不断上升,对于研发以及安全同学来说,都是在不断的摸索建立有效的预防及解决机制,公开课将以风险治理为最终目标、…

Java -- 每日一问:谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?

典型回答 所谓隔离级别(Isolation Level),就是在数据库事务中,为保证并发数据读写的正确性而提出的定义,它并不是 MySQL 专有的概念,而是源于ANSI/ISO制定的SQL-92标准。 每种关系型数据库都提供了各自特…

(STM32)从零开始的RT-Thread之旅--PWM驱动ST7735调光

上一章: (STM32)从零开始的RT-Thread之旅--SPI驱动ST7735(1) 上一章我们先用SPI读取到了LCD的ID,这一章则是使用PWM调光点亮屏幕,因为测试这块屏幕时,发现直接设置背光引脚为高好像无法点亮,好像必须使用PWM调光&…

信而泰自动化OSPFv2测试小技巧

OSPFv2协议简介 OSPFv2(开放式最短路径优先版本2)是互联网协议(IP)网络的路由协议。它使用链路状态路由(LSR)算法,并且属于在单个自治系统(AS)内运行的内部网关协议&…

Inter RealSense深度相机ROS驱动

文章目录知识目标1. 深度相机的分类及工作原理2. Inter RealSense D415相机知识目标 学习深度相机的分类和工作原理; 学习Intel RealSense D415相机硬件构成和工作原理。 1. 深度相机的分类及工作原理 深度相机(可以测量物体到相机的距离)…

Java三大特性篇之——多态篇(千字详解)

JAVA面向对象编程有三大特性:封装、继承、多态,在我们学习了继承后,我们将继续学习多态。 文章目录前言:什么是多态?一、多态实现二、再谈重写三、向上转移四、多态优缺点五、多态案例最后前言:什么是多态?…

MR场景直播-帮助企业高效开展更有意思的员工培训

阿酷TONY / 2022-11-18 / 长沙 MR场景直播、MR培训场景和内容呈现以及直播互动功能,帮助企业高效开展员工培训,让整个培训过程更高效~~~ MR场景直播有哪些有意思的地方呢?先来一个图: ▲ 模拟真实光照还原现实景 丰富培训场景&a…

SQL实用功能手册

SQL实用功能手册 SQL基础复习 SQL结构化查询语言,是一种访问和处理数据库的计算机语言 对数据库操作对表操作对数据进行CRUD操作操作视图、存储过程、索引 环境基础操作 安装mysql、启动mysql、配置环境变量检查mysql版本:mysql --version链接mysql…

开源共建 | Dinky 扩展批流统一数据集成框架 ChunJun 的实践分享

一、前言 ChunJun(原FlinkX)是一个基于 Flink 提供易用、稳定、高效的批流统一的数据集成工具,既可以采集静态的数据,比如 MySQL,HDFS 等,也可以采集实时变化的数据,比如 binlog,Ka…

(九)DateTime——PHP

文章目录第九章 Date & Time1 time()获取时间戳2 getDate()转换时间戳3 date()转换时间戳第九章 Date & Time 1 time()获取时间戳 time()函数返回的整数表示自1970年1月1日格林尼治标准时间午夜起经过的秒数。这一时刻称为UNIX历元,自那时起经过的秒钟数称…

Metabase学习教程:提问-1

创建交互式图表 可以通过使用查询生成器、构建模型或添加自定义目标来创建图表。供用户在Metabase中钻取数据。类似: 图1。放大特定类别和时间范围,然后查看构成图表上某个条形图的订单。 如果您只使用SQL编写过问题,那么您可能会忽略这样一…

颠覆IoT行业的开发神器!涂鸦智能重磅推出TuyaOS操作系统【程序员必备】

1 前言 作为降低 IoT 技术门槛的开发神器,TuyaOS 操作系统重磅发布 3.6.0 新版本啦!针对设备安全、功耗、通信速率等关键功能,做了重大创新和优化升级。为了助力开发者更快速便捷地接入涂鸦IoT PaaS,并低门槛开发出有创意的智能单…

RabbitMQ初步到精通-第三章-RabbitMQ面板及环境搭建

第三章-RabbitMQ面板及环境搭建 1、RabbitMQ面板介绍 Rabbitmq安装完毕后,若是本地环境,打入:http://localhost:15672/#/ 进入到MQ的控制台页面中: 可以观察到此页面涉及的各个TAB,和我们前面介绍到的rabbitMQ架构中…

Docker入门学习笔记(狂神版)

下述笔记是自己花一天时间看B站狂神说Docker视频的笔记,下列的笔记是根据自己的实践的记录下来的,若想细学掌握Docker建议自行观看(《Docker入门到精通》),去观看狂胜的视频记得三连支持一下。他的Docker讲解个人觉得是…

每日一个设计模式之【代理模式】

文章目录每日一个设计模式之【代理模式】☁️前言🎉🎉🎉🌻模式概述🌱代理模式的实现🍀静态代理🍀动态代理🐳JDK代理🐳CGLib代理🍀拓展🐳虚拟代理&…