首页 > 编程知识 正文

I2c总线,i2c通信的详细讲解

时间:2023-05-05 03:26:14 阅读:148014 作者:54

I2C总线设计规范基础篇

I2C通信协议分析中常用的IIC接口通用设备的设备地址由类型编号和地址码组成,共7位。 形式如下。 D7D6D5D4D3D2D1D0

1 .装置类型由D7-D4的共4位确定。 这是从半导体公司生产的时候开始这个类型就固定了。 也就是说,这四个人已经固定了。

2、用户定义地址代码: D3-D1共3位。 这是用户自己设定的,像普通的EEPROM这样的设备是由外部IC的3个端子组合而成的水平决定的(常用的名字是A0、A1、A2等)。 这就是地址码。 因此,同一型号的IC最多只能在同一IIC总线上搭载8片相同种类的芯片。

3、最低位是R/W位。

在现代电子系统中,许多IC需要相互之间以及与外部的通信。 为了提供硬件效率并简化电路设计,飞利浦开发了用于内部IC控制的简单双向双线串行总线I2C。 I2C总线支持所有的集成电路制造工艺,飞利浦和其他制造商提供了种类非常丰富的I2C兼容芯片。 作为专利的控制总线,I2C已经成为全球工业标准。

起始和终止信号:

在SCL线为高电平期间,SDA线以从高电平向低电平变化来表示开始信号; 在SCL线路为高电平期间,SDA线路通过从低电平到高电平的变化来表示结束信号。

有效数据信号:

在I2C总线进行数据传输的情况下,在时钟信号为高电平的时候,数据线上的数据必须是稳定的,只有在时钟线上的信号为低电平的时候,数据线上的高电平或者低电平的状态允许变化。

数据传送格式:

每个字节必须保证8位的长度。 数据传输时,必须先传输最高有效位(MSB ),并在传输的每个字节后加上响应位。 也就是说,一帧有9比特。 如果在一定时间内没有接收到来自从站的响应信号,从站会自动判断为正确接收了数据。

3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com /

由于I2C接口采用OpenDrain机制,器件本身只能输出低电平,不能积极输出高电平,只能通过外上拉电阻RP将信号线提升到高电平。 因此,I2C总线需要上拉电阻。

SDA和SCL都是双向线路。 总线上器件的输出级必须是漏极开路或集电极,都只有通过一个电流源或上拉电阻连接到正电源电压,才能实现“线与”功能。 公共汽车空闲的时候,这两条线路都是高电平的。 总线速度越高,总线上拉电阻越小。

典型的IO端口驱动能力为2mA~4mA数量级。 RP电阻值过小时,从VDD流入端口的电流变大,端口输出的低电平值变大。 (I2C协议规定端口输出的低电平最大允许值为0.4V。 ); 如果流入端口的电流过大,也可能会损坏端口。 因此,通常上拉电阻需要选择1K以上的电阻(VDD=3V时,冲击电流为3mA以下)。

上拉电阻RP的计算公式:

最小值为(通常最大电流为3mA );

最大值为(T=1us100KHz,T=0.3us400KHz,Buscapacitance );

在实际应用中,I2C的上拉电阻和阻抗匹配一点关系也没有,只是opendrain的上拉。 阻力放在任何一端都是一样的。 接近大师后,离开slave。 反之亦然。 主要担心速率问题,上拉电阻可以从2K减小到1K,布线可以尽量减少寄生电容的影响。 该速率问题取决于上拉电阻和线路电容器的RC延迟,RC延迟越大波形越倾向于远离方波,上升沿越平缓,时间越长不确定电平的时间越长,setuptime和holdtime

建议:上拉电阻请设置在OD输出端附近。 当I2C总线上的主从设备两端为OD输出时,电阻位于信号路径的中间位置。 主站设备侧在软件模拟时,子站设备为OD输出时,请将电阻设置在离子站设备近的位置。

3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com /

I2C没有规定电缆长度。 唯一的限制是I2C总线标准,I2C的最大容量为400pF,I2C总线的负载容量规定为不超过400pF。 如下图所示,随着I2C总线上的设备逐渐增加,总线负载容量也会相应增加。 总负载容量超过400pF时,将无法进行可靠的动作。

I2C总线有许多限制,包括:

7位地址长度,不允许地址冲突; 总线上的设备数量和总线长度受总线负载能力的限制; 各器件的传输电平和时钟必须一致; 总线上的设备不能直接热插拔。I

各I2C总线设备内部的SDA、SCL端子的电路结构相同,端子的输出驱动器连接到输入缓冲器。 其中,输出为漏极开路场效应晶体管,输入缓冲器为高输入阻抗同相器[1]。 这个电路有两个特征。

SDA、SCL由于漏极导通

路结构,借助于外部的上拉电阻实现了信号的“线与”逻辑;引脚在输出信号的同时还将引脚上的电平进行检测,检测是否与刚才输出一致。为 “时钟同步”和“总线仲裁”提供硬件基础。

I2C设备对总线的操作仅有“把线路接地”——输出逻辑0。基于I2C总线的设计,线路上不可能出现电平冲突现象。如果一设备发送逻辑0,其他发送逻辑1,那么线路看到的只有逻辑0。也就是说,如果出现电平冲突,发送逻辑0的始终是“赢家”。总线的物理接法允许主设备往总线写数据的同事读取数据。这样两主设备争总线的时候“赢家”并不知道竞争的发生,只有“输家”发现了冲突——当写一个逻辑1,却读到了0——而退出竞争。

时钟同步:如果被控器希望主控器降低传送速度可以通过将SCL主动拉低延长其低电平时间的方法来通知主控器,当主控器在准备下一次传送发现SCL的电平被拉低时就进行等待,直至被控器完成操作并释放SCL线的控制控制权。这样以来,主控器实际上受到被控器的时钟同步控制。可见SCL线上的低电平是由时钟低电平最长的器件决定;高电平的时间由高电平时间最短的器件决定。这就是时钟同步,它解决了I2C总线的速度同步。

总线仲裁:假设主控器1要发送的数据DATA1为“101 ……”;主控器2要发送的数据DATA2为“1001 ……”总线被启动后两个主控器在每发送一个数据位时都要对自己的输出电平进行检测,只要检测的电平与自己发出的电平一致,他们就会继续占用总线。在这种情况下总线还是得不到仲裁。当主控器1发送第3位数据“1”时(主控器2发送“0” ),由于“线与”的结果SDA上的电平为“0”,这样当主控器1检测自己的输出电平时,就会测到一个与自身不相符的“0”电平。这时主控器1只好放弃对总线的控制权;因此主控器2就成为总线的唯一主宰者。

不难看出:

① 对于整个仲裁过程主控器1和主控器2都不会丢失数据;

② 各个主控器没有对总线实施控制的优先级别;

③总线控制随即而定,他们遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权。

根据上面的描述,“时钟同步”与“总线仲裁”可以总结如下规律:

①主控器通过检测SCL上的电平来调节与从器件的速度同步问题——时钟同步;

②主控器通过检测SDA上自身发送的电平来判断是否发生总线“冲突”——总线仲裁。因此,I2C总线的“时钟同步”与“总线仲裁”是靠器件自身接口的特殊结构得以实现的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。