I2C通信讲解

I2C总线发展史

image-20250605213607253

image-20250605213644012

image-20250605213705754

image-20250605213808565

怎么在一条串口线上连接多个设备呢?

image-20250605213851905

image-20250605213918725

image-20250605214001109

由于速度同步线是由主机实时发出的,所以主机可以按需求修改通信速度,这样在一条线上可以挂接不同速度的器件,单片机和性能差的器件通信,就输出较慢的脉冲信号,和高性能芯片通信,就输出高速脉冲信号。

这条速度同步线被称为SCL时钟线

原来的串口线被称为SDA数据线

学习一种协议,用于所有I2C器件上

image-20250605214250318

因为有地址保留所以只能连接111个器件

image-20250605214352061

芯片的地址并不是由厂商随意写的,而是要得到飞利浦公司的授权

I2C硬件连接

image-20250605214538427

image-20250605214555850

image-20250605214623796

还要为SCL和SDA线添加上拉电阻

image-20250605214653655

I2C器件的所有接口必须是开漏模式(I2C器件的SCL和SDA必须是开漏模式),各自器件没有上拉或下拉电阻,如果每个器件内部都添加上拉电阻,当把大量的器件连在一起,上拉电阻的阻值也会累加,就对单片机IO端口的电流输出能力有很高的要求,最终也会影响到通信速度和稳定性。

image-20250605215004680

image-20250605215034240

事先将地址设置引脚连接到Vdd或GND上,这样才能确定器件的地址编码

各器件可以使用同一个电源也可以使用不同的电源

image-20250605215209495

上拉电阻使无信号时线上为高电平

如何传递数据内容

image-20250605215515841

SCL派上用场了

image-20250605215549961

Hz变化频率决定通信总速度

image-20250605215917709

image-20250605215949362

image-20250605220026000

单片机可以利用这个休息时间把下一个要发送的数据准备好

image-20250605220159764

image-20250605220249485

image-20250605220324278

单片机让出控制权

image-20250605220339895

image-20250605220443537

如果是默认的高电平就代表无应答,从设备没有收到数据,或者说收到了,但是数据是错误的

image-20250605220616516

image-20250605220654194

没有问题的话,SDA就会连接到GND使SDA输出低电平

image-20250605220747431

image-20250605220802539

image-20250605220818529image-20250605220832568

总之就是谁接收谁应答

image-20250605220915539

image-20250605220947172

要确定第一个工作区间在哪?

在第一个工作期间之前加一个 (起始位),再在最后一个工作期间后面,加入一个(结束位),也叫停止位

想出这个起始位和停止位的人是天才

image-20250605221238154

完整时序图

image-20250605221352844

来研究数据内容层面的东西

image-20250605221524229

image-20250605221620248

image-20250605221633512

接下来是读数据

image-20250605221756348

如何标出本次通信是接收(读)还是发送(写)

image-20250605221834658

image-20250605221858644

读操作是从设备将向单片机发送数据

写操作是是单片机向从设备发送数据

下面是出现的一个新问题

image-20250605222136180

像从设备每次读/写多个数据都要从第一个寄存器的盒子开始读写,假如我们想写第四个寄存器中的数据,那也要从第一个寄存器开始写,连续写四个才行,这样的操作是非常麻烦的,于是I2C协议规定了一个指针功能,英文是Pointer

image-20250605222320209

指针功能就是利用一组数据中第二个DATA数据,当作指针来使用

image-20250605222354440

如果要读写第四个寄存器,也可以表示从第四个寄存器开始读写

image-20250605222427304

image-20250605222627334

image-20250605222657176

下次再读时可以不使用指针了,直接读取上一次指针指向的寄存器内容,这个指针在国内被翻译成子地址/寄存器地址

如果一条总线上连接多个从设备,单片机要如何区分它们

image-20250605222901551

不是此号码的从设备将处在待机状态

image-20250605222939021

左边7位二进制数就表示着器件地址

image-20250605223022654

image-20250605223042104

image-20250605223112117

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

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

相关文章

Windows 10 IoT 系统深度定制指南:从环境搭建到工业部署

目录 一、Windows 10 IoT 架构特性与版本选型 1.1 核心架构设计 1.2 版本对比与选型建议 二、开发环境搭建与硬件适配 2.1 工具链配置 2.2 硬件适配关键步骤 三、系统定制流程详解 3.1 镜像定制(IoT Core Dashboard) 3.2 使用ICD(Im…

k8s开发webhook使用certmanager生成证书

1.创建 Issuer apiVersion: cert-manager.io/v1 kind: Issuer metadata:name: selfsigned-issuernamespace: default spec:selfSigned: {}2.Certificate(自动生成 TLS 证书) apiVersion: cert-manager.io/v1 kind: Certificate metadata:name: webhook…

MyBatis-Plus深度全解:从入门到企业级实战

MyBatis-Plus深度全解:从入门到企业级实战 一、为什么选择MyBatis-Plus? 1.1 MyBatis的痛点 - 重复CRUD代码编写 - 分页功能实现复杂 - 缺少通用Service层封装 - 动态表名支持困难 - 多租户方案需自行实现1.2 MyBatis-Plus核心优势 无侵入&#xff1a…

【无标题】路径着色问题的革命性重构:拓扑色动力学模型下的超越与升华

路径着色问题的革命性重构:拓扑色动力学模型下的超越与升华 一、以色列路径着色模型的根本局限 mermaid graph TB A[以色列路径着色模型] --> B[强连通约束] A --> C[仅实边三角剖分] A --> D[静态色彩分配] B --> E[无法描述非相邻关系] C --> F[忽…

01 Deep learning神经网络的编程基础 二分类--吴恩达

二分类 1. 核心定义 二分类任务是监督学习中最基础的问题类型,其目标是将样本划分为两个互斥类别。设样本特征空间为 X ⊆ R n \mathcal{X} \subseteq \mathbb{R}^n X⊆Rn,输出空间为 Y { 0 , 1 } \mathcal{Y} \{0,1\} Y{0,1},学习目标为…

数据结构:递归:泰勒展开式(Taylor Series Expansion)

目录 第一步:❓我们要解决什么? 第二步:将其类比为求自然数和 第三步:什么是每一项? 第四步:定义要计算的每一项(term) 第五步:定义递归函数结构 🌳 调用…

Hadolint:Dockerfile 语法检查与最佳实践验证的终极工具

在容器化应用开发的浪潮中,Dockerfile 作为构建 Docker 镜像的核心配置文件,其质量直接影响着应用的安全性、稳定性和可维护性。然而,随着项目复杂度的增加,手动检查 Dockerfile 不仅耗时,还容易遗漏潜在问题。今天,我要向大家介绍一款强大的工具——Hadolint,它将彻底改…

redis数据过期策略、淘汰策略

过期键的删除策略​ ​​1. 被动删除(惰性删除)​​ ​​触发时机​​:当客户端尝试访问某个键时,Redis会先检查该键是否过期。就是说,我们不时时检查每个键是否过期,而是在使用到这个键时检查是否过期&a…

ES 学习总结一 基础内容

ElasticSearch学习 一、 初识ES1、 认识与安装2、 倒排索引2.1 正向索引2.2 倒排索引 3、 基本概念3.1 文档和字段3.2 索引和倒排 4 、 IK分词器 二、 操作1、 mapping 映射属性2、 索引库增删改查3、 文档的增删改查3.1 新增文档3.2 查询文档3.3 删除文档3.4 修改文档3.5 批处…

鸿蒙任务项设置案例实战

目录 案例效果 资源文件与初始化 string.json color.json CommonConstant 添加任务 首页组件 任务列表初始化 任务列表视图 任务编辑页 添加跳转 任务目标设置模型(formatParams) 编辑页面 详情页 任务编辑列表项 目标设置展示 引入目标…

DeepSeek-R1-0528重磅升级:三大突破重新定义AI生产力

2025年5月28日,中国AI领军企业深度求索(DeepSeek)正式发布DeepSeek-R1-0528版本,这是继2025年1月R1模型登顶中美App Store后,DeepSeek在通用大模型领域的又一次战略级突破。此次升级虽为小版本迭代,却在推理…

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …

中国西部逐日1 km全天候地表温度数据集(TRIMS LST-TP;2000-2024)

时间分辨率&#xff1a;日空间分辨率&#xff1a;100m - 1km共享方式&#xff1a;开放获取数据大小&#xff1a;474.31 GB数据时间范围&#xff1a;2000-01-01 — 2024-12-31元数据更新时间&#xff1a;2025-05-31 数据集摘要 青藏高原是全球气候变化的敏感区域。地表温度&…

PPT转图片拼贴工具 v1.0

软件介绍 这个软件的作用就是将单个PPT的每一页转换为单独的图片&#xff0c;然后将图片进行拼接起来。 但是我没有还没有解决一次性处理多个文件。 效果展示如下&#xff1a; 软件安装 软件源码 import os import re import win32com.client from PIL import Imagedef con…

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…

抛砖引玉:RadarDet4D,NuScenes数据集Radar模态目标检测第二名(即将开源)

这几年一直在关注自动驾驶3D目标检测相关的研究。在NuScenes数据集上有很多经典的模型被提出并得到了验证&#xff0c;纯视觉3D目标检测经典的方法有BEVFormer、BEVDet系列、DETR3D、Sparse4D等工作&#xff0c;基于LiDAR的有CenterPoint、多模态有BEVFusion、DAL、UniTR等。 …

更新Java的环境变量后VScode/cursor里面还是之前的环境变量

最近我就遇到这个问题&#xff0c;这个一般是安装了多个版本的Java&#xff0c;并设置好环境变量&#xff0c;但VScode/cursor内部环境变量却没有改变 解决办法 打开设置&#xff0c;或者直接快捷键CTRL&#xff0c;搜索Java:Home编辑settings.json文件 把以下部分改为正确的…

线程的基础知识

进程和线程的区别&#xff1f; 从实例去引入我们的进程和线程的概念&#xff0c;说出进程和线程的关系&#xff0c;引出线程&#xff0c;说出两者的内存分配占用&#xff0c;上下文切换的区别 当操作系统把我们磁盘中的程序加载到我们的内存当中&#xff0c;为其分配内存空间&a…

x86 汇编中的【条件跳转指令】:从基础到扩展的全面解析(查表版)

为了彻底覆盖 x86 架构中所有条件跳转指令&#xff0c;包括 8086 到现代 x86-64 的全部变体&#xff0c;我重新整理了分类体系&#xff0c;并补充了鲜为人知的指令变体、操作数大小前缀和历史演进。 本文需要运用的知识(需要详细了解可点击对应的点)&#xff1a; flags寄存器…

FPGA点亮ILI9488驱动的SPI+RGB接口LCD显示屏(一)

FPGA点亮ILI9488驱动的SPIRGB接口LCD显示屏 ILI9488 RGB接口初始化 目录 前言 一、ILI9488简介 二、3线SPI接口简介 三、配置寄存器介绍 四、手册和初始化verilog FPGA代码 总结 前言 ILI9488是一款广泛应用于嵌入式系统和电子设备的彩色TFT LCD显示控制器芯片。本文将介…