简单介绍一下什么是I2C总线的引脚功能和时序
扫描二维码
随时随地手机看文章
I2C(Inter-Integrated Circuit)总线是Philips公司推出的一种双向二线制同步串行总线,仅用两根线即可实现器件之间的数据传送。目前很多芯片集成了I2C总线接口,如CYGNAL公司的C805IF0XX系列单片机、实时日历时钟芯片PCF8563及数字温度传感器LM75等。
1.I2C总线的引脚功能
如图6-7所示,I2C总线通过两根线将多个芯片(包括MCU)连接在一起,其中,SDA和SCL都是双向传输线,分别用于传输数据和时钟信号。这两个引脚必须经过上拉电阻与正电源相接,如图6-8所示。另外,在总线空闲时,SDA和SCL都是高电平。
图6-7 I2C总线接口扩展示意图
图6-8 I2C总线接口电气结构图
需要注意,在图6-7中并没有指出从机或主机,这是因为I2C是一种多主机的总线,可以有多个主机,且主从关系可以根据任务要求而更改。当有个多个主机时,I2C总线可以通过内部的竞争检测和仲裁电路进行仲裁处理,以保证数据正确传输。另外,主机是产生时钟信号并初始化数据传输的器件,只有带CPU的器件才能成为主机。每个器件都有一个唯一的地址编号,被主机通过地址编号寻址访问的器件是从机。
2.I2C总线的引脚时序
I2C总线的数据传输过程由主机控制。在该过程中,主机的操作可以分为以下几个步骤:①发送启动信号;②传输从机地址,并确认数据传输方向(主机输出从机输入,或主机输入从机输出);③与从机之间进行数据传输(发送或读取);④发送停止信号。I2C总线信号的时序由主机产生和控制,下面分别进行介绍。
(1)启动信号和停止信号的时序
启动信号和停止信号分别用于确定数据传输的开始和结束。如图6-9所示,当SCL为高电平时,若SDA引脚出现下降沿,则产生启动信号;反之,当SCL为高电平,而SDA引脚出现上升沿时,则产生停止信号。
图6-9启动信号与停止信号的引脚时序
a)启动信号b)停止信号
(2)数据传送时序
数据传送过程中,如图6-10所示,当SCL为高电平时,SDA引脚上的信号是被传送的数据位(低电平为“0”,高电平为“1”),必须保持稳定;若要更改被传送的数据位,则必须先令SCL为低电平。可见,I2C总线仅在SCL为高电平时传送数据。
图6-10数据传输过程中的引脚时序
(3)响应信号时序
I2C总线以字节为单位传送数据和地址。传送时高位在前、低位在后。每发送完一个字节后,发送方都要求接收方返回一个响应信号。响应信号有两种,分别是应答信号ACK和非应答信号ACK,其时序如图6-11所示,下面分析该时序。
图6-11响应信号的引脚时序
a)应答信号ACK b)非应答信号ACK
1)若主机为发送方,则发送完一个字节后,需要从机进行应答。此时,主机在SCL引脚产生一个时钟脉冲(高电平),并将SDA引脚设置为高电平(即释放对总线的控制)。接收方若需继续接收下一个数据,则主动将SDA引脚设置为低电平。即产生如图6-11a所示的ACK信号。主机检测到ACK信号后将继续发送下一个数据。若接收方不需要接收下一个数据,则不更改SDA引脚状态,使其保持高电平。即产生如图6-11b所示的ACK信号。主机检测到ACK信号后,将产生如图6-9b所示的停止信号,并结束发送。
2)若主机为接收方,则接收完一个字节数据后,主动产生一个应答信号。如果主机希望接收新数据,则该应答信号为ACK信号。检测到ACK信号的从机将发送下一个数据。如果主机不需要接收新数据,则应答信号为ACK信号。从机检测到ACK信号后,将停止发送、释放SDA线(即使其为高电平)。之后,主机可以发送停止信号,结束本次数据传输。
3.I2C总线的数据帧格式
如前所述,I2C总线传输数据之前除了发送启动信号外,还要发送从机地址,并确认数据传输方向。具体方法是,主机发送启动信号后,接着再向从机发送一个字节数据。如图6-12所示,该数据的高7位是从机的地址;最低位(第0位)R W代表数据的传输方向,0表示主机是发送方(向从机写数据),1表示主机是接收方(读从机的数据)。
没有I2C总线接口的单片机,如MCS-51单片机等,可以利用自身的并行I/O引脚模拟产生I2C总线时序,以实现对I2C总线接口器件的扩展。例如,在图6-13中,8051单片机用P1.0和P1.1模拟I2C总线的SDA和SCL引脚。
图6-12 I2C总线的从机地址格式
图6-13引脚模拟I2C总线