I2C总线信号与测试案例(一)

1、i2c 总线介绍
i2c bus是inter-ic bus的缩写,意思是ic器件之间的通讯总线;i2c 总线的特点如下:
只需要两个线路,serial data line(sda)和serial clock line(scl)i2c总线可以支持一主多从或者多主多从的架构;i2c总线上的从器件是通过地址来唯一确定的;i2c总线是串行,8-bit,双向传输的,支持standard-mode(100kbits/s)、fast-mode(400kbit/s)、fast-mode plus(1mbit/s)、high-speed mode(3.4mbit/s)i2c总线上可以挂载的器件数量只受最大总线电容影响;2、i2c总线的电气设计
上图展示了i2c的电气连接架构
所有i2c器件通过sda和scl连接到总线上i2c总线不同电平总线要分别接电阻上拉至当前电平值不同总线电平的i2c器件通过双向电平转换器(switches)作为电平转换2.1 电平转换的基本逻辑和原理
如上图所示,主要有3种状态:
双边器件均不下拉总线(输入输出为高)。3v3部分线路上拉,这样的话mos的g和s极都是3v3,vgs小于导通电压,mos不导通;如此一来,双边器件均保持其对应电平值的高电平。3v3器件下拉总线到低电平。mosfet的s极变低,而mos的g极电平是3v3,vgs大于阈值mos导通;5v器件总线电平通过mos被拉至低电平,最终实现低电平的输出输入。5v器件下拉总线至低电平。mos的d极电压降低直至比s极电压低的时候,mos内置的漏极-基底二极管导通,mos管的s极也就是3v3总线电平开始下降,当s极电平下降到vgs大于阈值电平时,mos管导通,s极电平和d极电平一致被拉到低电平;从而实现了高电平器件输出到低电平器件输入。2.2 上拉电阻
i2c端口为开漏输出(区别于常见io的推挽输出),即其io口输出是通过控制mos管打开与关断来将漏极上的电平进行输出,所以没有高电平输出能力,必须将总线上拉至总线电平来实现高电平输出。
开漏输出低电平的实现如下图所示:
开漏输出高电平的实现如下图所示:
2.2.1 上拉电阻的阻值如何选择
众所周知,电阻是能耗器件,所以肯定是尽可能使得电阻上的功率损耗越小越好,即电阻在此条件下是个最小值
rp(min)=(vcc-vol(max))/iol
vcc:上拉电平 ,volmax):总线输出为低电平的最大电压值 ,iol:总线的驱动电流(vol状态下)上拉电阻rp还会受信号上升时间约束,一般datasheet上有明确的最大上升时间要求,若超过这个值,有可能信号还没上升至高电平就开始下降,导致信号采样出错;
rp(max)=tr/(0.8473 cb)
tr:上升时间,cb:总线电容(线路、连接和管脚的总电容)
推导公式如下:
参考一阶电路的电压随时间的变化公式 v(t)=vcc (1-e^(-t/rc))
上升下降时间一般波形的30% - 70%,这是因为输入低电平最大值门限一般0.3vcc,输入高电平门限一般0.7vcc(不是绝对,参考芯片datasheet)
当vih=0.7*vcc时,vih=0.7*vcc=vcc*(1-e^(-t1/rp*cb))
当vih=0.3*vcc时,vih=0.3*vcc=vcc*(1-e^(-t2/rp*cb))
上升时间即为:tr=t2-t1=0.8473rp8cb最终根据计算出来的rp范围内选择一个合适阻值
注意:
实际电路设计中,总线上会挂载不止一个器件,这就要综合多个器件的参数进行计算,进而选择一个适合所有器件的值除了上拉电阻rp,有时在器件连接到总线上时会串入一个电阻rs,这个电阻主要作用是消除高压毛刺;rs跟rp的关系如下图所示,rs的值可以参考,若实测总线上没有高压毛刺,那rs可以去掉;
3、i2c的数据帧结构
起始位:开始状态位,1bit,scl为高时sda由高至低的过程称作起始位;还有一种重复起始条件,指的是主机对于同一个从器件进行同一操作的时候,不需要先发送停止条件结束总线,再开始;
地址位:7bit,是当前总线需要访问的器件地址;特殊的情况是10bit,一般不用。7bit地址里一般前四位是由器件类型定死,我们自己可以配置的是低三位,也就意味着,同类型的器件在同一根总线上最多可以挂载8个;
读写操作位:1bit,0代表写,1代表读;
应答位:1bit,低电平,每8bit之后跟一位应答位,表示接收端接收成功;还有一种非应答位(nck)高电平,表示终止传输。
数据位:8bit,一个字节后面必须跟着一个应答位;一般数据的第一个字节传输的是要操作的寄存器地址,后面字节是要写入或者读出的数据。
停止位:当scl为高电平时,sda总线由低电平向高电平切换表示停止条件
起始和停止条件一般由主机产生。总线在起始条件之后被认为是忙碌的状态;在停止条件的某段时间之后,总线被认为再次处于空闲状态。重复起始条件跟起始条件一样,后续总线会处于忙碌状态;sda线上数据必须在scl高电平周期保持稳定,也就是说sda数据高低状态变化只能发生在scl低电平的时候;4、i2c的时钟同步与仲裁
同步:所有主机在scl上产生他们自己的时钟来传输i2c总线上的报文。数据只有在scl高电平周期有效,因此需要一个确定的时钟进行逐位仲裁。如下图所示,多个主机在同一个总线上产生自己的时钟信号;scl线被有最长低电平周期的器件保持低电平,此时低电平周期短的器件会进入高电平的等待状态;所以,低电平周期由低电平时钟周期最长的器件决定,高电平周期由高电平周期最短的器件决定。
仲裁:主机只能在总线空闲的时候启动传输。两个或多个主机在起始条件的最小持续时间内产生一个起始条件;
当scl为高电平时,仲裁在sda线上发生;在其他主机发送低电平时,发送高电平的主机将断开他的输出,因为总线上电平与自己电平不一致。
5、i2c与cbus的兼容
c-bus接收器可以连接到标准的i2c总线。但是必须连接第三条叫dlen的线,而且要省略响应位。通常i2c的传输是8位的字节传输,兼容c-bus的器件有不同的格式。在混合总线中,想要访问操作c-bus器件,需要发送特定的c-bus地址(0x0000001x);发送c-bus地址后,dlen线被激活,发送c-bus格式的报文,如下图所示:

怎么用摇表测量确定三相电机的好坏
PCB线路板有哪一些散热方式
Verizon 45W USB-PD快充充电器采用英飞凌 EZ-PD™ PAG1 AC-DC电源解决方案
TD-HSDPA关键技术与网络部署
电子纸测试系统的驱动显示及未来应用
I2C总线信号与测试案例(一)
全球封测产能严重不足,封装厂供需差高达40%
十大要点告诉你 外媒是如何看待华为的
华为申请“引望”等多枚运输工具商标
新能源 | 广汽蔚来迎战市场换挡叠加变更周期,造车的“第三条道路”
三星A90 5G版曝光 预计售价4500元左右
万用表和钳形表检测电流的原理及区别
如何保证LED显示屏的质量并延长其使用寿命?
给予寻求建立声誉的AR初创公司机遇,BBC面向全球招募
GTB干式试验变压器
如何在比特现金网上创建基于SLP的代币
浅谈压敏电阻应用和作用
LED显示屏安装五大要点
MEMS传感器按工作原理分有哪些类型
BCD计数器电路分析