IIC协议解析

文章目录

        • 1 IIC理解
          • 1.1 IIC简述
          • 1.2 IIC协议优缺点
          • 1.3 传输速度
        • 2 IIC数据格式
        • 3 数据时序
          • 3.1 写时序
          • 3.2 读时序
        • 参考链接

1 IIC理解
1.1 IIC简述

    IIC全称Inter Integrated Circuit,即集成电路总线。是由Philips半导体公司于八十年代初设计出的一种两线式串行总线协议,主要应用于传输数据量不大且通信距离短的主从机通信,主设备起控制作用,从设备只能被动进行读写操作。
    其通信过程需要两根总线,一根SCL(串行时钟总线),用作数据同步,一根SDA(串行数据总线),顾名思义进行数据的传输,与UART不同的是,IIC上支持挂载多个从设备,主设备通过每个从设备唯一的地址来进行通信,并且IIC的数据接口是双向IO,即可做输出亦可做输入。
    通信时的数据传输以大端传输方式进行,即传输时高比特位先传输,低比特位后传输。

1.2 IIC协议优缺点

    1、优点:
  • 硬件接口简单。只需要SCL和SDA两个接口,简化硬件设计的同时也简化了时序设计、易于调试。
  • 支持多设备工作。可多个从设备连接到同一总线上,每个从设备有唯一的地址,以此进行通信。
  • 功耗低。空闲状态时,总线上的设备进入低功耗模式以降低功耗。
  • 有应答机制来确认接收方是否收到数据。

    2、缺点:
  • 传输速度慢。IIC的数据传输速度较低,通常用于低速设备。
  • 受限制。其传输受到总线长度和从设备数量影响,过多的从设备和过长的总线均可能导致其数据出错。
  • 和SPI相比,IIC为半双工通信,不能同时进行收发数据。
1.3 传输速度

    IIC协议有三种传输速度,即标准模式、快速模式以及高速模式。标准模式速度可达100kb/s,快速模式可达400kb/s,而高速模式可达到3.4Mb/s。

2 IIC数据格式

    IIC在进行通信时,会先发送一个起始信号,然后发送7比特的地址位和1比特的读写控制位,这8比特组成1个字节,主机发送完这一个字节后会释放总线来接收接收方的应答位,为1比特,接收到应答位后开始发送1个字节的寄存器地址(有的IIC设备是不需要寄存器地址的,这种就可以不用发送寄存器地址,发完设备地址和读写控制位后可直接发送数据),当发完寄存器地址收到应答后,就可以接着发送数据了,数据同样以字节为单位发送。

  • 空闲状态:在空闲状态下,SCL和SDA均为高电平。
  • 起始信号:在SCL为高电平时,SDA由高到低的跳变即为起始信号。
  • 地址位:任何IIC设备都有7比特的地址位,即理论上有127个设备地址,但实际应用中有的总线上挂的设备不止127个,于是就有拓展地址,即使用7比特地址+引脚地址的双重地址来增加总线上的设备数量。
  • 读写控制位:一般是高读低写,即SDA高电平为读操作,低电平为写操作。
  • 应答位:在发送完读写控制位后释放总线,在下一个SCL的高电平器件检测到SDA的低电平即为应答位,表示接收方已收到数据,否则为非应答位(NACK),一般表示未成功收到数据,每发送完1字节的数据后均会产生一个应答位。
  • 停止信号:在SCL的高电平时,SDA由低到高的跳变即为停止信号,之后终止一次数据的传输,要再进行数据的传输则需要重新发起始位,地址以及读写控制位。
        如下图:
    在这里插入图片描述
3 数据时序
3.1 写时序

    主设备从从从设备写入数据的过程即为写操作,读写操作均以主设备为参考。
    第一步:主设备先向产生一个起始信号,表示要进行数据传输了,然后发送第一个字节的数据(由7bit的从设备地址+1bit的读写控制位组成,写操作时,读写控制位置0表示写),然后释放SDA总线,等待从设备的ACK确认。
    第二步:发送寄存器地址,寄存器地址为1byte,等待从设备的ACK确认,不需要寄存器地址的从设备直接跳过这一步。
    第三步:发送需要写入从设备的数据,数据同样以字节为单位发送,每发送完一个字节,从设备都会回一个ACK表示是否正常收到数据。
    第四步:所有数据均发送完成后,主设备发送停止位,以此暂停该次写操作,至此,一次写操作完成。
    其大致时序如下图:
在这里插入图片描述

3.2 读时序

    主设备从从从设备读取数据的过程即为读操作,读流程大致和写流程差不多,但要复杂一点,要从从设备读取数据,首先得知道是从那个从设备得那个寄存器读取数据,因此读之前会先有一个写操作,写入从设备地址和寄存器地址,以此明确操作的对象,读操作大致分为以下几步:
    第一步:发送起始位,然后发送第一个字节(同样由7bit从设备地址+1bit读写控制位组成,此时读写控制位为0,表示写操作),然后等待Ack。
    第二步:发送第二个字节,即写寄存器地址,然后等待Ack。注意:此时由IIC的读操作没有字节指定读寄存器地址的操作,而其寄存器地址指针在每一次读写后均会加1,因此此时的写的寄存器地址应为需要读的寄存器地址减1,这样后面读操作才能读到想要的寄存器的数据。
    第三步:重新发送起始位,开始第二次的数据交互。
    第四步:发送从设备地址字节(同样7bit+1bit,但此时的读写控制位置1,表示读),然后等待应答位。
    第五步:接收读取的数据,从设备地址应答位后跟着的就是读到的数据了,此时主设备作为接收方,收完1byte的数据会会发送Ack到从设备,若发送的是ACK,则继续读取设备,若是NACK,则接着会发送停止位,表示本次读取数据完成,终止数据交互。
    大致时序如下图:
在这里插入图片描述


    读操作时,若要读取的寄存器为该设备的第一个寄存器或者该设备只有一个寄存器,则可直接跳过第一步和第二步的写操作,从而简化时序。          
参考链接

详解IIC原理

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

雷达手势识别技术

1、IR-UWB 手势识别方案 该任务可以分为数据采集,雷达数据处理,识别分类三个部分。 1.1 UWB Radar 数据处理 首先采集慢时间快时间维数据: 然后仍然是Clutter removal filter: 之后正则化转化为灰度图像: 使用matlab f…

springboot+大数据+基于大数据的电脑硬件推荐系统【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

虚幻闪烁灯光材质

创建一个材质 材质域改成光照函数 , Time让材质动起来 参数B用来控制速度 , Sine 让灯光闪烁 , Frac 增加了闪烁细节 把材质放到灯光材质上 效果还是挺不错的! 可以用于一些恐怖游戏~

Redis和Jedis的区别

目录 含义与用途 Jedis案例 总结 含义与用途 Redis: 概念:Redis是一个基于内存的键值存储数据库,支持丰富的数据结构。比如:字符串功能:除了基础的数据存储,Redis还提供了丰富的高级功能。如持久化&…

Python第七八次作业

1.输入一个大于0的正整数n,如果n 1 ,则返回1, 如果n是偶数,则返回 n // 2 ,如果n是奇数,则返回 3n 1,将所有的返回值存放到一个列表中,注意:n是第一个元素,其他的元素根…

entity,pojo,vo,dto 详解

在Java项目中,包名通常用于组织代码,使其更加清晰和易于维护。entity、pojo、vo和dto是常见的包名,它们各自有不同的含义和用途。下面将详细解释这些包名的含义,并提供一个示例,帮助你更好地理解它们在项目中的应用。 …

DAPLINK 之 RTT 输出日志

文章目录 前言1 安装 SEGGER RTT2 OpenOCD 下的 rtt2.1 调试环境2.2 输出日志 3 关于日志中的文件名参考 前言 1)RTT(Real Time Transfer,实时传输):SEGGER 的 Real Time Transfer (RTT) 是一种经过验证的技术&#x…

mysql查看和修改默认配置

1.查看最大连接数 SELECT max_connections; 或者 SHOW VARIABLES LIKE max_connections;2.查看当前连接的客户端 SHOW PROCESSLIST;2.临时设置最大连接数 SET GLOBAL max_connections 500;3.临时设置连接客户端交互超时时间 SET GLOBAL interactive_timeout 1800;4.永久生…

3.3 Thymeleaf语法

文章目录 引言Thymeleaf标签显示标签链接地址标签条件判断标签元素遍历标签 Thymeleaf表达式变量表达式选择变量表达式消息表达式链接表达式 Thymeleaf内置对象上下文对象上下文变量上下文区域请求对象响应对象会话对象日期对象 实战演练创建控制器创建模板页面 结语 引言 Thy…

【Python爬虫】看电影还在用VIP?一个python代码让你实现电影自由!附源码

今日主题 如何用Python解析vip电影。 什么是vip电影? 这些vip电影啊,想要观看的话,必须充值会员,否则没法看。 比如这个: 这些vip电影解析后呢? 不需要会员,不需要登录,可以直接…

4、.Net 快速开发框架:DncZeus - 开源项目研究文章

DncZeus 是一个基于 ASP.NET Core 和 Vue.js 的前后端分离的通用后台管理系统框架,其愿景是成为一个易于使用且功能丰富的 .NET Core 通用后台权限管理模板系统基础框架。项目名称 "DncZeus" 由 "Dnc"(.NET Core 的缩写)和 "Zeus"(古…

STMicroelectronics 意法半导体芯片选型表

意法半导体作为全球知名的半导体厂商,其产品广泛应用于各个领域,从消费电子到工业控制,从汽车电子到通信设备,都能看到意法半导体芯片的身影。在电子硬件设计领域,芯片的选型至关重要。亿配芯城(ICgoodFind…

SpringBoot+MyBatis+MySQL项目基础搭建

一、新建项目 1.1 新建springboot项目 新建项目 选择SpringBoot,填写基本信息,主要是JDK版本和项目构建方式,此处以JDK17和Maven举例。 1.2 引入依赖 选择SpringBoot版本,勾选Lombok,Spring Web,MyBa…

线性代数知识学习

1.标量 简单操作 长度 2.向量 parallel for all do 点乘、正交 3.矩阵 乘法(矩阵乘以向量) 4.范数 取決于如何衡量b和c的长度 常见范数 矩阵范数:最小的满足的…

小猿口算炸鱼脚本

目录 写在前面: 一、关于小猿口算: 二、代码逻辑 1.数字识别 2.答题部分 三、代码分享: 补充:软件包下载 写在前面: 最近小猿口算已经被不少大学生攻占,小学生直呼有挂。原本是以为大学生都打着本…

【C语言】循环结构-for循环

循环结构&#xff1a;计算机最擅长的事情就是做简单重复的工作 通过控制循环变量&#xff0c;是否满足循环条件来调整循环次数。 for(初始化;循环条件;循环控制) {循环体; }#include <stdio.h> #include <math.h> /* 功能&#xff1a;循环结构&#xff08;for&…

[LeetCode] 695. 岛屿的最大面积

题目描述&#xff1a; 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&#xff09;包围着。 岛…

Java 小游戏《超级马里奥》

文章目录 一、效果展示二、代码编写1. 素材准备2. 创建窗口类3. 创建常量类4. 创建动作类5. 创建关卡类6. 创建障碍物类7. 创建马里奥类8. 编写程序入口 一、效果展示 二、代码编写 1. 素材准备 首先创建一个基本的 java 项目&#xff0c;并将本游戏需要用到的图片素材 image…

大数据-174 Elasticsearch Query DSL - 全文检索 full-text query 匹配、短语、多字段 详细操作

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

推荐一个可以免费上传PDF产品图册的网站

​在数字化时代&#xff0c;企业将产品图册以PDF格式上传至网络&#xff0c;不仅便于客户浏览和下载&#xff0c;还能提升企业的专业形象。今天&#xff0c;就为您推荐一个可以免费上传PDF产品图册的网站——FLBOOK&#xff0c;轻松实现产品图册的在线展示。 1.注册登录&#x…