模拟I2C总线多主通信的通用软件包

2007-03-09 19:03:27来源: 互联网
摘要:本文给出软件模拟I2C总线应用在多主机系统中的解决方案。分析多主竞争出现原因及其时段,结合时序图和流程图阐述竞争仲裁的原理及实现方案,并提供通用软件包,用户可将其应用在实际的系统中。 关键词:模拟I2C总线 多主机系统 通用软件包 引言 I2C是由Philips公司推出的芯片间串行传输总线。它以规范严谨、使用简单灵活、支持的外围器件繁多等特点而被广泛应用。对于不具备I2C接口的主器件(通常指MCU),可利用普通的I/O口来模拟I2C总线,但由于无法解决多主竞争问题而只能应用在单主机系统中。本文提供了一种解决方案,可将模拟I2C总线应用在多主机系统中,实现模拟I2C的多主通信 1 模拟I2C多主通信的设计原理 在I2C总线系统中,可以有多个主器件节点。当多个主器件节点都企图控制总线时,就会出现多主竞争。这时就需要进行仲裁,裁决的结果只允许其中一个主器件节点成为主控器。而硬件I2C系统之所以支持多主系统,是因为其具有的三个特性:①接口的线“与”逻辑功能;②内部冲突检测电路;③I2C中断和状态处理程序。这使其能够自动完成多主竞争时的时钟同步与总线仲裁,无须用户介入。而在模拟I2C系统中,如果能通过软硬件设计模拟出上述的三个特性,就等于解决了竞争仲裁与同步问题,那么模拟I2C总线就完全可以应用于多主机系统中。 首先,经过理论分析与实验验证,得知并联在一起的MCU的普通I/O口线本身就具有线“与”特性。其次,为了避免主节点在总线繁忙时启动总线而引起的冲突,需要增加一条握手线,即BUSY线来代表总线的忙/闲状态。因为数据线(SDA)和时钟线(SCL)上的信号是变化的,所以不能用它们充当BUSY线。另外,当多个MCU都检测到总线空闲,同时企图控制总线时,将形成多主竞争状态,同样会引起冲突。这时就需要引入时间片,用划分的时间片来决定竞争时各MCU占用I2C总线的优先次序。结合SDA的线“与”特性,检测SDA上是否已经存在启动信号(即SDA是否为0),如果直到相应的时间片结束都没有检测到SDA上的启动信号,自己就可以控制总线。最后,由于模拟系统中没有硬件I2C中断,MCU作为从器件时不知何时开始接收总线上的数据,所以,需要提供一根I2C中断信号线,使MCU在中断程序中处于从接收状态,中断线可以与BUSY线合用。 通过上述分析,利用三根信号线就能模拟出硬件I2C的竞争仲裁过程,实现模拟I2C的多主通信。 2 系统连接示意图 三线模拟I2C总线系统的连接框图如图1所示。 模拟I2C多主系统中,要参与竞争的主器件节点采用三级连接方式,如MCU(A)、MCU(B)、MCU(C);对于外围器件节点如24C64等,因不具备主动控制I2C总线的能力,不会参与总线的竞争,所以仍可采用通用的两线连接方式。三线模拟I2C总线中的时钟线SCL和数据线SDA可由MCU的任意两个I/O口线模拟;BUSY线因还要充当中断信号线,则必须与MCU的外部中断引脚INT0或INT1连接。 3 时序分析及流程设计 在检测到BUSY=0(忙)时,不会出现竞争;但当检测到BUSY=1(闲)到将BUSY设为0,需要的典型时间为3个机器周期。在这段时间内,别的MCU仍会检测到BUSY=1,也认为总线空闲到企图占用,这时就出现了竞争与冲突。竞争的时间范围为2%26;#215;3个机器周期。仲裁的方法是为每一个MCU分配一个仲裁时间片,在规定的时间片内MCU反复检测总线中的数据线SDA是否有信号,直到时间片结束。如果没有信号就可马上占用I2C总线,发送起始信号;如果有信号则表示有别的高优先级的MCU要占用,该MCU退出竞争。仲裁时序图如图2所示。 将BUSY设为0后的一段时间规定为仲裁时间。仲裁时间长度为(N-1)%26;#215;Δt。N为I2C总线上参与竞争的MCU个数;Δt为一个时间片的长度,典型值为4个机器周期。按优先级顺序给MCU分配不同个数的时间片。仲裁时序如图2所示:假设MCU(A)优先级最高,它不必进行时间片测试,在检测到总线空闲时直接发送起始位;MCU(B)优先级为次高,在检测到总线空闲后,它需要等待检测一个时间片周期Δt,在Δt期间内SDA线上没有变化,即等待确认比它高优先级的MCU(A)不使用总线后,MCU(B)才能占用总线,发送起始信号;MCU(C)优先级最低,它需要测试等待周期2Δt,只有当MCU(A)、MCU(B)都不占用总线时(SDA一直保持为1),MCU(C)才能占用总线发送起始信号。 在实际应用中,还要注意BUSY线所用的中断脚INT0/INT1需初始化为开中断,并设定为下跳沿触发。当各MCU需控制总线进行主发送或主接收时,需先关掉INT0/INT1需初始化为开中断,并设定为下跳沿触发。当各MCU要控制总线进行主发送或主接收时,需先关掉INT0/INT1中断,再检测BUSY线是否为空闲(=1)。若是空闲就将BUSY设为0,进行竞争仲裁,流程图如图3所示。如果在仲裁时间片内SDA始终为1,说明没有高优先级的MCU要占据总线,自己可以发动起始信号控制总线,直到通信结束后,再释放BUSY线将其置为1。此时其它的MCU就只能作为从器件。如果在仲裁时间片内检测到SDA=0,则表明I2C总线已被占用,立刻将自己的BUSY设为1,并打开中断转为从接收,其流程图如图4所示。在中断程序中接收寻址字节,以判明是否呼叫自己。若是,就进行相应的读写操作;若不是,就放弃退出中断程序。注意:为了使总线上的MCU都能检测到I2C上的起始信号,并使从器件能够同步接收,SDA=0的时间要维持一定的宽度,至少应大于9个机器周期。 结语 经实验证明:三线模拟I2C总线解决了多主竞争问题,可方便的应用于多主机系统中,提高了系统的灵活性,也进一步扩大了软件模拟I2C的应用范围,在实际应用中具有一定的使用价值。通用软件包及测试程序请看网站(http://www.dpj.com.cn)网络补充版。

关键字:模拟  总线  通信  通用

编辑: 引用地址:http://www.eeworld.com.cn/wltx/qtjs/200703/2805.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