硬件电路设计之I2C电路设计

描述

1 简介

IIC-BUS的英文全称是Inter-Integrated Circuit Bus,其主要的目的是实现微控制器与外围设备进行数据传输。它是一种半双工通信方式,通信方式简单,仅包含SDA(数据总线)和SCL(时钟总线)组成。通信总线通常由主设备和从设备组成,从设备是通过设备地址来进行区分,在同一时刻,设备之间数据传送只能由一个设备传送给对应地址的设备。

微控制器

什么是I2C总线主设备和从设备?

主设备 :I2C总线的主导者,能向从西安发送起始信号和中止信号,且能决定总线数据的发送与接收。另外,主设备能发送指令,同时既能向从设备读取数据也能向从设备写入数据。

从设备 :I2C总线的被动者,对主设备发送的数据做出及时响应。从设备的类型比较多,具体可以是EEROM、各种传感器等。

I2C总线最大可以挂在多少个设备?

最大电容限制(标准模式和快速模式为400pF,高速模式为500pF)。且在实际的应用过程中最好保证I2C设备不超过8个(经验之谈)。

有些设备预留地址线的仅3位(相同设备最多挂在8个,2^3=8),甚至更少。

I2C总线最大的传输速率为多少?

序号模式最大速率
1标准模式100kb/s
2快速模式400kbit/s
3高速模式3.4Mbit/s

之前在讲串口电路时,有讲过一个“波特率”概念,不知道是否有人知道波特率和比特率的区别?

波特率:单位时间内传输的码元个数。

比特率:单位时间内传输的二级制位数。

二者换算关系为:比特率=波特率×log2n,此处分享一个计算的案例:

微控制器

2 I2C总线特点

  • 简单和灵活 :仅包含数据线和时钟线,物理通信链路简单。
  • 双向传输 :主设备既能向从设备发送数据,从设备也能向主设备发送数据。
  • 时钟同步 :采用串行时钟总线,能有效保证数据的准确性。
  • 多种设备支持 :总线上挂载的设备,可以挂在多种不同设备,不受设备类型的影响。

3 编码规则

  • 起始信号和停止信号
  • 起始信号:当时钟信号为高电平时,数据线由高电平变为低电平的过程。
  • 停止信号:当时钟信号为高电平时,数据线由低电平变为高电平的过程。

微控制器

注意: 在IIC空闲时,SDA、SCL都是保持高电平 。(I2C信号出现故障时,先查看SCL和SDA的电平)

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

微控制器

4 信号传输

IIC总线上面的每一个设备都有唯一的地址与之对应,信号传输时也是根据指定的地址找到设备来传输信号。

  • 写操作
  • 主设备确定从设备地址,发送起始信号;
  • 向总线设备的地址以及数据传输方向;
  • 从设备收到主设备的信号后没回复一个应答信号;
  • 主设备向从设备以字节为单位发送数据,且每发送一个数据,都会接收来自从设备的应答信号;
  • 数据发送完成后,从设备发送一个停止信号,表明此次数据传输结束。

微控制器

  • 读数据
  • 主设备确认从设备地址,发送起始信号;
  • 向总线上发送从设备的地址以及读取数据的命令;
  • 对应的从设备回复应答信号;
  • 从设备向主设备回复主设备要读取的数据;
  • 从设备数据发送给完成后,主机向从设备发送一个非应答信号,然后中止数据的读取。

微控制器

5 总线仲裁

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

时钟同步

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

SDA仲裁

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

仲裁过程

  1. 设备1和设备2同时向设备发送起始信号,总线上电平与发送电平一致,继续发送数据;
  2. 设备1和设备2同时向设备发送低电平,总线上电平与发送电平一致,继续发送数据;
  3. 设备1发送高电平。设备2发送低电平。此时,总线呈现低电平状态。总线的电平与设备1发送的电平不一致,退出竞争,且变为从设备。设备2继续发送数据。

5 上拉电阻计算

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

电容充电一般公式:

微控制器

整理可得:

微控制器

I2C规范将低于VIL或0.3VDD的电压定义为逻辑低电平,同样将高于VIH或0.7VDD的电压定义为逻辑高电平。由上式可以求得:

微控制器

即T1=0.356675*CL

微控制器

所以最大上拉电阻为:

微控制器

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

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

模式上升沿的最大时间总线负载最大容限
标准模式1000ns400pF
快速模式300ns400pF
高速模式120ns550pF

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

微控制器

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分