I2C通信讲解

news2025/7/27 23:32:26

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.coloradmin.cn/o/2401842.html

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

相关文章

基于回归算法的心理健康预测(EDA + 预测)

心理健康涵盖情感、心理与社会福祉,影响认知、情绪和行为模式,决定压力应对、人际交往及健康决策,且在生命各阶段(从童年至成年)均至关重要。心理健康与身体健康同为整体健康的核心要素:抑郁会增加糖尿病、…

【新品解读】一板多能,AXRF49 定义新一代 RFSoC FPGA 开发平台

“硬件系统庞杂、调试周期长” “高频模拟前端不稳定,影响采样精度” “接收和发射链路难以同步,难以扩展更多通道” “数据流量大,处理与存储跟不上” 这些是大部分客户在构建多通道、高频宽的射频采样链路时,面临的主要问题。…

贪心算法应用:线性规划贪心舍入问题详解

贪心算法应用:线性规划贪心舍入问题详解 贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致结果是全局最优的算法策略。在线性规划问题中,贪心算法特别是贪心舍入技术有着广泛的应用。下面我将全面详细地讲解这一主题。…

YOLO在C#中的完整训练、验证与部署方案

YOLO在C#中的完整训练、验证与部署方案 C# 在 YOLO 部署上优势明显(高性能、易集成),但训练能力较弱,通常需结合 Python 实现。若项目对开发效率要求高且不依赖 C# 生态,建议全程使用 Python;若需深度集成…

洛谷题目:P2761 软件补丁问题 (本题简单)

个人介绍: 题目传送门: P2761 软件补丁问题 - 洛谷 (luogu.com.cn) 前言: 这道题是一个典型的状态搜索问题,核心目标就是利用给定d额多个补丁程序,将包含若干错误的软件修复成没有错误的状态,并且要使得修复过程当中的总耗时最少。下面是小亦为大家阐述滴思路: 1、状态…

智慧园区数字孪生全链交付方案:降本增效30%,多案例实践驱动全周期交付

在智慧园区建设浪潮中,数字孪生技术正成为破解传统园区管理难题的核心引擎。通过构建与物理园区1:1映射的数字模型,实现数据集成、状态同步与智能决策,智慧园区数字孪生全链交付方案已在多个项目中验证其降本增效价值——某物流园区通过该方案…

【OpenGL学习】(四)统一着色和插值着色

文章目录 【OpenGL学习】(四)统一着色和插值着色统一着色(Flat/Uniform Shading)插值着色(Interpolated Shading) 【OpenGL学习】(四)统一着色和插值着色 着色器介绍: h…

在 CentOS 上安装 Docker 和 Docker Compose 并配置使用国内镜像源

在 CentOS 上安装 Docker 和 Docker Compose 并配置使用国内镜像源,可以加速镜像下载速度。以下是详细的步骤: 一、安装 Docker 移除旧版本的 Docker(如果有): sudo yum remove docker \docker-client \docker-client…

Docker慢慢学

1、Docker DeskTop 2、N8N下载 docker run -p 8888:5678 n8nio/n8n 3、Kafka kafka依赖zookeeper,先启动zookeeper docker pull zookeeper docker run -d --name zookeeper -p 2181:2181 -e ALLOW_ANONYMOUS_LOGINyes zookeeper 启动kafka docker pull confluentinc/cp…

cursor-free-vip使用

一、项目简介 Cursor-Free-VIP 是一个开源项目,旨在帮助用户免费使用 Cursor AI 的高级功能。它通过自动注册 Cursor 账号、重置机器 ID 和完成 Auth 验证等操作,解决 Cursor AI 中常见的限制提示。 二、系统准备 1…cursor需要更新到最新的版本 三、…

使用SSH tunnel访问内网的MySQL

文章目录 环境背景方法参考 注:本文是使用SSH tunnel做端口转发的一个示例。有关SSH端口转发,可参考我的几篇文档 https://blog.csdn.net/duke_ding2/article/details/106878081https://blog.csdn.net/duke_ding2/article/details/135627263https://blo…

Redis持久化模式RDB与AOF

RDB持久化 RDB也被叫做Redis数据快照。简单来说就是把内存中的所有数据记录到磁盘中。当Redis实例故障重启后重磁盘中读取快照文件进行数据恢复(快照文件默认保存在当前运行目录); 演示Redis正常停机自动执行一次RDB操作 配置Redis触发RDB机制 RDB其它配置也可在red…

【数据结构】树形结构--二叉树(二)

【数据结构】树形结构--二叉树(二) 一.二叉树的实现1.求二叉树结点的个数2.求二叉树叶子结点的个数3.求二叉树第k层结点的个数4.求二叉树的深度(高度)5.在二叉树中查找值为x的结点6.判断二叉树是否为完全二叉树7.二叉树的销毁 一.…

深度学习题目1

梯度下降法的正确步骤是什么? a.计算预测值和真实值之间的误差 b.重复迭代,直至得到网络权重的最佳值 c.把输入传入网络,得到输出值 d.用随机值初始化权重和偏差 e.对每一个产生误差的神经元,调整相应的(权重&#xff…

【Oracle】锁

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 锁基础概述1.1 锁的概念与作用1.2 锁的工作原理1.3 Oracle锁的分类 2. 行级锁 (Row-Level Locks)2.1 行级锁的基本概念2.1.1 TX锁(事务锁)2.1.2 行级锁的工作机制 2.2 行级锁的类型2.…

JS逆向爬虫教程与实战技巧

想要一个关于爬虫JS逆向的详细教程。这是一个很专业的技术需求,最近有个可能是正在学习爬虫技术的开发者或者数据分析师,遇到了需要破解JavaScript加密的反爬机制的问题,想让我出一期实战教程,话不多说,开干。 以下是我…

【Redis】Redis 的常见客户端汇总

目录 一、命令行客户端 二、图形界面的客户端 三、Java 客户端 3.1 SpringDataRedis 3.2 Jedis 3.2.1 连接池的配置 3.3 Lettuce 3.3.1 RedisTemplate 工具类实现 3.3.2 自定义序列化器 3.3.3 StringRedisTemplate 3.3.4 集群配置 3.3.4.1 刷新节点集群拓扑动态感应…

关于akka官方quickstart示例程序(scala)的记录

参考资料 https://doc.akka.io/libraries/akka-core/current/typed/actors.html#first-example 关于scala语法的注意事项 extends App是个语法糖,等同于直接在伴生对象中编写main 方法对象是通过apply方法创建的,也可以通过对象的名称单独创建&#x…

2025年渗透测试面试题总结-腾讯[实习]玄武实验室-安全工程师(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]玄武实验室-安全工程师 1. 自我介绍 2. CSRF原理 3. Web安全入门时间 4. 学习Web安全的原因 …

网站首页菜单两种布局vue+elementui顶部和左侧栏导航

顶部菜单实现 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Vue.js Element UI 路由导航</…