STM32:I²C通信原理概要

一、IIC通信原理

        IIC通信和串口通信有一定的相似之处,都有一根共地线和两根数据线。但是传递外部信息,串口有两根数据线可以进行双向通信,也就是全双工通信。而在IIC通信下,其中一条数据线是用于提供同步时钟脉冲的时钟线(SCL),只有一根数据线(SDA)能够用于传递外部信息。因此,虽然IIC可以进行双向通信,但是不能够同时进行,也就是半双工通信。

        IIC采用主从模式,支持多设备通信。即一台被当作主机,剩下的当作从机。由主机率先发起通信,从机才能根据主机的指令回复相应的信息。

        像这种支持多个设备进行通信的通信协议我们称之为总线协议。在IIC总线上,每个从机都有其唯一的设备地址。例如AHT20的设备地址是0x70,OLED设备地址是0x7A。当主机需要与AHT20进行通信时,在通信开始时主机就会发送AHT20设备地址。当从机收到主机发来是自己的设备地址后就会向主机发送响应数据(ACK)。如果不是自己的设备地址就把信息抛弃。

        在串口中,通信的双方首先约定通信的速度,即比特率。然后双方按照这一速度在合适的时机去设置/读取数据线上的高低电平,这种模式称之为异步模式。这种的优点就是通信便捷,但是缺点就是要保证双方各自的时钟系统是精确的。

        但是有很多小型传感器并没有精确的晶振提供时钟基准,因此IIC选择了同步通信方式。由主机通过SCL发送固定频率的时钟脉冲信号来作为IIC总线上的统一时钟源。

二、IIC通信步骤

       

        主机负责提供同步的脉冲信号与从机进行时间同步。具体就是当时钟线处于低电平时,数据发送方有权设置数据线的电平;当时钟线为高电平时,无数据线控制权的设备读取数据线电平。

        首先,IIC数据线与时钟线上往往有一个上拉电阻进行上拉。所以在未开始通信时,数据线和时钟线都处于高电平。在通信开始时,数据线的控制权在主机上,从机负责在时钟线在高电平时读取数据。在时钟线依旧是高电平时,将数据线提前下拉。所有从机就读取到一个低电平,意味着开始接收主机指令。而后时钟线提供一个恒定频率的时钟脉冲信号,主从机根据这个时钟信号开始通信操作。例如主机要发送0x71(0111001)数据。

        在时钟线低电平时,数据线为高电平,说明主机发送的数据是1,数据线为低电平时,数据发送的就是0;在时钟线高电平时,数据线为高电平,说明从机读取到的数据是1,数据线为低电平时,从机读取到的就是0..

        将0x71发送完后,从机AHT20收到主机与自身建立通信的信息,返回一个ACK信号,并获得数据线控制权。在物理上的表现就是,时钟线处于低电平时,从机将数据线电平拉低。而后,就与之前的方式相反了。主机负责在时钟线在高电平时读取数据,从机在时钟线低电平时写数据。如此反复直到AHT20返回所有数据。而后在时钟线为高电平时,主机将数据线拉高,表示IIC通信结束。 

也就是说当时钟线为高电平时,主机拉低数据线就代表通信开始,时钟线为高电平的期间, 拉高数据线, 就表示本次通讯结束。

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

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

相关文章

oracle-sql语句执行过程

客户端输入sql语句。 sql语句通过网络到达数据库实例。 服务器进程(server process)接收到sql语句。 sql – 解析成执行计划,然后sql才能执行。 会将sql和sql的执行计划缓存到共享池中。解析: 会消耗很多资源。 从数据库找数据,先从buffer cache中找&a…

STM32F4X SDIO(六) 例程讲解-SD_PowerON

STM32F4X SDIO(六) 例程讲解-SD_PowerON 例程讲解-SD_PowerONSDIO引脚初始化和时钟初始化SDIO初始化(单线模式)CMD0:GO_IDLE_STATE命令发送程序命令响应程序 CMD8:SEND_IF_CONDCMD8参数命令发送程序命令响应程序 CMD55:APP_CMDCMD55命令参数命令发送命令…

前端框架Vue学习 ——(二)Vue常用指令

文章目录 常用指令 常用指令 指令: HTML 标签上带有 “v-” 前缀的特殊属性&#xff0c;不同指令具有不同含义。例如: v-if, v-for… 常用指令&#xff1a; v-bind&#xff1a;为 HTML 标签绑定属性值&#xff0c;如设置 href&#xff0c;css 样式等 <a v-bind:href"…

包装印刷行业万界星空科技云MES解决方案

印刷业的机械化程度在国内制造行业内算是比较高的&#xff0c;不算是劳动密集型企业。如书本的装订、包装的模切、烫金、糊盒等都已经有了全自动设备。印刷厂除了部分手工必须采用人工外&#xff0c;大部分都可以采用机器&#xff0c;也就意味着可以由少量工人生产出大量产品。…

CTF工具PDF隐写神器wbStego4open安装和详细使用方法

wbStego4open安装和详细使用方法 1.wbStego4open介绍&#xff1a;2.wbStego4open下载&#xff1a;3.wbStego4open原理图&#xff1a;4.wbStego4open使用教程&#xff1a;第一步&#xff1a;第二步&#xff1a;第三步&#xff1a;第四步&#xff1a;第五步&#xff1a; 5.wbSteg…

创建日期时间类型对象 pendulum.datetime()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 创建日期时间类型对象 pendulum.datetime() 选择题 请问pdl.datetime(2023,10,1,12,0,0)的结果是&#xff1a; import pendulum as pdl print("【执行】pdl.datetime(2023,10,1)") …

最新知识付费变现小程序源码/独立后台知识付费小程序源码/修复登录接口

最新知识付费变现小程序源码&#xff0c;独立后台知识付费小程序源码&#xff0c;最新版修复登录接口。 主要功能 会员系统&#xff0c;用户登录/注册购买记录 收藏记录 基本设置 后台控制导航颜色 字体颜色 标题等设置 流量主广告开关小程序广告显示隐藏 广告主审核过审核…

使用Nokogiri库的Python程序

python import requests from bs4 import BeautifulSoup import os # 设置 proxies {"http": "", "https": ""} # 设置headers headers { User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (K…

[极客大挑战 2019]HardSQL1

提示(最后有我自用的字典, 需要可以自取) 空格等号绕过报错查询当显示不全时left(), right(), substr(), 拿到题目以后直接fuzz 这里发现过滤了 空格以及空格的变式/**/ union 但是updatexml还在还可以使用报错注入, 空格可以用()代替, 而则可以用like代替 payload: …

IntelliJ IDEA 2022创建Maven项目

IntelliJ IDEA 2022创建Maven项目 点击New Project 配置一下下 (1). 选择Maven Archetype (2). 输入Name就是你的项目名称 (3). 输入Location是你的项目保存目录 (4). 选择JDK (5). 选择Catalog一般默认选择Internal即可 在Archetype这里我们选择一个模板来创建Maven项目 …

【蓝桥杯选拔赛真题08】C++最大值最小值平均值 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析

目录 C/C++最大值最小值平均值 一、题目要求 1、编程实现 2、输入输出 二、算法分析</

GraphQL入门与开源的GraphQL引擎Hasura体验

背景 Hasura 是一个开源的 GraphQL 引擎&#xff0c;它可以帮助开发人员快速构建和部署现代应用程序的后端。它提供了一个自动化的 GraphQL API &#xff0c;可以直接连接到现有的数据库&#xff0c;并提供实时数据推送和订阅功能。 Hasura 团队总部位于印度。 下载安装 脚本…

VScode + opencv + c++ + win配置教程

准备&#xff1a; 1、下载opencv 2、下载MinGw 3、 3、下载CMake 下载完解压放到一个文件夹里面&#xff0c;便于环境管理&#xff0c;文件夹我重命名了&#xff0c;解压出来文件名不一样正常 环境变量配置 C:\Users\wuxulong\cpp_env\MinGw\mingw64\bin C:\Users\wuxulon…

如何用PHP获取各大电商平台的数据

PHP获取API数据是指使用PHP语言从web服务中提取数据。API是指应用程序接口&#xff0c;它允许应用程序之间进行交互和通信&#xff0c;并且允许一个应用程序从另一个应用程序获取数据。PHP是一种网站开发语言&#xff0c;它可以使用多种方式来获取API数据。 在PHP中&#xff0…

【Python】批量下载素材酷视频资源

【需求】 做视频精彩需要用到梗图视频等,但是素材酷上面的视频没有搜索功能,每次用起来还要去下载也很麻烦,下载只能一个一个下载也很麻烦,下要搞一个能够批量下载的功能,然后把下载的资源全部放进万兴喵影编辑器的云空间,这样就可以做到随做随查随用了。 【效果】 目…

设计模式之装饰模式

一、概念 装饰模式是一种结构型设计模式&#xff0c;允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。 二、构造 部件&#xff08;Component&#xff09;声明封装器和被封装对象的公用接口。 具体部件&#xff08;Concrete Component&#xff09;类是…

路由器基础(五): OSPF原理与配置

开放式最短路径优先 (Open Shortest Path First,OSPF) 是一个内部网关协议 (Interior Gateway Protocol,IGP),用于在单一自治系统(Autonomous System,AS) 内决策路由。OSPF 适合小型、中型、较大规模网络。OSPF 采用Dijkstra的最短路径优先算法 (Shortest Pat…

腾讯云24元香港服务器有用过的吗?性能如何?

香港云服务器可以选择腾讯云香港地域的轻量应用服务器&#xff0c;轻量2核2G配置、20M峰值带宽、40G SSD系统盘&#xff0c;优惠价格24元一个月&#xff0c;Linux系统是288元一年&#xff0c;Windows系统是360元一年&#xff0c;腾讯云百科txybk.com分享腾讯云香港轻量应用服务…

php去除字符串两边空格空字符串换行方法

在PHP中&#xff0c;可以使用以下几种方法去除字符串两边的空格、空字符串和换行符&#xff1a; 使用trim()函数去除字符串两边的空格和空字符串&#xff0c;例如&#xff1a; $str " Hello World! "; $trimmed trim($str); echo $trimmed; 使用preg_replace(…

代码随想录打卡第62天|● 503.下一个更大元素II ● 42. 接雨水

● 503.下一个更大元素II 题目&#xff1a;给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之后的第…