模拟I²C总线多主通信研究与软件设计

2010-06-22 20:55:50来源: 维库开发网

      摘要 介绍模拟I2C总线的多主节点通信原理,并提出一种新的实现方法。这种采用延时接收比较来实现仲裁的方法,可使不具有I2C接口的普通微控制器(MCU)能够实现模拟I2C总线的多主通信,同时对I2C总线的推广起到了积极作用。

      I2C总线(Inter IC BUS)是PHILIPS公司推出的双向两线串行通信标准。由于它具有接口少、通信效率高等优点,现已得到广泛的应用\\[1~3\\]。它除了可以进行简单的单主节点通信外,还可以应用在多主节点的通信系统中。在多主节点通信系统中,如果两个或者更多的主节点同时启动数据传输,总线具有冲突检测和仲裁功能,保证通信正常进行并防止数据破坏。现在许多微控制器(MCU)都具有I2C总线接口,能方便地进行I2C总线设计。对于没有I2C总线接口的MCU,可以采用两条I/O接口线进行模拟\\[2,3\\]。目前,一些介绍模拟I2C的资料主要讲的是在单主节点系统中进行的通信,这使得模拟I2C总线的应用具有一定的局限性。本文根据总线仲裁的思想,提出一种多主节点通信的思想及实现流程。

      1  I2C总线系统简介[1~3]

      I2C总线系统是由SCL(串行时钟)和SDA(串行数据)两根总线构成的。该总线有严格的时序要求,总线工作时,由串行时钟线SCL传送时钟脉冲,由串行数据线SDA传送数据。总线协议规定,各主节点进行通信时都要有起始、结束、发送数据和应答信号。这些信号都是通信过程中的基本单元。总线传送的每1帧数据均是1个字节,每当发送完1个字节后,接收节点就相应给一应答信号。协议规定,在启动总线后的第1个字节的高7位是对从节点的寻址地址,第8位为方向位(“0”表示主节点对从节点的写操作;“1”表示主节点对从节点的读操作),其余的字节为操作数据。图1列出I2C总线上几个基本信号的时序。

      图1中包括起始信号、停止信号、应答信号、非应答信号以及传输数据“0”和数据“1”的时序。起始信号就是在SCL线为高时SDA线从高变化到低;停止信号就是在SCL线为高时SDA线从低变化到高;应答信号是在SCL为高时SDA为低;非应答信号相反,是在SCL为高时SDA为高。传输数据“0”和数据“1”与发送应答位和非应答位时序图是相同的。

      图1  I2C总线上基本信号的时序

      图2表示了一个完整的数据传送过程。在I2C总线发送起始信号后,发送从机的7位寻址地址和1位表示这次操作性质的读写位,在有应答信号后开始传送数据,直到发送停止信号。数据是以字节为单位的。发送节点每发送1个字节就要检测SDA线上有没有收到应答信号,有则继续发送,否则将停止发送数据。

      图2  一次完整的数据传送过程

      2  I2C总线的仲裁

      在多主的通信系统中。总线上有多个节点,它们都有自己的寻址地址,可以作为从节点被别的节点访问,同时它们都可以作为主节点向其他的节点发送控制字节和传送数据。但是如果有两个或两个以上的节点都向总线上发送启动信号并开始传送数据,这样就形成了冲突。要解决这种冲突,就要进行仲裁的判决,这就是I2C总线上的仲裁。

      I2C总线上的仲裁分两部分:SCL线的同步和SDA线的仲裁。SCL同步是由于总线具有线“与”的逻辑功能,即只要有一个节点发送低电平时,总线上就表现为低电平。当所有的节点都发送高电平时,总线才能表现为高电平。正是由于线“与”逻辑功能的原理,当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理。

      SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。图3中给出了两个节点在总线上的仲裁过程。SDA线的仲裁可以保证I2C总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。总线系统通过仲裁只允许一个主节点可以继续占据总线[1]。

      图3是以两个节点为例的仲裁过程。DATA1和DATA2分别是主节点向总线所发送的数据信号,SDA为总线上所呈现的数据信号,SCL是总线上所呈现的时钟信号。当主节点1、2同时发送起始信号时,两个主节点都发送了高电平信号。这时总线上呈现的信号为高电平,两个主节点都检测到总线上的信号与自己发送的信号相同,继续发送数据。第2个时钟周期,2个主节点都发送低电平信号,在总线上呈现的信号为低电平,仍继续发送数据。在第3个时钟周期,主节点1发送高电平信号,而主节点2发送低电平信号。根据总线的线“与”的逻辑功能,总线上的信号为低电平,这时主节点1检测到总线上的数据和自己所发送的数据不一样,就断开数据的输出级,转为从机接收状态。这样主节点2就赢得了总线,而且数据没有丢失,即总线的数据与主节点2所发送的数据一样,而主节点1在转为从节点后继续接收数据,同样也没有丢掉SDA线上的数据。因此在仲裁过程中数据没有丢失。

      图3  两个主节点的仲裁过程

      3  多主通信的原理及其实现流程

      多主通信就是在总线上有多个节点。这些节点既可以作为主节点访问其他的节点,也可以作为从节点被其他节点访问。当有多个节点同时企图占用总线时,就需要总线的仲裁。对于模拟I2C总线系统,怎样实现总线的仲裁是现在研究模拟I2C总线系统的难点。文献\\[4\\]提出在系统中增加1根BUSY线,在占用总线之前先检测BUSY线,看总线是否被占用。若总线空闲,则设置BUSY线并向总线上传送数据;否则,接收数据,直到总线空闲时才占有总线。这种实现多主通信的方法有两个缺点:① 因为I2C最大的优点就是接口少、效率高,这样做不仅增加了使用资源而且减少了I2C总线的优势;② 当主节点数比较多时,等待时间比较长,效率不高。本设计根据总线的仲裁原理,提出一种基于延时比较的仲裁方法。当主节点想要占用总线时,先检测总线上是否空闲,如果总线是空闲的就发送数据。在发送数据的同时,将总线上的数据接收并与发送的数据进行比较。如果不同,说明总线上同时还存在其他节点,于是就退出;否则,一直到发送完数据。这种方法既体现了I2C总线的高效性,同时还具有良好的扩展性。

      图4  多主通信流程

      图4给出了基于延时比较的多主通信流程,其中MCU作为从节点部分的流程在图5中给出。在节点发送起始信号之前先要检测一下总线上是否为空闲状态(BUSY是否为0)。这里使用的检测方法是,持续检测一段时间看总线上的电平是否一直为高,若是说明总线上为闲状态,否则说明有其他的节点正在使用总线,要等一段时间再发送。当总线空闲时,发送起始信号,接着发送要访问的从节点的地址字节。每发送1位数据就接收比较1次,看发送和接收的是否一致,若是则继续,否则跳出到从节点的接收状态。如果没有产生冲突,MCU作为主节点继续发送数据,直到任务结束,然后发送停止信号并返回。如果数据不一样,MCU将跳转到从节点状态。由于在跳转到从节点接收状态的过程中累加器(ACC)和工作寄存器(Ri)的数据没有发生变化,所以数据没有丢失,作为从节点可以继续接收总线上的数据。这样整个通信的过程没有中断,数据也没有丢失。

      图5  从节点部分的流程

      图5给出了从节点的流程。进入从节点时,要将BUSY置为高,说明MCU现在正在工作,不能完成其他的任务。在MCU作为从节点完成接收任务后,要将BUSY置为低。MCU在接收到寻址字节后与自己的地址字节进行比较。如果是访问自己的就进入到下面的接收程序,否则跳出。在访问自己的时候,还要判断主节点是读取数据还是写数据,以便进入相应的程序。在写字节的子程序中,从节点每发送1个字节的数据后都要察看是否有应答信号(ACK),有则说明数据接收到了;否则要跳出等待,重新发送。在读字节的子程序中,每接收1个字节的数据就要发送1个应答信号(ACK),以示接收正常,否则主节点将停止继续发送。在现有的资料中,关于从节点的原理和源代码比较少,这里给出作为从节点时写字节子程序的源代码。由于篇幅有限其他的子程序没有列出。

[1] [2]

关键字:模拟  总线  通信  研究

编辑:金子 引用地址:http://www.eeworld.com.cn/wltx/2010/0622/article_955.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
模拟
总线
通信
研究

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved