当前位置: 首页 > article >正文

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.lryc.cn/news/2401842.html

相关文章:

  • 【信息系统项目管理师-选择真题】2025上半年(第一批)综合知识答案和详解
  • ABP VNext 在 Kubernetes 中的零停机蓝绿发布
  • linux 故障处置通用流程-36计-14-27
  • https和http有什么区别-http各个版本有什么区别
  • 基于回归算法的心理健康预测(EDA + 预测)
  • React Native开发鸿蒙运动健康类应用的项目实践记录
  • 【新品解读】一板多能,AXRF49 定义新一代 RFSoC FPGA 开发平台
  • 贪心算法应用:线性规划贪心舍入问题详解
  • YOLO在C#中的完整训练、验证与部署方案
  • 洛谷题目:P2761 软件补丁问题 (本题简单)
  • 智慧园区数字孪生全链交付方案:降本增效30%,多案例实践驱动全周期交付
  • 【OpenGL学习】(四)统一着色和插值着色
  • 42、响应处理-【源码分析】-浏览器与PostMan内容协商完全适配
  • 在 CentOS 上安装 Docker 和 Docker Compose 并配置使用国内镜像源
  • Java Lambda表达式深度解析:从入门到实战
  • Docker慢慢学
  • cursor-free-vip使用
  • 使用SSH tunnel访问内网的MySQL
  • Redis持久化模式RDB与AOF
  • 【JS进阶】ES5 实现继承的几种方式
  • 【数据结构】树形结构--二叉树(二)
  • JavaScript性能优化实战:深入探讨JavaScript性能瓶颈与优化技巧
  • 在 CentOS 上将 Ansible 项目推送到 GitHub 的完整指南
  • 深度学习题目1
  • Spring @Scheduled vs XXL-JOB vs DolphinScheduler vs Airflow:任务调度框架全景对比
  • 【Oracle】锁
  • 共识算法Raft系列(1)——什么是Raft?
  • JS逆向爬虫教程与实战技巧
  • Neovim - LSP 底层原理,难点配置(二)
  • 【Redis】Redis 的常见客户端汇总