一、I2C协议的简介: I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。
二、I2C协议的物理层
2.1、I2C物理层总线:讲I2C总线前我们先来知悉下总线的概念
2.1.1、总线:总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线。
2.1.2、I2C总线:I2C总线分为时钟总线和数据总线,I2C总线支持多个通讯主机和多个通讯从机,使用的是同步通信的方式。
2.2、高阻态:在STM32单片机中的GPIO模式有一个是开漏输出,开漏输出也叫漏极开路输出,开漏输出模式下,P_MOS时被关闭的,这时候只能输出高阻态,无法输出高电平,即是断路,所以开漏输出只能输出低电平,不能输出高电平,输出高电平实际就是输出高组态,由上拉电阻统一拉成高电平。
为什么是发送高阻态不能是高电平,因为当P-MOS和N-MOS都导通时会形成低阻通路,此时就会产生大电流或者短路造成器件损坏,所以当I2CA设备发送高电平时;I2CB设备发送低电平时就会导致两个设备短路,所以I2C单个设备空闲时发送的是高阻态,当所有设备都空闲了都输出高阻态了才会由上拉电阻统一上拉为高电平。
高阻态相当于断路,发送高组态就是与总线断开通信。
2.3、为什么要使用开漏输出:看下图,如果将两个CMOS与非门G1和G2的输出端连接在一起,设G1的输出为高电平时,TP1导通,TN1截止;而G2的输出为低电平时TP2截止,TN2导通,此时G1的TP1端和G2的TN2端会形成一条低阻通路,从而产生很大的电流造成器件烧毁,并且无法确定电平状态,这一问题就需要OD门(漏极开路门)
2.4、漏极开路门(开漏输出):看下图,所谓漏极开路门是指CMOS门电路的输出只有NMOS管,并且它的漏极是开路的。使用OD门时必须在漏极和电源VDD之间外接一个上拉电阻(pull-up resister)RP。如图2所示为两个OD与非门实现线与,将两个门电路输出端接在一起,通过上拉电阻接电源。
2.5、OD门的上拉电阻作用:上拉电阻阻值高,电容充电慢,OD门电平转换速度就慢,上拉电阻阻值低,电容充电快,OD门电平转换速度就快,但是上拉电阻阻值不能随意变小,太小了电流就大了容易烧毁器件。
2.6、线与的作用:全部输出高电平时,输出高电平,其中一个输出低电平,输出低电平
结合以上的知识知道了上拉电阻的重要性,上拉电阻的作用:(1)当I2C总线所有设备都输出高阻态时就与I2C总线断开通信,总线是空闲状态上拉电阻就会拉高总线电平这就达到了线与的特性;(2)控制电流的大小,电阻过大电平会被过分拉低,不能保证逻辑低电平被检测到,电阻过小,电流太大会造成设备损坏(3)电平转换速度,上拉电阻阻值过高时,电容充电慢,电平转换速度慢;上拉电阻阻值过低时,电容充电快,电平转换速度快。