恢复I*C主器件和I*C从器件通讯的方法技术

技术编号:2849787 阅读:242 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种恢复I↑[2]C主器件和I↑[2]C从器件通讯的方法,以解决现有技术中由于通讯异常中断而导致的I↑[2]C主器件复位后无法继续对I↑[2]C从器件进行读操作的问题。该方法由I↑[2]C主器件强制给I↑[2]C从器件输入SCL时钟信号,使I↑[2]C从器件释放SDA数据线,从而使I↑[2]C总线恢复到正常的可读写状态。本发明专利技术用软件的方法弥补了I↑[2]C协议上的不足,提高了不同I↑[2]C器件通讯过程中的抗干扰性,避免由于通讯异常中断而导致的总线故障,增加了系统的可靠性。

【技术实现步骤摘要】

本专利技术涉及I2C主器件和I2C从器件,尤其涉及一种恢复I2C主器件和I2C从器件通讯的方法。
技术介绍
I2C(Inter-Integrated Circuit,相互作用的集成电路)总线是一种用于集成芯片之间连接的二线制总线,是一种由SDA(串行数据线)和SCL(串行时钟线)构成的串行总线,它通过SDA及SCL在连到总线上的器件之间传送信息,最高传送速率为3.4Mbps。目前,I2C总线已成为一个国际标准,在通讯、工控等领域里得到广泛应用。当某个I2C总线接口器件向总线发送信息时,它就是I2C主器件,而当其从总线上接收信息时,又成为I2C从器件,I2C主器件和I2C从器件都可以工作于接收和发送状态。在I2C总线工作过程中,在其空闲状态,SDA和SCL均保持为高电平。I2C总线上的控制信号有三种类型,分别是开始信号、结束信号和应答信号,其具体概念如下开始信号SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据;结束信号SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据;应答信号I2C从器件处于接收状态时,I2C从器件在SCL的每个上升沿接收数据,当接收到8bit数据后,在SCL的第9个上升沿向I2C主器件发出低电平脉冲的ACK应答位,表示已正确收到数据。I2C总线必须由I2C主器件控制,I2C主器件发出的SCL信号用于控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。传统上,I2C主器件和I2C从器件的复位都是设计成独立的,或者某些I2C器件就没有外部复位输入功能,只有接通电源产生的上电复位。在这种设计下,I2C主从器件之间一般都能正常通讯,不会出现I2C读写失败的问题。但是,在某些特殊情况下,主从器件在读写通讯过程中,可能会出现I2C主器件复位了,而I2C从器件并没有复位的情况,例如当I2C从器件处于发送状态,即I2C主器件正在对I2C从器件进行读操作时,通讯异常中断,I2C从器件在通讯中断时所送出的数据为“0”,SDA线一直保持低电平,I2C从器件一直处于等待读的状态,不能释放I2C总线。这样即使在I2C主器件正常复位后,也无法与I2C从器件进行正常的通讯。在这种情况下,如果没有采取必要的措施,I2C主器件对I2C从器件的读操作将一直失败。常用的I2C器件有两种,分别为自身有复位功能的和自身无复位功能的。对于自身无复位功能的I2C器件(如内存条SDRAM上的E2PROM芯片,没有单独提供复位接口),采用对I2C器件进行下电后重新上电的操作来解决上述问题。在重新上电后,I2C器件会自动进行初始化,从而恢复了I2C器件可读写的正常状态。这种方法需要人工干预来恢复I2C器件的正常状态,自愈性较差,当I2C器件的通讯故障率比较高的情况下,其维护成本较高;并且多数情况下所有设备的电源是统一的,很难对单独的I2C器件进行上下电操作。对于自身有复位功能的I2C器件,采用单独控制方式恢复其复位功能,在出现故障时,对故障器件专门复位,通过复位操作重新初始化I2C器件来排除故障。采用这种方式进行复位时,主从I2C器件的复位先后关系复杂,对故障器件复位之前需要经过复杂的判断,而且需要设计相应的外部电路来提供复位通道,从而大大增加了系统的耦合性;另外有复位功能的I2C器件虽然提供了复位接口,但是复位会对整个器件进行了初始化,而不是仅仅初始化I2C接口,由此造成了比较大范围的影响。
技术实现思路
本专利技术的目的在于提供一种恢复I2C主器件和I2C从器件通讯的方法,以解决现有技术中因I2C总线通讯中断而导致的I2C主器件复位后无法继续对I2C从器件进行读操作的问题。为解决上述问题,本专利技术提供以下技术方案一种恢复I2C主器件和I2C从器件通讯的方法,所述I2C主器件和I2C从器件通过串行数据线和串行时钟线进行通讯;当所述I2C主器件和I2C从器件通讯中断后进行下述步骤A、复位I2C主器件;B、I2C主器件检测串行数据线,并在检测到串行数据线处于被占用状态时通过串行时钟线向I2C从器件输入时钟信号,使I2C从器件恢复正常。所述串行数据线处于被占用状态是指串行数据线处于低电平状态。在所述步骤B中,I2C主器件通过串行时钟线给I2C从器件输入至少9个周期的时钟信号使I2C从器件将通讯中断时正在发送的字节继续发送完毕。所述步骤B包括步骤b1、I2C主器件通过串行时钟线给I2C从器件输入n个周期的时钟信号后,I2C主器件检测串行数据线是否处于被占用状态,其中n为大于等于1小于等于8的整数;b2、若是则重复步骤b1,若否则I2C从器件恢复到正常可读写状态。I2C主器件通过串行时钟线给I2C从器件输入时钟信号的优选值为9个周期。由于本专利技术采用了以上技术方案,故具有以下有益效果本专利技术在I2C主器件和I2C从器件通讯异常中断时,由I2C主器件强制给I2C从器件输入SCL时钟信号,使I2C从器件释放SDA数据线,从而使I2C总线恢复到正常的可读写状态。本专利技术用软件的方法弥补了I2C协议上的不足,提高了不同I2C器件通讯过程中的抗干扰性,降低了故障恢复的成本,增加了系统的可靠性。附图说明图1为解决I2C总线通讯故障方法一的流程图;图2为I2C从器件释放I2C总线的时序示意图;图3为解决I2C总线通讯故障方法二的流程图;图4为本专利技术的具体实施例的示意图。具体实施例方式I2C主器件和I2C从器件利用I2C总线进行通讯的过程中,若I2C主器件正在对I2C从器件进行读操作时,通讯异常中断,I2C从器件在通讯中断时所送出的数据为“0”,这样在I2C主器件上电复位后,SDA线一直保持低电平,I2C从器件一直处于等待读的状态,于是I2C主器件无法与I2C从器件进行正常的通讯。如果I2C从器件在通讯中断时所送出的数据为“1”,则SDA线为高电平,这样在I2C主器件上电复位后,I2C从器件可以释放总线,I2C主器件可以访问I2C从器件,可以对I2C从器件发起新的通讯。但是,由于在I2C总线通讯中断的时机点很难控制I2C从器件的输出状态,输出“0”和输出“1”的比例大致是各50%,所以有必要提供一种在I2C总线通讯异常中断时恢复I2C主器件和I2C从器件通讯的方法。如图1所示,在I2C总线通讯发生异常中断时,若I2C主器件在正常复位后检测到SDA线一直保持低电平,即I2C从器件无法恢复的情况,在这种情况下,如图2所示,I2C主器件强制给I2C从器件输入一段至少9个周期的SCL时钟信号,I2C从器件在此时钟驱动下将通讯中断时正在发送的字节中剩下的几位(1~8位)送出后,SDA线变为高电平,I2C从器件释放SDA线,I2C从器件恢复到正常可读写状态。由于I2C从器件通讯中断的时机点有可能在一个字节8位当中的任何一位,因此I2C主器件强制给I2C从器件输入一段9个时钟周期以上的SCL时钟信号可以使I2C从器件充分释放SDA线,保证I2C主器件对I2C从器件的再通讯。在I2C总线通讯发生异常中断时,若I2C主器件在正常复位后检测到SDA线一直保持低电平的情况也可以采用以下方法来解决如图3所示,首先I2C主器件通过SCL线给I2C从器件输入n个周本文档来自技高网
...

【技术保护点】
一种恢复I↑[2]C主器件和I↑[2]C从器件通讯的方法,所述I↑[2]C主器件和I↑[2]C从器件通过串行数据线和串行时钟线进行通讯;其特征在于:当所述I↑[2]C主器件和I↑[2]C从器件通讯中断后进行下述步骤:A、复位I↑[2 ]C主器件;B、I↑[2]C主器件检测串行数据线,并在检测到串行数据线处于被占用状态时通过串行时钟线向I↑[2]C从器件输入时钟信号,使I↑[2]C从器件恢复正常。

【技术特征摘要】
1.一种恢复I2C主器件和I2C从器件通讯的方法,所述I2C主器件和I2C从器件通过串行数据线和串行时钟线进行通讯;其特征在于当所述I2C主器件和I2C从器件通讯中断后进行下述步骤A、复位I2C主器件;B、I2C主器件检测串行数据线,并在检测到串行数据线处于被占用状态时通过串行时钟线向I2C从器件输入时钟信号,使I2C从器件恢复正常。2.根据权利要求1所述的恢复I2C主器件和I2C从器件通讯的方法,其特征在于所述串行数据线处于被占用状态是指串行数据线处于低电平状态。3.根据权利要求1所述的恢复I2C主器件和I2C从器件通讯的方法,其特征在于在所述步骤B中,I2C主器...

【专利技术属性】
技术研发人员:叶荣标邱锦陈祺柳精伟
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1