一文搞懂I2C硬件设计要点

 有些事,只能一个人做。有些关,只能一个人过。有些路啊,只能一个人走。 ——龙应台 《目送》

I2C协议是什么:

        I2C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980年代初设计的。

        I2C总线上每个设备都可以作为主设备或从设备,但一个总线上一般只有一个主设备 ,可以带多个从设备。其中主设备一般用来产生时钟信号,并初始化总线的数据输出,因此主设备一般是CPU,而从设备只能被动响应主设备发起的通信请求,所以各种I2C接口芯片将作为从设备设用。I2C可以有多个从设备,主设备需要通过地址来确定与哪个期间进行通信。

I2C特点:

①有一根时钟线,所以是同步通信

②只有一根数据总线,所以是串行传输数据

③这根总线是双向传输,但是要分时,所以是半双工通

I2C模式:

I2C总线是一种同步,半双工,采用电平信号收发的串行总线,其速率支持:

标准模式:速率高达100kbit/s

扫描二维码关注公众号,回复: 15640850 查看本文章

快速模式:速率高达400kbit/s

快速模式+:速率高达1Mbit/s

高速模式:速率高达3.4Mbit/s

超快速模式:速率高达5Mbit/s

为什么是开漏输出?

I2C协议支持多个主设备与多个从设备在一条总线上,如果不用开漏输出,而用推挽输出,会出现主设备之间短路的情况,所以总线一般会使用开漏输出。

第一个原因,如果设计成推挽输出,就会造成短路情况,如下图:

两个从设备一个拉高,一个拉低,就会造成短路。而开漏输出,有上拉电阻限流,这样都不会造成短路。

第二个原因,就是多设备通信仲裁需要做线与逻辑,开漏输出能做到,如果用推挽输出做线与就会如上面原因,造成短路。

线与逻辑,主设备想总线置1,开始空闲,从设备这时候如果输出0 ,会产生1&0=0,造成主设备认为总线还是被占用,无法空闲,主设备放弃拉高,这样不会破坏从设备正在通讯的数据。

为什么要接上拉电阻?

接上拉电阻是因为I2C通信需要输出高电平的能力。一般开漏输出无法输出高电平,如果在漏极接上拉电阻,则可以进行电平转换。

I2C由两条总线SDA和SCL组成。连接到总线的器件的输出级必须是漏极开路,都通过上拉电阻连接到电源,这样才能够实现“线与”功能。当总线空闲时,这两条线路都是高电平。

上拉电阻阻值怎么确定?

一般IO端口的驱动能力在2mA~4mA量级。

阻值不能过小:功耗问题。如果上拉阻值过小,VDD灌入端口的电流将较大,功耗会很大,导致端口输出的低电平值增大(I2C协议规定,端口输出低电平的最高允许值为0.4V)。故通常上拉电阻应选取不低于1K的电阻(当VDD=3V时,灌入电流不超过3mA)。

阻值不能过大:速度问题。它取决于上拉电阻和线上电容形成的RC延时,RC延时越大,波形越偏离方波趋向于正弦波,数据读写正确的概率就越低,所以上拉电阻不能过大。

I2C总线上的负载电容不能超过400pF。当I2C总线上器件逐渐增多时,总线负载电容也相应增加。当总的负载电容大于400pF时,就不能可靠的工作。这也是I2C的局限性。

建议上拉电阻可选用1.5K,2.2K,4.7K。

猜你喜欢

转载自blog.csdn.net/jk_101/article/details/128786930
I2C