STM32:I²C通信原理概要

news2025/1/22 16:54:17

一、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通信结束。 

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

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

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

相关文章

k8s系列文章一:安装指南

# 临时关闭分区 swapoff -a 前言 k8s是docker的升级版,可用于docker集群配置管理微服务 一、更新ubuntu系统版本 sudo apt update sudo apt upgrade二、添加GPG密钥(阿里源) 尽管我不知道gpg是个什么东西,反正跟着做就完了 curl https://mirrors.a…

PostgreSQL 进阶 - 模式匹配,过滤敏感数据,数据清理

1. 模式匹配 SELECT phone_number FROM customers;使用正则表达式替换所有非数字字符 这样可以清理和标准化电话号码数据,去除任何非数字字符,只保留数字 UPDATE customers SET phone_number REGEXP_REPLACE(phone_number, [^0-9], , g) WHERE phone…

NProgress顶部进度条的用法

大家打开一个网页的时候,会看到一个进度条,然后加载完成后进度条就消失了。这个呢,就是一个第三方的进度条库,叫做nprogress. 1.首先安装nprogress(咱直接用npm安装了) : npm install --save nprogress 2.然后在 router/index.j…

高德Go生态建设与研发实践

序 高德在构建Go生态演化过程中,已经实现了QPS从0到峰值千万的飞跃,本篇文章主要介绍在此过程中积累的一些技术决策及性能优化和重构经验。阅读本文读者会有以下3点收获: 1.高德Go生态发展历程及现状分析 2.高德云原生Serverless落地情况&…

MobaXterm使用VNC远程显示和控制ubuntu桌面

目录 1 在ubuntu中安装vnc 2 设置ubuntu远程连接 3 MobaXterm中连接ubuntu的vnc 1 在ubuntu中安装vnc 参考:Ubuntu18.04~Ubuntu22.04安装并配置VNC_ubuntu安装vnc-CSDN博客 大体流程就是在ubuntu中安装vnc,设置密码,然后配置服务&#x…

Android开发适不适合做车载开发?

众所周知,今年的互联网行业就业率并不是很好,像“开猿截流,公司倒闭”等事件时有发生,感觉市场对于人才的需求量降低了,给原本不景气的Android 开发行业增添了不少的难度。 随着新能源汽车行业的脱颖而出,…

网络安全策略制定和执行: 提供制定全面的网络安全策略的步骤和指南,以确保组织的整体安全性。

网络安全一直是IT领域的一个关键挑战。随着威胁的不断演变和增强,制定和执行全面的网络安全策略变得至关重要。本文将为您提供一系列步骤和指南,帮助您确保组织的整体安全性。 第一章:明确安全需求和目标 在开始制定网络安全策略之前&#…

数据抽取+dataworks的使用+ADB的应用

一,大数据处理之数据抽取 1,什么是数据抽取 在大数据领域中,数据抽取是指从原始数据源中提取所需的数据子集或特定数据项的过程, 数据抽取是数据预处理的重要步骤,它为后续的数据分析和建模提供了基础。 2&#xff…

Win10强制卸载更新补丁的三种方法

在Win10电脑中用户发现更新补丁出现问题了,想通过卸载补丁来解决问题。但是,许多新手用户对于强制卸载Win10系统的更新补丁的方法不是很了解,那么下面小编就给大家介绍关于Win10电脑内强制卸载更新补丁的简单方法吧。 方法一:通过…

MongoDB系例全教程

一、系列文章目录 一、MongoDB安装教程—官方原版 二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控 三、MongoDB 基于角色的访问控制 四、MongoDB用户管理 五、MongoDB基础知识详解 六、MongoDB—Indexs 七、MongoDB事务详解 八、MongoDB分片教程 九、Mo…

Docker的安装、基础命令与项目部署

文章目录 前言一、docker安装与MySQL部署1.Linux环境下docker的安装(1)基于CentOS7(2)基于Ubuntu 二、docker基础1.常见命令(1)快速创建一个mysql容器(MySQL得一键安装)。&#xff0…

【ubuntu】搭建lamp架构

一、准备工作 1、更新源 apt-get updateapt #就是一个管理包的工具,理解为centos中的yum update #表示让apt执行更新的操作,更新的内容为软件列表。#为什么要更新软件列表? 就时本地会隔断时间进行同步镜像站的资源包,但是我…

如何滴水不漏的学完C语言?

如何滴水不漏的学完C语言? 学习C语言需要掌握的知识点确实非常广泛。如果你觉得学校教学中所涉及的内容有所欠缺,可以有很多其他方式进行补充学习。最近很多小伙伴找我,说想要一些C语言资料,然后我根据自己从业十年经验&#xff…

GPT引发智能AI时代潮流

最近GPT概念爆火,许多行业开始竞相发展AI ,工作就业也将面临跳转,目前测试就业形势就分为了两大类,一类是测试行业如功能、性能、自动化综合性人才就业技能需求,另一类便是AI测试行业的需求普遍增长,原本由…

使用IO完成端口实现简单回显服务器

说明 使用IO完成端口实现简单回显服务器,因为是测试用的,所以代码很粗糙。 提醒 使用的是ReadFile、WriteFile来实现Overlapped IO,正式场合应该用WSARecv、WSASend,原因:来自《Windows网络编程技术》 8.2.5节 在这里…

葡萄酒中的酒精含量是多少?

当你喝完一杯加利福尼亚赤霞珠和你的朋友在一个周五的晚上出游,你不禁会注意到,这只玻璃杯能让你感觉有点不同于你前几个周末喝的意大利灰皮诺葡萄酒。出于好奇,你查看了一下ABV,发现这个数字高达14.5%!难怪&#xff0…

requires SDK version >=3.0.1 <4.0.0, version solving failed

这个很明显是FLUTTER SDK不匹配的问题,需要更新flutter SDK,最简单的办法,在flutter官网的页面直接下载最新的,然后替换之前旧版本的flutter 官网: 在 Windows 操作系统上安装和配置 Flutter 开发环境 - Flutter 中文…

C++并发编程实战——07.设计无锁的并发数据结构

文章目录 设计无锁的并发数据结构定义及意义无阻塞数据结构无锁数据结构无等待数据结构无锁结构的利弊 无锁数据结构的例子无锁线程安全栈使用风险指针检测不可回收的节点使用引用计数无锁栈上的内存模型实现一个无锁的线程安全队列 设计无锁数据结构的指导建议 设计无锁的并发…

windwos10搭建我的世界服务器,并通过内网穿透实现联机游戏Minecraft

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

mysql双主搭建

https://www.bilibili.com/video/BV1BK4y1t7MY/?spm_id_from333.880.my_history.page.click&vd_source297c866c71fa77b161812ad631ea2c25 要到用双主,或多主,主要是考虑到这么一个场景: 如果一个应用,全球用户都要用&#x…