IIC(I2C)协议详解

news2024/11/15 21:41:48

1.简介

IIC,即I²C,全称 Inter-Integrated Circuit,字面上的意思是集成电路之间,它其实是I²C Bus简称,所以中文应该叫 集成电路总线 ,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。

2. I2C 硬件连接

I2C 在硬件上的接法如下所示,主控芯片引出两条线 SCL(SCK)时钟线,SDA 数据线,在一条I2C 总线上可以接很多 I2C 设备,SDA和SCL这两根线必须要接一个上拉电阻,常用是4.7K,一般在4.7k-10k之间。

总线空闲的时候SCL和SDA处于高电平。

IIC总线标准模式下速度可以达到100Kb/s,快速模式下可以达到400Kb/s,高速模式可达3.4Mb/s。

3. I2C 信号

I2C 协议中数据传输的单位是字节,也就是 8 位。但是要用到 9 个时钟:前面 8 个时钟用来传输 8 数据,第 9 个时钟用来传输回应信号。传输时,先传输最高位(MSB)。

开始信号( S): SCL 为高电平时, SDA 山高电平向低电平跳变,开始传送数据。

结束信号( P): SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。

响应信号(ACK):接收器在接收到 8 位数据后,在第 9 个时钟周期,拉低 SDA

SDA 上传输的数据必须在 SCL 为高电平期间保持稳定, SDA 上的数据只能在SCL 为低电平期间变化

I2C 协议信号如下:

4. IIC 传输数据的格式

4.1写操作

1)主芯片要发出一个 start 信号

2)然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写, 0 表示写, 1 表示读)

3)从设备回应(用来确定这个设备是否存在),然后就可以传输数据

4)主设备发送一个字节数据给从设备,并等待回应

5)每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。

6) 数据发送完之后,主芯片就会发送一个停止信号

7)下图:白色背景表示"主→从",灰色背景表示"从→主"

4.2读操作

1)主芯片要发出一个 start 信号

2)然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写, 0 表示写, 1 表示读)

3)从设备回应(用来确定这个设备是否存在),然后就可以传输数据

4)从设备发送一个字节数据给主设备,并等待回应

5)每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。

6)数据发送完之后,主芯片就会发送一个停止信号

下图:白色背景表示"主→从",灰色背景表示"从→主"

5. 协议细节

5.1如何在 SDA 上实现双向传输?

主芯片通过一根 SDA 线既可以把数据发给从设备,也可以从 SDA 上读取数据,连接 SDA 线的引脚里面必然有两个引脚(发送引脚/接受引脚)。

5.2内部原理

设备的 SDA 中有一个三极管,使用开极/开漏电路(三极管是开极, CMOS管是开漏,作用一样),如下图:

真值表如下:

从真值表和电路图我们可以知道:

  • 当某一个芯片不想影响 SDA 线时,那就不驱动这个三极管

  • 想让 SDA 输出高电平,双方都不驱动三极管(SDA 通过上拉电阻变为高电平)

  • 想让 SDA 输出低电平,就驱动三极管

5.3为何 SCL 也要使用上拉电阻?

在第 9 个时钟之后,如果有某一方需要更多的时间来处理数据,它可以一直驱动三极管把SCL 拉低。

当 SCL 为低电平时候,大家都不应该使用 IIC 总线,只有当 SCL 从低电平变为高电平的时候, IIC 总线才能被使用。

当它就绪后,就可以不再驱动三极管,这是上拉电阻把 SCL 变为高电平,其他设备就可以继续使用 I2C 总线了。

5.4 I2C总线最多可以挂多少个设备

I2C是7位地址,2^7=128,但是地址0x00不用,那就是127个地址,所以理论上可以挂127个从器件。

尽管I2C协议没有规定总线上device最大数目,但是规定了总线电容不能超过400pF。

管脚都是有输入电容的,PCB上也会有寄生电容,所以会有一个限制。

实际设计中经验值大概是不超过8个器件

规定电容大小的原因:I2C的OD(漏极开路)要求外部有电阻上拉,电阻和总线电容产生了一个RC延时效应,电容越大信号的边沿就越缓,有可能带来信号质量风险。传输速度越快,信号的窗口就越小,上升沿下降沿时间要求更短更陡峭,所以RC乘积必须更小。

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

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

相关文章

魔兽世界服务端源码各个重要文件详细情况说明——魔兽世界开服

魔兽服务端开服源文件各文件翻译很多文件在服务器中我们知道是跟什么有关,但就是不知道其作用是什么。就算我们知道在这些地方中的文件都是有着不小的作用。但是由于不知道各个文件代表的是什么意思所以在面对这些文件的时候都会有无从下手的感觉,所以今…

云渲染市场安全吗?

云渲染虽然在3D制作行业已经日益普及,但仍有人持观望态度:云渲染市场安全吗?使用云渲染是否能够保证我的数据安全、财产安全等问题,今天小编就来跟大家探讨一下这个问题。首先,在解答云渲染市场是否安全这个问题之前&a…

MobarX远程登录虚拟机

环境:宿主机WIN10,virtualBox安装的ubuntu16; 前提条件:宿主机和ubuntu能够互相ping通; 步骤: 第一步:添加网卡类型为“仅主机的网络”(MobarX登录Ubuntu需要的网卡) …

Session详解,学习Session(包含底层分析和使用)

什么是sessionsession在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。 session和cookie的比较 cookie保存在客户端,session保存在服务端cookie作用于…

2023企业在媒体邀约的过程中应该注意哪些细节

很多企业在发展壮大之后,都会成立自己的品牌公关部,来进行日常公关的维护工作,这就需要邀请大量的媒体资源和媒体人脉来进行邀约,企业通常会邀请那些服务好、资深的媒介机构,进行明确的分工,从而完成每一场…

廉颇未老,VB语言迎来春天,中文编程也绝处逢生

“VB语言过时了,早就淘汰了”,不少程序员认为,如今VB上不了台面。颠覆许多人认知的是,VB(Visual Basic)作为微软“亲儿子”,借助微软平台在全球用户中仍有着稳固地位,是被大家看轻的…

技术分享 | Redis 之分布式锁

作者:贲绍华 爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 引言&#xff1a…

Redis事务

Redis事务官网: http://redis.cn/topics/transactions.html 一、Redis事务的特性 Redis事务可以一次执行多个命令,并且满足以下两个重要的特性 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中&a…

CSS3 calc()函数

CSS3 calc()函数 概述 在CSS3中,我们可以使用calc()函数通过“计算”的方式来定义某一个属性的取值。 使用 语法 属性: calc(表达式);说明 可以使用calc()函数计算元素的width、margin、padding、font-size等。 对于calc()函数,有以下5条运算规则…

我的第一个基于vue-cli的程序

文章目录一 准备环境1.1 node.js安装1.2 安装Vue工具(Vue CLI)第一种安装方式【可能会遇到失败,如果失败请尝试第二种方式】下载的文件的存放位置第二种安装方式安装cnpm二 操作步骤2.0 进行目标文件夹下的命令行窗口2.1 创建项目2.2 成功2.3 运行项目2.4 效果一 准…

力扣1700.无法吃午餐的学生数量

题目描述: 学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。 餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮&#xff…

戴尔成就300015电脑出现错误代码怎么重新安装系统?

戴尔成就300015电脑出现错误代码怎么重新安装系统?有用户使用这款戴尔成就300015电脑的时候,总是在使用过程中无故的冒出错误代码,导致系统崩溃了。那么这个情况怎么去进行问题的修复呢?一起来看看详细的解决方法分享吧。 准备工作…

【深度学习】如何封装可维护的restiful api

这篇文章是用一个案例的形式尝试解决字段入参多了,在python这种风格的语言下如何维护的问题! 文章目录前言1. json 是个好东西2. json 是个坏东西3. json维护数据的适用范围总结4.解决4.1 基础版4.2 进阶版4.2.1 行动4.2.2 精进4.3 另一种选择总结前言 …

立根铸魂 崛起数智时代 GBASE受邀出席操作系统产业峰会2022

2022年12月28日,由openEuler开源社区发起举办的操作系统产业峰会2022/openEuler Summit 2022正式召开。GBASE荣幸受邀参加统信软件“深耕数字化”主题论坛,分享GBase 8c基于鲲鹏生态的创新实践历程和经验。 操作系统产业峰会2022 -南大通用GBase 8c基于鲲…

使用Nordic的nrf52832控制指定从机(一主多从)

一主多从1. 想要实现的功能2. 从机3. 主机3.1 主从机连接个数设置3.2 扫描过滤3.3 连接和断开连接3.4 按键处理3.5 从机读写3.5.1 写3.5.1 读4运行效果1. 想要实现的功能 1.主机能连接多个从机(主机作为控制器,从机作为节点)。 2.主机能使用…

Java跨域问题

目录 1、跨域问题说明 ​2、跨域解决方案 2.1、局部跨域解决方案 2.1.1、CrossOrigin注解跨域 2.1.2、手动设置响应头 2.2、全局跨域解决方案 2.2.1、实现WebMvcConfigurer接口设置跨域 2.2.2、定义CorsFilter Bean实现跨域 2.2.3、重写ResponseBodyAdvice接口中的bef…

ros的launch文件知识

_node标签: 在指定机器上启动节点respawn"true|false"(可选) 如果节点退出,是否自动重启respawndelay"N"(可选) 如果 respawn 为 true,那么延迟N秒后启动节点required"true|false"(可选) 该节点是否必须,如果…

ZooKeeper 避坑实践:SnapCount 设置不合理导致磁盘爆满,服务不可用

作者:子葵 背景 在 ZooKeeper 的日常使用过程中,一个令人头疼的问题就是节点的磁盘容量问题,如果由于过大的 TPS 或者不适当的清理策略会导致集群中数据文件,日志文件的堆积,最终导致磁盘爆满,Server 宕机…

在线客服系统部署配置邮箱消息通知功能 - 唯一客服(v1kf.com) -开源私有化独立部署在线客服系统源码...

为在线客服系统设置邮件通知具有以下几个好处: 改善客户体验:邮件通知可以让客户实时收到新消息或更新通知,这有助于提高他们对您的服务的整体体验。 提高效率:邮件通知可以帮助提高客服团队的效率,因为它们会在新消息…

非专业人士如何完成数据采集?纯干货,一文看懂

写在前面: 本教程能够解决大部分人的数据采集及分析需求,实用、简单,尤其适合Excel大户、办公族、业务人员,或者不会编程、不懂数据分析理论的技术小白…… 来不及看的可以先点赞收藏! 01 点对点的采集:…