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

I2C通信协议

简介

I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线,由两根通信线:SCL(Serial Clock)和SDA(Serial Data)组成。是一种同步、半双工带数据应答的通信协议,支持总线上挂载多个设备,可实现一主多从和多主多从。下面从硬件电路,时序基本单元,时序等方面来了解I2C通信协议的工作原理。

硬件电路

在这里插入图片描述
这是I2C的接线图,所有设备的SDA接一起,SCL接一起,设备的SCL和SDA都配置成开漏输出模式,SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右。

配置成开漏输出模式可以解决总线冲突,I2C是多主设备和多从设备共用一条总线的,如果一个设备想将总线拉高,一个设备想将总线拉低,那么就发生了冲突,还有可能导致设备损坏。开漏输出加上拉电阻很好的解决了这个问题,开漏输出输出低电平才有驱动能力,输出高电平是高阻态的,总线要处于高电平,只能通过上拉电阻来实现。只要有一个设备输出了低电平,总线就是低电平,只有所有设备都输出高电平,总线才处于高电平。

时序基本单元

起始条件

SCL高电平期间,SDA从高电平切换到低电平。

终止条件

SCL高电平期间,SDA从低电平切换到高电平。
在这里插入图片描述
当从机捕获到这个SCL高电平,SDA下降沿信号时,就会进行自身的复位,等待主机的召唤。
然后在SDA下降沿之后,主机要再把SCL拉低,一方面是占用这个总线,另一方面是为了方便这些基本单元的拼接,就是之后除了起始和终止条件,每个时序单元的SCL都是以高电平开始,低电平结束。
起始和终止都是由主机产生的,在总线空闲状态时,从机不允许主动去操作总线。

发送一个字节

SCL低电平期间(开始条件后主机会把SCL拉低),主机将数据的最高位放到SDA线上,然后释放SCL,从机将在SCL高电平期间读取数据位,SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节。
在这里插入图片描述

接收一个字节

SCL低电平期间,从机将数据的最高位放到SDA线上,然后释放SCL,主机将在SCL高电平期间读取数据位,SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)
在这里插入图片描述

发送应答

主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

接收应答

主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)
在这里插入图片描述

时序

指定地址写

对于指定从机地址为1101000的设备,在其内部0x19地址的寄存器中,写入0xAA这个数据
在这里插入图片描述

指定地址读

起始-指定设备地址(1101000)-写入-寄存器地址(0001100)-重新启动-指定设备地址(1101000)-读-数据(10101010)
在这里插入图片描述

http://www.lryc.cn/news/432782.html

相关文章:

  • 使用Python实现智能信用评分系统
  • RocketMQ之发送消息源码分析
  • 使用宝塔面板安装mrdoc
  • C++操作符重载实例
  • Linux高效进程控制的实战技巧
  • 使用条件变量实现线程同步:C++实战指南
  • Spark2.x 入门: KMeans 聚类算法
  • 如何快速练习键盘盲打
  • Flask中实现WebSocket需要什么组件
  • java8 Stream流详解
  • 通信工程学习:什么是AB地址总线、DB数据总线、CD控制总线
  • CP AUTOSAR标准之EthernetInterface(AUTOSAR_SWS_EthernetInterface)(更新中……)
  • Windows系统离线安装使用pm2 管理进程
  • 4-4.Andorid Camera 之简化编码模板(获取摄像头 ID、选择最优预览尺寸)
  • 【深度学习】向量化
  • 基于canal的Redis缓存双写
  • 以太网交换机工作原理学习笔记
  • ECCV`24 | 蚂蚁集团开源风格控制新SOTA!StyleTokenizer:零样本精确控制图像生成
  • Flutter的升级和降级步骤
  • 计算机网络与Internet应用
  • [建模已更新]2024数学建模国赛高教社杯A题:“板凳龙” 闹元宵 思路代码文章助攻手把手保姆级
  • Spring Boot-自定义banner
  • 2158. 直播获奖(live)
  • python---爬取QQ音乐
  • tomato靶场攻略
  • Django+Vue3前后端分离学习(一)(项目开始时settings.py里的设置)
  • 一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)
  • C++ | Leetcode C++题解之第394题字符串解码
  • getLocation:fail, the permission value is offline verifying
  • 【数据分享】《中国城市统计年鉴》(1985-2023)全PDF版本 第一次补档