首页 > 范文大全 > 正文

2C总线协议及其软件的实现'> I2C总线协议及其软件的实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇2C总线协议及其软件的实现'> I2C总线协议及其软件的实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

在电子消费品、通讯及工业电子等应用领域,许多看似不相关的设计常常有许多相似之处,比如几乎每个系统都有这几个部分组成:处理器、数据存储介质及应用专用电路,如广播、电视中用到的数字调谐器、信号处理器,或支持语音拨号的电话中需要的DTMF发生器等。而它们之间的数据传递通常都有距离短、流量小、突发性等特点,如何利用这些共性,使电路的设计简单而性能稳定呢?本文介绍由Philips公司提出的I2c总线很好地解决了这个问题。 I2C总线为两线双向串行传输总线,它为模块之间的数据传递提供了一种方便有效的方法,特别适合应用于有很多模块、彼此之间非频繁数据传递的设计中。文中介绍了I2C总线协议,并给出了其软件实现方法,最后提出了硬件连接方法中应注意的问题。

i2c总线协议

1.协议概述

I2C总线仅占用系统的两个I/O口,一条作为串行数据线SDA,一条作为串行时钟线SCL,线上外加上拉电阻,在不传数据时SCL、SDA总保持高电平。连在每一个总线上的器件都有一个唯一地址,它们彼此之间只有简单的Master/Slaver关系:

Master:控制时钟线,产生启动信号、时钟信号、停止信号。控制线上的发送和接收节奏。

Slaver:处于从机地位,按SCL线上的时钟接收SDA线上的数据或发送数据到SDA线上。

它是个真正的多主控总线方式,如果有两个或两个以上Master同时有数据传送请求时,通过检测发出去的数据是否和SDA线上的数据相同来判断是否发生冲突,数据不同将放弃此次传输,通过这种冲突检测、仲裁机制可以防止数据冲突。

I2C总线要求所有连在I2C总线上的器件都必须是开漏或开集输出,用以实现线与的功能,可使不同Master产生的时钟同步,也解决Master和Slaver之间速度不匹配问题。I2C总线的传输速度:标准模式可达100kbit/s,快速模式可达400kbit/s,高速模式可达3.4Mbit/s。

2.协议规范

I2C总线数据传输时序图见图1、图2,其中,图1为写模式时序,图2为读模式时序。其协议规定:数据以字节为单元,每字节8位,SCL的每一时钟脉冲发送一位,先高位后低位。应答位紧跟每个字节之后。接收数据是在时钟的高电平期采样数据,所以改变SDA线上的数据必须在时钟的低电平期,数据在时钟的高电平期应保持不变,正是数据传输的这个特点,I2C总线利用SCL高电平时改变SDA来作为开始(start)和结束(stop)命令。

开始命令信号(start):在SCL为高电平时,产生一个10跳变,表示开始一个数据传输周期。

结束命令信号(stop):在SCL为高电平时,产生一个01跳变,表示结束一个数据传输周期。

从机地址(Slaver address):每个I2C总线上的器件都有唯一的地址。这个地址分固定部分和可编程部分,同类器件的固定地址相同,因为有可编程部分,所以允许有多个同类或相同器件放在同一总线上。从机地址必须紧跟start命令信号之后,与读写指示位组成一个字节发送。I2C线上所有处于从机地位的器件在接到start信号后的第一字节后检查是否和自己的地址相符,如果相符发送应答信号(在SCL的第9个时钟维持SDA线为低电平),不符,仍保持自己SDA口输出为高。I2C总线也支持10位地址,本文主要讨论7位地址方式。

读写位(R/W):读操作,此位置1;写操作,此位置0。

应答位(ACK):每字节后紧跟的第一个时钟对应的SDA数据,这个数据也必须在时钟高电平期维持不变。

无论是读模式还是写模式都是相对Master来定义的。

当Master处于写模式:即Master要向Slaver送数据。Master先发start信号;紧跟着发送7位Slaver地址和读写指示位0;Slaver确认地址和自己相符后置应答位SDA为低电平,并判断读写位,准备接收数据,若地址不符置高电平;Master检查应答位为高,发送stop信号结束此次数据传输周期, 如果为低,继续发送数据,Slaver每接收一字节数据,发送一低应答信号,Master检查到低应答信号后才继续发送下一个字节数据,否则发送stop信号停止发送;当Master数据发送完毕后,也会自动发送stop信号停止此周期传送。时序见图1。

当Master处于读模式:即Master要读Slaver数据。Master先发start信号;紧跟着发送7位Slaver地址和读写指示位1;Slaver确认地址和自己相符后置应答位SDA为低电平,并判断读写位,准备数据发送,若地址不符置应答位为高电平;Master检查应答位为高,发送stop信号结束此次数据传输周期,如果为低,继续发送时钟信号,Slaver按SCL上的时钟将数据放到SDA上,每当Master接收到一字节数据后,发送低应答位给Slaver,Master要停止接收,发送高应答位给Slaver,告诉Slaver不再接收数据,然后发stop信号结束此次数据传输周期。时序见图2。

I2C总线接口的软件实现

本文给出的I2C总线接口程序流程图为在I2C总线上处于Master地位的总线接口程序。程序入口参数:HDADDS(从机地址右移1位)、 FLRW(读写标志位)、REF(存放发送/接收参数在RAM中存放的首地址,数据由高地址到低地址读取或存放)、 SDRVCT(发送参数的个数,不包括HDADDS)。图3为程序流程图,在本刊的网站上给出了具体程序,供读者参考。

I2C总线硬件设计

在硬件电路设计中应注意以下几点:

(1)I2C总线驱动能力和连在总线上的器件的等效电容有关,也就是说所有连在总线上的器件产生的电容负载不能超过400pF。

(2)在I2C总线上,如果所接器件的I/O口的输入电平逻辑判断固定为1.5V和3V,与该芯片的供电电压无关,则该器件在I2C总线上可独立供电,此时I2C的SDA和SCL经上拉电阻连接到5V±10%;如果所接器件的I/O口的输入电平逻辑判断和该芯片的供电电压有关,那么它们必须统一接到相同的供电电压上,且I2C的SDA和SCL必须经上拉电阻也连接在这电压上。图4给出I2C总线上混合这两类器件的电路连接。图中的右边两个为输入电平和供电电压无关的器件,左边两个为输入电平和供电电压有关的器件。

结束语

采用I2C总线的系统很容易实现模块的修改,因为加入一个支持I2C接口的模块到I2C总线或从I2C上去除一个模块无需附加接口电路,且不影响其它电路。I2C总线灵活性好,器件地址可编程,数据传输协议可由自己灵活约定,且容易查错。该总线还具有低耗、宽电压范围、适用温度范围广、抗干扰能力强等特点,因此被广泛应用于电路设计中。