一、i2c总线定义
要搞清楚一种总线,就跟了解一件事情的来龙去脉一样,首先要弄清楚由来。
i2c是inter-intergrated circuit的简称,英文翻译过来是:内置集成电路。为什么i2c是内置集成电路?i2c总线是由philips公司在80年代初开发的一种简单、双向二线制同步串行总线,为了让主板、嵌入式系统用以连接低速的周边设备而发展的,从这个字面上意思上来看,i2c是一种低速率的串行总线,为了解决低速设备接入高速设备而存在的。
i2c可以写成i²c、iic,i2c之所以被广泛应用,因为这种通信总线比较简单,物理上只需要两根线--串行数据线(sda)和串行时钟线(scl),即可在连接于总线上的器件传送信息。这里说明一点,i2c仅限于板级间走线,因为通信距离受到一些参数限制,比如总线的负载电容、总线上的电流等等。 既然是双方或者多方通信,肯定会有发起的一方。我们将发起通信的这一方称为主器件,主器件用来启动总线传送数据,并产生时钟,数据在时钟脉冲的作用下,去寻址从器件。此时任何被寻址的器件均被认为是从器件。在总线上主和从、发和收的关系不是恒定的,而取决于此时数据的传输方向。主机负责产生时钟和终止数据传送。
二、工作原理
下图是i2c总线电路的结构分析,虚框内是ic内的电路,虚框外是外部电路。
从上图可以看出:i2c两根线:一根串行时钟线scl、一根串行数据线sda,且两根线对应到器件的两个pin均是双向的,也就是说主器件和从器件不是恒定不变的。
pin脚的电路结构为开漏输出(开漏输出的典型特点是需外接上拉电阻才能对外输出高电平),所以需要通过上拉电阻接电源vcc,保证总线空闲时两根线都是高电平,且能够实现高低电平的变化。总线在传输数据时,当scl电平为高时,sda数据有效,且需要保持一定的时间;当scl为低电平时,sda数据无效,允许变化。
i2c总线有主从之分,连接总线的外部器件也都是cmos器件,输出级也都是开漏电路,在总线上消耗的电流很小,这样保证i2c总线不需要太大的电流驱动能力。但i2c总线上可扩展的器件数量主要是由电容负载来决定,因为每个器件的总线接口都有一定的等效电容,而线路中电容会影响总线传输速度,当电容过大时,有可能造成传输错误。所以需要根据不同的负载电容去估算支持的最大从设备数量。i2c总线的电容负载能力为400pf(通过驱动扩展可达到4000pf),每一个器件的输入都相当于一个等效电容,由于i2c总线扩展器件的连接方式为并联,因为i2c总线的等效电容等于每个器件的等效电容之和,等效电容存在会造成传输信号波形的畸变,在超出范围时,会导致数据传输出错。
由上图可以看出,rp是上拉电阻,cl就是该器件i2c接口的对gnd电容,上拉电阻rp计算方式:(vddmax-uinlmax)/rpmin< (2~4)ma(i/o口的灌电流)其中:vddmax:电源电压的最大值,uinlmax:i/o口上允许的低电平的最大值(cmos电路结构中uinl<=0.7v)
举例:评估出一个最小的上拉电阻阻值
已知:电源电压vdd=5v±%10,io端口的驱动能力为3ma,uinmax=0.7v,则最小的上拉电阻计算如下:
(vddmax-uinmax)/rpmin<3ma 代入数据,得rpmin=1.6k;
上拉电阻rp的最大值计算
总线电容是线路连接和管脚的总电容,它决定了rp的最大值
1)标准模式:每条总线线路的最大电容负载都为400pf,且tr<300ns;
2)快速模式:每条总线线路的最大电容负载都为200pf,且tr<300ns;
i2c的速率:
标准模式sm(standard mode):100kbit/s,
快速模式fm(fast mode):400kbit/s,
快速+模式(fast mode plus):1mbit/s
高速模式hs(high-speed mode):3.4mbit/s
快速模式器件的输入有抑制毛刺的功能,sda和scl输入有施密特触发器;
快速模式器件的输入缓冲器对sda和scl信号的下降沿有斜率控制功能;
如果快速模式器件的电源电压被关断,sda和scl的i/o管脚必须悬空,不能阻塞总线;
评估i2c总线一个最大的上拉电阻阻值方法
i2c端口输出高电平是通过rp上拉到vdd实现,线上电平由低到高的变化,电源通过rp对线上负载电容cl充电,从低电平切换到高电平,是需要一定时间的,即上升时间,这个上升时间可以近似用充电时间常数rpcl表示,瑞昱100kbit/s速率应用,信号上升时间小于300ns,假设线上的cl为20pf,计算出对应的rp值为17k。(计算公式:rpmax=tr/(0.8473cb)),tr为上升时间,cb为总线电容。最大的rpmax是变化的,需要根据实际的cb计算。
如果rp*cl充电时间常数过大,将是信号上升沿变化缓慢,达不到传输数据要求;如果rp太小,则会增大端口的sink电流,在可能的情况下,rp取值大要一些,以减少好点。
电路干扰:在i2c设备的电源入口处要加滤波电容,一般加10nf或100nf;sda和scl上如果有干扰,要做滤波处理,总线上串接几十欧姆的电容,对地加几十pf电容;
三、通信流程
i2c通信特征总的来说,主要是同步串行通信、非差分、低速率。
i2c的在数据传输过程中共有三种类型的信号:开始信号start,结束信号end,应答信号ack/nack.
开始信号:scl为高电平时,sda由高电平跳变为低电平,表示开始通信;
停止信号:scl为高电平时,sda由低电平跳变为高电平,表示结束通信;
应答信号ack(nack):在接收数据的ic在接收到一个字节数据后,向发送数据的ic发出特定的低电平脉冲(nack是高电平脉冲,应答信号一般是在第9个时钟传输),表示已经收到数据。开始和结束信号都是由主机发车,应答信号是由从机发出。
数据的有效性:当开始传输数据时,i2c是在scl为高电平时采样,所以sda线上的数据必须在时钟scl高电平周期内保持稳定的高电平或者低电平状态,否则会导致通信失败。同样,只有在scl线上的时钟信号是低电平时,sda线上的电平才能改变。
空闲状态:scl,sda线上都是高电平。
ack/nack说明:
1.主机向从机发送数据,从机无法接收或者无法识别解析数据时,会发送nack;
2.从机向主机发送数据,主机不想接收了,主机会发送nack,这时从机释放sda总线,好让主机接下来发送stop信号。
发起通信的流程
首先主机会线拉低sda总线,标志我要开始通信了,接下来主机会发送 7bit的地址+1bit的读写位 如果某个从设备地址和主机发的地址吻合,就会发出一个ack信号,通信就此建立。之后的读写操作,要具体看从设备的通讯规范,比如读一个寄存器可能要如下操作:
图中,灰色表示主机发送,白色表示从机发送。主机之所以如此发送数据,是根据从机的通信手册来的,并不是标准的i2c协议规定的,主机并不知道这些数据的意义,只有从机知道。
传输步骤
1.在scl线为高电平时,主机通过将sda线从高电平切换到低电平来启动总线通信
2.主机想总线发送要与之通信的从机的7位或者10位地址,以及读写位。
3.每个从机将主机发送的地址与自己的地址进行比较,如果地址匹配,则从机将sda线拉低一位,返回一个ack位,如果主机的地址与从机的地址不匹配,则从机将sda线拉高。
4.主机发送或接受数据帧:
5.传输完每个数据帧后,接收设备将另一个ack位返回给发送方,以确认成功接收到该帧。
6.随后主机将scl切换为高电平,然后再将sda切换为高电平,从而向从机发送停止条件。
以上是单个字节的传输步骤详解,多字节的读写和页写,后面我们根据代码再介绍。
四、i2c通信优缺点
与其他通信协议相比,i2c听起来很复杂,以下是其优缺点的总结。
优点
仅使用两根线支持多个主机和多个从机ack/nack位用于确认每个帧都已成功传输硬件比uart更简单缺点
数据传输速率比spi慢数据帧的大小限制为8位
高通抵制收购,谁想博通还有后招
芯片封装知识微总汇
物联网使我们生活变得智能的同时,城市也变得更智能
三星高端存储芯片二期一阶段下线,二阶段预计2021年上半年建成投产
Holole国内上线?售价配置全曝光?
简述i2c总线的工作原理 i2c通信过程 i2c通信协议原理
补偿脉冲发电机集惯性储能、机电能量转换和脉冲成形的综合技术
村田制作展望,未来手机及车用零件的需求将快速回升
ST汽车应用处理器整合RealVNC远端遥控技术
螺旋板冷凝器胀管胀紧程度的控制方法
日本区块链游戏《契约英灵》已发布快来体验吧
TPS62745降压转换器简介
媒体聚焦 | 从瑞萨收购一家毫米波雷达企业,看汽车电子的未来发展
数码摄像机的滤镜口径
光衰减器分类及型号
楼盘里面如何加入物联网技术
NTT宣布与Megaport扩大合作伙伴关系以简化混合和多云基础设施的构建
石墨烯在柔性传感器领域的应用有哪些
开关电源EMC测试中常见的问题有哪些
网格单元在哺乳动物的导航中的重要性