2 通信篇-I2C总线基础知识(1)

文摘   2024-08-20 07:31   湖北  

为了提供良好的阅读体验,所有文章文中不会插入插入广告。

目录

  • I2C通信简介

  • I2C总线特点

  • I2C总线分类

  • I2C总线协议

  • I2C总线仲裁

  • 上拉电阻计算过程

1 I2C通信简介

I2C总线最难调试总线,没有之一。I2C总线电路设计本身比较简单,包含时钟总线(SCL)数据总线(SDA)I2C总线的数据线和时钟线均采用开漏输出方式,电路设计时需要外加上拉电阻,上拉电阻的阻值一般为1K10K不等。I2C具体的架构见下:

2 I2C总线特点

  • 只要求两条总线线路:时钟总线(SCL)数据总线(SDA)

  • 连接到总线上的Device都有唯一的器件地址

  • 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏。

  • 串行的8位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达 400kbit/s,高速模式下可达 3.4Mbit/s

  • 片上的滤波器可以滤除总线数据线上的毛刺波保证数据完整。

  • 连接到相同总线的IC数量只受到总线的最大电容400pF 限制。

3 I2C总线分类

I2C总线根据的通信的速率不同,可分为Standard-mode、Fast-mode、Fast-mode Plus、High-speed modeUltra-Fast mode具体区别见下:

I2C 模式最大速率
Standard-mode100 kbps
Fast-mode400 kbps
Fast-mode Plus1 Mbps
High-speed mode3.4 Mkbps
Ultra-Fast mode5 Mbps

4 I2C总线协议

  • 起始信号(START)与停止信号(STOP)

  • 起始信号为时钟信号(SCL)为高电平时,数据信号(SDA)由高电平跳变为低电平;停止信号为时钟信号(SCL)为高电平时,数据信号(SDA)由低电平跳变为高电平

  • 逻辑1和逻辑0

  • I2C通信与其它的通信不同,在传输有效数据位时,在时钟信号SCL为高电平期间,数据信号(SDA)电平不允许变化。

    • 逻辑1:时钟数据SCL为高电平时,数据信号(SDA)也为高电平。

    • 逻辑0时钟数据SCL为高电平时,数据信号(SDA)也为低电平。

  • 应答信号(ACK)与非应答信号(NACK)

    • 应答信:当主设备传送8位数据结束后,主机会将SDA线拉高,此时如果从设备正确接收数据则会将SDA拉低并在SCL高电平时保持低电平,这个信号为ACK信号
    • 非应答信号:如果在传输8位数据后从机没有将SDA拉低则该信号为NACK

  • 读数据

    • 主设备确认从设备地址,发送起始信号;

    • 向总线上发送从设备的地址以及读取数据的命令;

    • 对应的从设备回复应答信号;

    • 从设备向主设备回复主设备要读取的数据;

    • 从设备数据发送给完成后,主机向从设备发送一个非应答信号,然后中止数据的读取。

  • 写数据

    • 主设备确定从设备地址,发送起始信号;

    • 向总线设备的地址以及数据传输方向;

    • 从设备收到主设备的信号后没回复一个应答信号;

    • 主设备向从设备以字节为单位发送数据,且每发送一个数据,都会接收来自设备的应答信号;

    • 数据发送完成后,从设备发送一个停止信号,表明此次数据传输结束。

5 I2C总线仲裁

总线上存在两个及两个以上主设备时,每个节点都可以作为主设备向总线上发送命令或者数据。当总线上同时存在两个或者两个以上主设备发送信号时,就会造成总线冲突。此时,就需要进行I2C总线仲裁。分以下两个方面来说:

  • 时钟同步

时钟总线(SCL)具有“线与”的逻辑功能,就是当总线有任意一个节点向总线发送低电平时,总线就会呈现低电平的状态。(所有节点呈现高电平时,总线表现为高电平)

  • SDA仲裁

SDA仲裁也是基于“线与”的逻辑功能,节点发送数据后,比较总线与发送的数据是否一致,保持一致则继续发送,否则退出竞争。SDA仲裁这种机制保证了I2C中线上即使有多个主设备,也不会造成数据丢失。

  • 仲裁过程

    • 设备1和设备2同时向设备发送起始信号,总线上电平与发送电平一致,继续发送数据;

    • 设备1和设备2同时向设备发送低电平,总线上电平与发送电平一致,继续发送数据;

    • 设备1发送高电平。设备2发送低电平。此时,总线呈现低电平状态。总线的电平与设备1发送的电平不一致,退出竞争,且变为从设备。设备2继续发送数据。

6 上拉电阻计算

由于I2C总线端口的高电平是通过上拉电阻实现,总线上的电平从低变高时,电源通过上拉电阻对线上负载电容CL充电,这需要一定的上升时间。

电容充电一般公式:

整理公式可得:

I2C规范将低于VIL0.3VDD的电压定义为逻辑低电平,同样将高于VIH0.7VDD的电压定义为逻辑高电平。由上式可以求得:

 T1=0.356675*CL

所以最大上拉电阻为:

结论:电源电压决定上拉电阻的最小值,总线负载电容决定上拉电阻的最大值。

Tr取最大值,CL取最小值时,R有最大值。

模式

上升沿的最大时间

总线负载最大容限

标准模式

1000ns

400pF

快速模式

300ns

400pF

高速模式

120ns

550pF

所以快速模式下,负载电容为50pF:

7 往期好文推荐

1 基础篇-电平转换基础知识(分立器件)
2 基础篇-电平转换基础知识(集成IC)
3 基础篇-DCDC电路基础知识(1)
4 基础篇-DCDC电路的工作模式(2)
5 基础篇-BUCK拓扑EMI对策(3)
6 基础篇-BOOST拓扑EMI对策(4)
坚持输出高质量文章,后续有更多精彩内容,欢迎关注本公众号哦!您的点赞关注在看是对我最大的支持!
欢迎关注础篇合集:点我跳转至合集

小尹讲电子
介绍硬件电路基础知识,记录工作中的调试问题,欢迎各位老铁一起讨论技术问题!
 最新文章