IIC协议——同步半双工串行通信方式

news2024/9/19 10:42:52

文章目录

  • 前言
  • 一、简要介绍
    • 1、优点
    • 2、缺点
  • 二、信号线和连接方式
    • 1、信号线
    • 2、连接方式
      • 2.1 单主设备,单从设备
      • 2.2 单主设备,多从设备
      • 2.3 多主设备,多从设备
  • 三、数据传输格式
    • 1、数据传输过程
  • 二、SPI配置
    • 1、传输模式
    • 2、地址位宽
    • 3、仲裁机制
      • 3.1 SCL同步问题
      • 3.2 SDA仲裁问题
  • 三、UART、SPI、IIC协议比较


前言

2023.4.22


一、简要介绍

IICInter-Integrated Circuit,集成电路总线

  • 半双工协议
  • 多主设备,多从设备。通过地址索引,I2C可以使能所需从设备
  • 实现不同集成电路组件之间的控制功能

1、优点

  • 接口减少,控制简单,只需要两条总线
  • 通信速率高
  • 多主控,但任意时刻只有一个主控有效。最大主设备——无限制,最大从设备——127个

2、缺点

二、信号线和连接方式

1、信号线

需要连接上拉电阻,空闲时保持高电平
在这里插入图片描述

SDA(Serial Data) :串行数据线,用来传输数据信号。
SCL(Serial Clock):串行时钟线,用来传输时钟信号,一般是主设备向从设备提供。

2、连接方式

2.1 单主设备,单从设备

在这里插入图片描述

2.2 单主设备,多从设备

在这里插入图片描述

2.3 多主设备,多从设备

在这里插入图片描述

三、数据传输格式

主设备按照从高到低的顺序,依次发送地址位,从设备进行接收,通常情况下,地址位为7bit,读写选择为1bit。每个从设备有且只有一个唯一的地址编号。读写控制写为0,读为1

为了确保采样时信号稳定,对于主设备,我们在下降沿的时候将信号放在SDA上,对于从设备,我们在上升沿的时候进行采样。

在这里插入图片描述

空闲位:空闲时,SCK和SDA均为高电平

起始位:在SCL为1时,拉低SDA,开始数据传输,SCL开始翻转(下降沿检测)

应答位:正确接收从设备拉低信号SDA;未正确接收SDA依旧为高电平

在这里插入图片描述

在这里插入图片描述

数据位:每一次默认传输一个字节(即8bit),每个字节的传输都需要跟一个应答位(ACK/NACK)

在这里插入图片描述

停止位:SCL先拉高,随后SDA先为低后拉高(上升沿检测)

在这里插入图片描述

1、数据传输过程

起始位 + 7位地址 + 1位读写控制 + slave响应 + 8位数据 + 响应 + 8位数据 + 响应 + 停止位 (加粗部分为slave控制总线)

在这里插入图片描述

二、SPI配置

1、传输模式

  • 标准模式(Standard):100kbps
  • 快速模式(Fast):400kbps
  • 快速模式+(Fast-Plus):1Mbps
  • 高速模式(High-speed):3.4Mbps
  • 超快模式(Ultra-Fast):5Mbps(单向传输)

2、地址位宽

10位地址的从设备,和7位地址的从设备,都可以挂在一个总线上,彼此相互兼容

  • 标准I2C:七位寻址
  • 扩展I2C:十位寻址

3、仲裁机制

3.1 SCL同步问题

总线自带线与逻辑,任意一个拉低,总线表现为低电平,全部位高电平时,总线才是高电平。

假设有两个主设备都想拉低SCL信号,Master1先拉低 ,Master2后拉低,那么SCL会按照CLK1的时间来拉低自身(线与逻辑的应用),而假如Master1先拉高,Master2后拉高,SCL又会按照CLK2的时间来拉高自身。

当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号
在这里插入图片描述

3.2 SDA仲裁问题

每个主设备都需要在发送消息之前检测SDA线是低电平还是高电平。

  • 如果SDA线为低电平,则意味着另一个主设备可以控制总线,并且主设备应等待发送消息
  • 如果SDA线为高电平,则可以安全地发送消息

三、UART、SPI、IIC协议比较

低速通用协议接口

数据流向信号线通信类型选通方式主从设备
UART单工/半双工/全双工1/2条异步单主设备、单从设备
SPI全双工4条同步片选信号NSS单主设备、多从设备
IIC半双工2条同步地址索引多主设备,多从设备

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

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

相关文章

【Linux】Linux基本指令(1)

一.前言 从这篇文章开始,博主就开启了Linux学习之路了,本篇文章也是博主的第一篇Linux的文章,今后也会持续不断更新的。 二.理解文件 1.文件 文件文件数据文件属性(所以一个建好的文件就算没有数据,也占用存储空间&am…

[RoarCTF 2019]Easy Calc、攻防世界 ics07、[极客大挑战 2019]EasySQL

[RoarCTF 2019]Easy Calc 进入题目是一个计算器的功能 检查网页源码发现这样一个重要信息 这题有WAF计算功能是通过calc.php这里面的代码执行的&#xff0c;我们去访问一下得到源码 <?php error_reporting(0); if(!isset($_GET[num])){show_source(__FILE__); }else{$str…

传统机器学习(二)逻辑回归算法(二)

传统机器学习(二)逻辑回归算法(二) 之前在传统机器学习(二)逻辑回归算法(一)中介绍了逻辑回归的原理、公式推导、手动python实现及sklearn工具包的使用详解等内容。继续对逻辑回归的使用细节进行介绍。 一、如何得到逻辑回归模型系数 1.1、一个简单的逻辑回归例子 已采集15…

广州蓝景分享—6 个ES13 中非常实用的新 JavaScript 特性

首先作为前端最重要的编程语言JavaScript&#xff0c;每年都在不断发展&#xff0c;让该语言都会通过新功能变得更强大。今天由小蓝跟大家分享6 个ES13 中非常实用的新 JavaScript 特性。 接下来让我们开始&#xff1a; 1.at 当我们想要获取数组的第 N 个元素时&#xff0c;…

Redis底层设计与源码分析---学习笔记

一.Redis为什么快 高速的存储介质 机械硬盘—>固态硬盘—>内存&#xff0c;随机访问的延迟逐渐变小 优良的底层数据结构设计 底层设计用到了hashtable&#xff0c;时间复杂度低 高效的网络IO模型 epoll等&#xff0c;不同平台有不同的实现   高效的线程模型 二.Re…

【论文阅读笔记|ACL2022】Legal Judgment Prediction via Event Extraction with Constraints

论文题目&#xff1a;Legal Judgment Prediction via Event Extraction with Constraints 论文来源&#xff1a;ACL2022 论文链接&#xff1a;https://aclanthology.org/2022.acl-long.48.pdf 代码链接&#xff1a;GitHub - WAPAY/EPM 0 摘要 近年来&#xff0c;虽然法律判…

动态内存管理--->(经典入手版详解)

友友们有时候在开辟内存的时候&#xff0c;所需要的空间大小不太好确定&#xff0c;只有在程序运行的时候才能知道&#xff0c;这时候我们就要尝试一下动态内存开辟空间了&#xff0c;下面来和阿博一起了解并掌握它吧&#x1f917;&#x1f917;&#x1f917; 文章目录 1.为什么…

系统的部署

把报错的三个给删了&#xff0c;系统可以运行了我猜测它对应的是商品分类页面 我觉得它分页器有问题所以研究了下userdto和mtuser的区别 Failed to parse configuration class [com.fuint.fuintApplication]; nested exception is java.lang.IllegalArgumentException: Could…

Mycat数据库中间件 mycat2 路由转发

1.非分片字段查询 Mycat中的路由结果是通过分片字段和分片方法来确定的。例如下图中的一个Mycat分库方案&#xff1a; 根据 tt_waybill 表的 id 字段来进行分片 分片方法为 id 值取 3 的模&#xff0c;根据模值确定在DB1&#xff0c;DB2&#xff0c;DB3中的某个分片 非分片字段…

ESP32设备驱动-LPS25H压阻式压力传感器驱动

LPS25H压阻式压力传感器驱动 文章目录 LPS25H压阻式压力传感器驱动1、LPS25H介绍2、硬件准备3、软件准备4、驱动实现1、LPS25H介绍 LPS25H 是一款超紧凑型绝对压阻式压力传感器。它包括一个单片传感元件和一个能够从传感元件获取信息并向外部世界提供数字信号的 I2C 接口。 传…

leetcode两数、三数、四数之和

如有错误&#xff0c;感谢不吝赐教、交流 文章目录 两数之和题目方法一&#xff1a;暴力两重循环&#xff08;不可取&#xff09;方法二&#xff1a;HashMap空间换时间 三数之和题目方法一&#xff1a;当然是暴力破解啦方法二&#xff1a;同两数之和的原理&#xff0c;借助Has…

工厂管理系统该如何选?5款主流的工厂管理软件全测评!

工厂管理系统该如何选&#xff1f;5款主流的工厂管理软件全测评&#xff01; 阅读本文您将了解&#xff1a;1.工厂管理系统软件是什么&#xff1b;2.五大主流工厂管理系统介绍&#xff1b;3.如何选择工厂管理系统。 一、工厂管理系统软件是什么&#xff1f; 工厂管理系统软件…

SpringBoot整合JUnit--MyBatis--MyBatis-Plus--Druid

文章转自黑马程序员SpringBoot学习笔记,学习网址:黑马程序员SpringBoot2教程 1.整合JUnit ​ SpringBoot技术的定位用于简化开发&#xff0c;再具体点是简化Spring程序的开发。所以在整合任意技术的时候&#xff0c;如果你想直观感触到简化的效果&#xff0c;你必须先知道使用…

SpringBoot项目创建和使用

Idea创建&#xff08;社区版&#xff09; 安装插件 首先找到设置&#xff0c;然后点击插件&#xff0c;在里面搜索 springboot helper 安装好后名字和图标会变为如下&#xff1a; 安装好后就可以开始创建项目了。 创建项目 第一步&#xff1a;打开创建项目面板 上面设置源…

2.2.1服务器百万并发实现

接上节课&#xff0c;上节课中&#xff0c;我们使用了epoll实现了同时监听多个文件描述符&#xff0c;是对IO的管理&#xff0c;也提到了reactor是对事件的管理&#xff0c;那具体来说是怎样的呢&#xff1f;reactor是事件驱动模型&#xff0c;也就是EPOLLIN/EPOLLOUT&#xff…

arm64 页表以及映射分析

arm64 页表映射分析 1 linux 6.10 xilinx内核的内存配置2 arm64不同粒度页的页表2.1 4KB页面粒度的页表配置2.2 16KB页面粒度的页表配置2.3 64KB页面粒度的页表配置 3 页表描述符3.1 无效页表描述符3.2 L0~L2页表描述符3.3 L3页表描述符 4 linux arm64 页表映射4.1 __create_pg…

Java 字符串类型的JSON数组转List<Object>

1.依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.21</version></dependency> 2.代码 import cn.hutool.json.JSONUtil; import java.util.List;/*** 字符串类型的JSON数组…

Java 把 Map 的值(Value)转换为 Array, List 或 Set

概述 在这篇短文中&#xff0c;我们将会展示如何把 Map 中的值取出来&#xff0c;转换为一个 Array,、List 或者一个 Set。 当然&#xff0c;你可以使用 Java JDK 来进行转换&#xff0c;你也可以使用 Guava 来进行转换。 首先&#xff0c;让我们来看看&#xff0c;如何使用原…

理解和实现简单的XOR神经网络

本文介绍了神经网络的基本知识&#xff0c;并以实现一个简单的XOR神经网络为例&#xff0c;详细解释了神经网络的工作原理和关键概念。我们将利用Python编写的代码来逐步理解并实现这个神经网络。 神经网络是一种模仿生物神经系统的计算模型&#xff0c;用于处理复杂的输入数据…

生产上的一次慢查询SQL优化

一、背景 MySQL版本5.6.16&#xff0c;InnoDB 生产上有个业务场景&#xff0c;需要每日拉取还款计划表里某些产品编号的所有状态为0&#xff0c;1数据的借据号和产品编号&#xff0c;SQL如下 select distinctloan_no,product_codefrom repay_plan<where>status in (0,1…